一.静态数组实现
1.队列接口
#include// 一个队列模块接口// 命名为myqueue.h#define QUEUE_TYPE int // 定义队列类型为int// enqueue函数// 把一个新值插入队列末尾void enqueue(QUEUE_TYPE value);// dequeue函数// 删除队列首元素并返回QUEUE_TYPE dequeue(void );// is_empty函数// 判断队列是否为空bool is_empty(void);// is_full函数// 判断队列是否已经满bool is_full(void);// front函数// 返回队列第一个值QUEUE_TYPE front_value(void);// get_size函数// 获取队列元素个数int get_size(void);
2.静态数组队列
#include#include #include"myqueue.h"const int QUEUE_SIZE=100; //队列中元素个数最大限制static QUEUE_TYPE queue[QUEUE_SIZE+1]; //存储队列中值的数组static int front = 0; //指向队列首元素的指针static int rear = 0; //指向队列尾元素的指针void enqueue(QUEUE_TYPE value) { // 判断队列是否为满 assert(!is_full()); // 判断队列是否为空 if (is_empty()) queue[front] = value; queue[rear] = value; rear = (rear + 1) % (QUEUE_SIZE + 1);}QUEUE_TYPE dequeue(void) { //判断队列是否为空 assert(!is_empty()); int temp = queue[front]; front = (front + 1) % (QUEUE_SIZE + 1); return temp;}bool is_empty(void) { //如果rear==front则队列为空 return rear == front;}bool is_full(void) { //如果(rear+1)%(QUEUE_SIZE+1)==front则队列为满 return (rear + 1) % (QUEUE_SIZE + 1) == front;}QUEUE_TYPE front_value(void) { return queue[front];}int get_size(void) { return (rear-front);}
二.动态数组实现
1.队列接口
#include// 在原有基础上增加了creat_queue和destroy_queue函数#define QUEUE_TYPE int // 定义队列类型为int// creat_queue函数// 创建一个队列void creat_queue(size_t size);// destroy_queue函数// 销毁队列void destroy_queue(void);// enqueue函数// 把一个新值插入队列末尾void enqueue(QUEUE_TYPE value);// dequeue函数// 删除队列首元素并返回QUEUE_TYPE dequeue(void );// is_empty函数// 判断队列是否为空bool is_empty(void);// is_full函数// 判断队列是否已经满bool is_full(void);// front函数// 返回队列第一个值QUEUE_TYPE front_value(void);// get_size函数// 获取队列元素个数int get_size(void);
2.动态数组队列
#include#include #include static QUEUE_TYPE *queue; //定义队列指针static size_t queue_size; //记录队列大小static int front = 0;static int rear = 0;void creat_queue(size_t size) { assert(queue_size == 0); queue_size = size; queue =(QUEUE_TYPE*) malloc((queue_size+1)*sizeof(QUEUE_TYPE)); assert(queue != NULL); }void destroy_queue(void) { assert(queue_size > 0); queue_size = 0; free(queue); queue = NULL;}void enqueue(QUEUE_TYPE value) { // 判断队列是否为满 assert(!is_full()); // 判断队列是否为空 if (is_empty()) queue[front] = value; queue[rear] = value; rear = (rear + 1) % (queue_size + 1);}QUEUE_TYPE dequeue(void) { //判断队列是否为空 assert(!is_empty()); int temp = queue[front]; front = (front + 1) % (queue_size + 1); return temp;}bool is_empty(void) { //如果rear==front则队列为空 return rear == front;}bool is_full(void) { //如果(rear+1)%(QUEUE_SIZE+1)==front则队列为满 return (rear + 1) % (queue_size + 1) == front;}QUEUE_TYPE front_value(void) { return queue[front];}int get_size(void) { return (rear - front);}