顺序循环队列问题
设队列的元素类型为char,实现顺序循环队列的各种基本操作的程序:① 初始化队列Q;
② 判断队列Q是否为空;
③ 入队操作。循环调用入队操作,将若干元素(不少于10个)入队;
④ 出队操作,出队一个元素,并输出该元素;
⑤ 输出队列元素个数;
⑥ 调用入队操作,依次入队4个元素;
⑦ 输出队列序列;
⑧ 主函数通过函数调用实现以上各项操作。
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
#define maxqsize 100
typedef struct
{
ElemType *base;
int front;
int rear;
}SqQueue;
void InitQueue(SqQueue &q) //初始化队列
{
q.base =(ElemType *)malloc(sizeof(SqQueue));
if(!q.base ) //存储分配失败
exit(0);
q.front=q.rear=0;
}
void Destory(SqQueue &q) //销毁队列
{
if(q.base)
free(q.base);
q.base=NULL;
q.front =q.rear =0;
}
int QueueEmpty(SqQueue *q) //判断队列是否为空
{
return(q->front==q->rear);
}
int EnQueue(SqQueue &q,ElemType e) //入队
{
if((q.rear+1)%maxqsize == q.front)
return 0;
q.rear=(q.rear+1)%maxqsize;
q.base[q.rear]=e;
return 1;
}
int DeQueue(SqQueue &q,ElemType &e) //出队
{
if(q.front == q.rear)
return 0;
q.front=(q.front+1)%maxqsize;
e=q.base[q.front];
return 1;
}
void main()
{
ElemType e;
SqQueue *q;
int i=0,n,m=4;
int a[maxqsize];
printf("初始化队列\n");
InitQueue(q);
printf("输入若干元素入队\n");
while(a[i]!='\n')
{
scanf("%d",&a[i]);
i++;
}
n=i;
for(i=0;i<n;i++)
{
if(EnQueue(q,a[i])==0){
printf("队满,不能入队\n");
break;}
}
printf("队列为%s\n",(QueueEmpty(q)?"空":"非空"));
printf("出队一个元素:");
DeQueue(q,e);
printf("%d",e);
printf("\n队列元素个数为:%d\n",n);
printf("依次入队四个元素:");
for(i=0;i<m;i++)
{
scanf("%d",&e);
if(EnQueue(q,e)==0){
printf("队满,不能入队\n");
break;}
}
printf("输出队列序列:");
for(i=0;i<(m+n);i++)
{
DeQueue(q,e);
printf("%d ",e);
}
Destory(q);
}