静态数组实现队列(C语言)
2009-06-22 17:54
525 查看
概念:队列,FIFO(First in, first out),排队买票,先排的先买,插队的拉出去TJJ
实现:用静态数组实现,比起用链表实现来说,短小精悍,但无法动态更改队列的大小。
基本原理:两个变量front rear,作为数组的的下标,来引用队列中队首和对尾的值。
采用循环数组,其中的道理:入队,出队一直进行,下标一直往前移动,移动过后的的空间无法继续使用。
初始化的时候,保证front比rear大1即可。
代码(参考自《C和指针》):
实现:用静态数组实现,比起用链表实现来说,短小精悍,但无法动态更改队列的大小。
基本原理:两个变量front rear,作为数组的的下标,来引用队列中队首和对尾的值。
采用循环数组,其中的道理:入队,出队一直进行,下标一直往前移动,移动过后的的空间无法继续使用。
初始化的时候,保证front比rear大1即可。
代码(参考自《C和指针》):
/* * 静态数组实现队列 * 优点:短小精悍 * 缺点:无法动态扩展大小 * */ #include "queue.h" /* 接口文件 */ #include <stdio.h> #include <assert.h> /* 数组长度比队列容量大1,是为了区分队列空和满的状态 */ #define QUEUE_SIZE 100 #define ARRAY_SIZE (QUEUE_SIZE + 1) /* queue[front-1] is always NULL */ static QUEUE_TYPE queue[ ARRAY_SIZE ]; static size_t front = 1; static size_t rear = 0; /* * front比rear大1的状态只有在未插入(即队列为空)的时刻才存在。 * 初始化时,只要front比rear大1,在ARRAY_SIZE范围内都可以随便取值。 */ void insert( QUEUE_TYPE value ) { assert( !is_full() ); rear = ( rear + 1 ) % ARRAY_SIZE; queue[ rear ] = value; } void delete( void ) { assert( !is_empty() ); front = ( front + 1 ) % ARRAY_SIZE; } QUEUE_TYPE first( void ) { assert( !is_empty() ); return queue[ front ]; } int is_empty( void ) { /* 和初始化时front比rear大1对应 */ return ( rear + 1 ) % ARRAY_SIZE == front; } int is_full( void ) { /* 为了区别队列空和满状态相等,设定了数组比队列容量大1 * 这样,当rear为QUEUE_SIZE(100)的时候,(rear+2) % ARRAY_SIZE(101)使判空的那一步不会执行 */ return ( rear + 2 ) % ARRAY_SIZE == front; } /* test it */ int main( void ) { int i, value; srand ( (unsigned int)time( NULL ) ); for( i = 0; i < 10; i++ ){ value = rand() % 100; printf( "%d ", value ); insert( value ); } putchar( '/n' ); for( i = 0; i < 10; i++ ){ printf( "%d ", first() ); delete(); } return 0; }
相关文章推荐
- c语言数组方式实现静态循环队列
- 队列的C语言实现(循环数组结构)
- c语言静态数组创建队列
- C++用数组实现的静态队列
- C语言数据结构-顺序队列-数组实现
- 数据结构 --静态队列的一个简单的C语言代码实现
- 基础知识--数组、栈、队列的静态、动态和链式实现
- 数据结构与算法分析-用C语言实现队列(数组方式)
- 静态数组实现的顺序表(C语言实现)
- 静态数组实现循环队列
- c语言实现静态循环队列
- C语言数组实现循环队列
- C语言数组实现队列
- !-- 基于静态数组的顺序表相关操作C语言实现 --!
- 用数组实现队列--静态队列
- 使用数组实现队列----《数据结构与算法分析---C语言描述》
- "《算法导论》之‘队列’":队列的三种实现(静态数组、动态数组及指针)
- C语言使用数组实现简单队列
- C语言斐波那契数列的四种实现方式—递归,迭代,数组,队列
- C语言实现通讯录(静态数组)