队列的数组实现(循环队列)
2016-03-14 16:08
573 查看
/* *队列的数组实现即循环队列,初始化时令front=rear=0, *插入一个新元素,rear增1,删除一个元素,front增1. *非空队列,头指针始终指向队列头元素,尾指针始终指向 *尾元素的下一位置 *Note:循环队列空时,front=rear;队列满时,front=rear; *所以仅凭front=rear无法判断是否是空还是满,则少用一个元素空间, *约定“队列头指针在队列尾指针的下一位置则队列为满”。 */ #include <stdio.h> #include <stdlib.h> #define MAXQSIZE 10 struct QueueRecord; typedef struct QueueRecord *Queue; typedef int ElementType; struct QueueRecord { int Front; int Rear; ElementType *Array; }; int IsEmpty(Queue Q) { return Q->Front==Q->Rear; } void MakeEmpty(Queue Q) { Q->Front=0; Q->Rear=0; } int IsFull(Queue Q) { return (Q->Rear+1)%MAXQSIZE==Q->Front; } Queue QueueInit(void) { Queue Q; Q=(Queue)malloc(sizeof(struct QueueRecord)); Q->Array=(ElementType *)malloc(MAXQSIZE *sizeof(int)); Q->Front=0; Q->Rear=0; return Q; } void Enqueue(ElementType X,Queue Q) { if(IsFull(Q)) printf("Queue Already Full,No space to enter!!!"); else { Q->Array[Q->Rear]=X; Q->Rear++; } } void Dequeue(Queue Q) { if(IsEmpty(Q)) printf("Queue is Empty!!!"); else { printf("删除的对头元素为:%3d\n",Q->Array[Q->Front]); Q->Front++; } } void QueueArrPrint(Queue Q) { int i; for(i=Q->Front;i<Q->Rear;++i) { printf("%3d\n",Q->Array[i]); } } int main() { Queue Q=QueueInit(); int x; for(x=0;x<9;++x) { Enqueue(x,Q); } QueueArrPrint(Q); Dequeue(Q); QueueArrPrint(Q); Enqueue(18,Q); Enqueue(19,Q); Enqueue(20,Q); QueueArrPrint(Q); return 0; }
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)