下面将展示我用普通的静态数组实现的队列
1.首先先写一个队列的接口(queue.h)
#include#define QUEUE_TYPE int void create_queue(size_t size); void destroy_queue(void); void insert(QUEUE_TYPE value); void delete(void); QUEUE_TYPE first(void); QUEUE_TYPE last(void); int is_empty(void); int is_full(void); int aqueue_print(void); int lqueue_print(void);
2.再编写a_queue.c文件实现具体函数操作
#include "queue.h" #include#include #define QUEUE_SIZE 100 #define ARRAY_SIZE (QUEUE_SIZE + 1) static QUEUE_TYPE queue[ARRAY_SIZE]; static size_t front = 1; static size_t rear = 0; 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]; } QUEUE_TYPE last(void){ assert( !is_empty() ); return queue[rear]; } int is_empty(void){ return (rear + 1) % ARRAY_SIZE == front; } int is_full(void){ return (rear + 2) % ARRAY_SIZE == front; } int aqueue_print(void){ size_t find = front; int count = 0; while(find != (rear + 1) % ARRAY_SIZE){ printf("[%d]:%d", find, queue[find]); ++count; find = (find + 1) % ARRAY_SIZE; if(find != (rear + 1) % ARRAY_SIZE) printf(","); } return count; }
3.最后编写测试主程序(a_main.c)
#include "a_queue.c"
int main(){
insert(1);
insert(2);
insert(3);
insert(4);
insert(5);
printf("n该队列存储了%d个元素",aqueue_print());
printf("n队列头元素为%d,尾元素为%dnn", first(), last());
delete();
delete();
printf("n该队列存储了%d个元素",aqueue_print());
printf("n队列头元素为%d,尾元素为%dnn", first(), last());
return 0;
}
控制台输出为:
[1]:1,[2]:2,[3]:3,[4]:4,[5]:5 该队列存储了5个元素 队列头元素为1,尾元素为5 [3]:3,[4]:4,[5]:5 该队列存储了3个元素 队列头元素为3,尾元素为5
总结:队列的静态数组版本中的一些不太懂的函数部分,大家有时间可以参考我以前写的堆栈——C语言实现,里面介绍的比较清楚,接下来写动态数组的版本。



