您的位置:首页 > 理论基础 > 数据结构算法

队列的数组实现(循环队列)

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构