五、数据结构基础之循环队列C语言实现
2012-05-05 21:14
1211 查看
/* * 五、数据结构基础之循环队列 * 循环队列数据结构: * 由于入队和出队操作中,头指针和尾指针只会增加,导致假上溢而不能有效地利用队列空间 * 将队列空间想象为一个首尾相连的圆环,以此来克服顺序队列的假上溢现象 * --- 2012年4月28日 ---by lee */ #ifndef _CIRCULAR_QUEUE_H #define _CIRCULAR_QUEUE_H #include "Utility.h" //宏定义循环队列的空间大小 #define QUEUESIZE 20 //元素类型定义 typedef int DataType; //循环队列结构的定义 typedef struct _CircularQueue { int front; //队列头指针 int rear; //队列尾指针 int count; //计数器,统计队列中元素个数 DataType data[QUEUESIZE]; //存储队列中的元素 } CircularQueue; //对循环队列(顺序队列)的基本操作 void InitQueue(CircularQueue* queue);//初始化,构造空队 int IsQueueEmpty(CircularQueue* queue);//判断队是否为空 int IsQueueFull(CircularQueue* queue);//判断队是否为满,仅针对顺序队列 void EnQueue(CircularQueue* queue, DataType x);//元素x入队 DataType DeQueue(CircularQueue* queue);//出队,返回队首元素 DataType QueueFront(CircularQueue* queue);//取队首元素 //初始化,构造空队 void InitQueue(CircularQueue* queue) { queue->front=queue->rear=0; queue->count=0; } //队列为空和满时,front都等于rear;判断队列是否为空或者为满: //1、使用计数器count //2、少用一个元素的空间,约定队列满时:(rear+1)%QUEUESIZE=front //rear指向队尾元素的下一个位置,始终为空;队列的长度为(rear-front+QUEUESIZE)%QUEUESIZE //判断队是否为空 int IsQueueEmpty(CircularQueue* queue) { return (0==queue->count); } //判断队是否为满 int IsQueueFull(CircularQueue* queue) { return (QUEUESIZE==queue->count); } //元素x入队 void EnQueue(CircularQueue* queue, DataType x) { //入队前,判断队满 if(IsQueueFull(queue)) Error("Queue is full"); queue->data[queue->rear]=x; queue->rear=(queue->rear+1)%QUEUESIZE; queue->count++; } //出队,返回队首元素 DataType DeQueue(CircularQueue* queue) { //出队前,判断队空 if(IsQueueEmpty(queue)) Error("Queue is empty"); DataType ret=queue->data[queue->front]; queue->front=(queue->front+1)%QUEUESIZE; queue->count--; return ret; } //取队首元素 DataType QueueFront(CircularQueue* queue) { //判断队空 if(IsQueueEmpty(queue)) Error("Queue is empty"); return queue->data[queue->front]; } #endif //测试代码 /* CircularQueue q; InitQueue(&q); EnQueue(&q,1); EnQueue(&q,2); printf("Queue Front: %d\n",DeQueue(&q)); printf("Queue Front: %d\n",DeQueue(&q)); EnQueue(&q,1); EnQueue(&q,2); printf("Queue length: %d\n",q.count); */
相关文章推荐
- 数据结构基础之循环队列C语言实现
- 数据结构基础(5)--C语言实现循环队列--静态
- C# 数据结构基础-实现循环队列
- 数据结构之---C语言实现循环队列
- 数据结构.循环队列(C语言实现)
- 数据结构基础(7) --循环队列的设计与实现
- 数据结构基础(7) --循环队列的设计与实现
- 六、数据结构基础之链队列C语言实现
- 数据结构基础(7) --循环队列的设计与实现
- C# 数据结构基础-实现循环队列
- 数据结构之循环队列c语言实现
- 数据结构基础——循环队列的C++实现
- 数据结构基础(7) --循环队列的设计与实现
- 数据结构基础(7) --循环队列的设计与实现
- 【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
- 数据结构 利用循环队列层次遍历一棵二叉树 递归实现
- 一、数据结构基础之顺序表C语言实现
- 数据结构中队列的实现(基于顺序表循环队列)
- 数据结构基础(1)--数组C语言实现--动态内存分配
- [C语言][数据结构]基础的线性表的顺序表示和实现