您的位置:首页 > 其它

循环顺序队列的实现

2010-05-07 08:58 288 查看
#include<stdio.h>

#include<process.h>

#define MaxSize 100

typedef int ElemType;

typedef struct

{

ElemType data[MaxSize];

int front;

int rear;

}CircSeqQueue;

//顺序循环队列的初始化

void QueueInitial(CircSeqQueue *pQ)

{

//创建一个又指针pQ所指向的空顺序循环队列

pQ->front=pQ->rear=0;

}

//顺序循环队列判空

int IsEmpty(CircSeqQueue *pQ)

{//顺序循环队列为空时返回1,否则返回0

return pQ->front==pQ->rear;

}

//顺序循环队列判满

int IsFull(CircSeqQueue *pQ)

{//循环队列为满时返回1,否则返回0

return (pQ->rear+1)%MaxSize==pQ->front;

}

//元素进队

void EnQueue(CircSeqQueue *pQ, ElemType e)

{//若队列不满,则元素e进队

if(IsFull(pQ))//队列已满,退出

{

printf("队列溢出!/n");

exit(1);

}

pQ->rear=(pQ->rear+1)%MaxSize;//队尾指针后移

pQ->data[pQ->rear]=e;

}

//元素出队

ElemType DeQueue(CircSeqQueue *pQ)

{//若循环队列不为空,则删除队头元素,并返回它的值

if(IsEmpty(pQ))//队列为空,退出

{

printf("空队列!/n");

exit(1);

}

pQ->front=(pQ->front+1)%MaxSize;//队头指针后移

return pQ->data[pQ->front];

}

//取队头元素

ElemType GetFront(CircSeqQueue *pQ)

{//若队列不为空,则返回队头元素的值

if(IsEmpty(pQ))

{

printf("空队列!/n");

exit(1);

}

return pQ->data[(pQ->front+1)%MaxSize];

}

//循环队列置空

void MakeEmpty(CircSeqQueue *pQ)

{//将由指针pQ所指向的队列变为孔队

pQ->front=pQ->rear=0;

}

void main()

{

int n,i,temp;

CircSeqQueue Q;

CircSeqQueue *pQ=&Q;

QueueInitial(pQ); //顺序循环队列的初始化

IsEmpty(pQ); //顺序循环队列判空

printf("请输入要进队的元素的个数:/n");//元素出队a,b,c

scanf("%d",&n);

for(i=0;i<n;)

{

printf("请输入第%d个元素:/n",++i);

scanf("%d",&temp);

EnQueue(pQ,temp);

}

printf("队头元素为:/n"); //出队一个元素,输出该元素

printf("%d /n",DeQueue(pQ));

printf("此时元素个数为:");

printf("%d /n",pQ->rear-pQ->front);//输出元素个数

printf("请输入要进队的元素的个数:/n");//元素出队d,e,f

scanf("%d",&n);

for(i=0;i<n;)

{

printf("请输入第%d个元素:/n",++i);

scanf("%d",&temp);

EnQueue(pQ,temp);

}

printf("此时元素个数为:");

printf("%d/n",pQ->rear-pQ->front);//输出元素个数

printf("出队列为:/n");

while(pQ->front!=pQ->rear)//输出出队序列

printf("%d ",DeQueue(pQ));

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: