定义顺序存储的循环队列存储结构,并编写循环队列的各种基本操作实现函数
说明:队列的基本操作可包括:
① void InitQueue (Queue &Q); //构造一个空队列 Q
② int EmptyQueue (Queue Q);
//判断队列Q是否为空,若空返回1,否则返回0
③ void EnQueue (Queue &Q, ElemType item); //元素 item 进队列Q
④ ElemType OutQueue (Queue &Q); //队头元素出队列Q,并返回其值
⑤ ElemType PeekQueue (Queue Q); //返回队头元素值
⑥ void ClearQueue (Queue &Q); //清空队列
代码如下:
#include<stdio.h>
#include<malloc.h>
#include<process.h>
#include<math.h>
#define maxsize 10
typedef int elemtype;
typedef struct
{
elemtype *base;
int front;
int rear;
}sqqueue;
void initqueue(sqqueue &q) //顺序循环队列的初始化
{
q.base=(elemtype *)malloc(maxsize*sizeof(elemtype));
if(!q.base)exit(0);
q.front=q.rear=0;
}
void insertqueue(sqqueue &q,elemtype e) //队列插入元素
{
if((q.rear+1)%maxsize==q.front){printf("元素已满!");exit(0);}
q.base[q.rear]=e;
q.rear=(q.rear+1)%maxsize;
}
int lengthqueue(sqqueue &q) //求队列的长度
{
return (q.rear-q.front+maxsize)%maxsize;
}
void deletqueue(sqqueue &q,int i) //删除某元素
{
if(q.front==q.rear){printf("队列为空!");exit(0);}
for(int j=q.front+i;j<=q.rear;j++)
{
q.base[j-1]=q.base[j];
}
q.rear--;
}
elemtype outqueue(sqqueue &q) //队头元素出队列Q,并返回其值
{
elemtype e;
if(q.rear==q.front){printf("空队!");exit(0);}
e=q.base[q.front];
q.front++;
return e;
}
elemtype peekqueue(sqqueue &q) //只返回队首元素
{
if(q.rear==q.front){printf("空队!");exit(0);}
elemtype e=q.base[q.front];
return e;
}
void printqueue(sqqueue &q) //输出队列
{
if(q.rear==q.front){printf("空队!");exit(0);}
else
for(int i=q.front;i<q.rear;i++)
{
printf("%3d",q.base[i]);
}
}
void clearqueue(sqqueue &q) //队列清空
{
q.rear=q.front;
}
int main()
{
sqqueue q;
elemtype n=0,e;
printf("1.初始化顺序队列q!\n");
initqueue(q);
printf("此时队列长度为:%d\n",lengthqueue(q));
printf("2.输入不超过9个不为0的元素进队:\n");
int N=0;
while(N!=9)
{
N++;
printf("\n请输入第%d个数:",N);
scanf("%d",&n);
if(n!=-1)
insertqueue(q,n);
}
printf("此时队列长度为:%d\n",lengthqueue(q));
printf("输出列表为:");
printqueue(q);
printf("\n3.队头出队返回其值为:%d",outqueue(q));
printf("\n此时队列长度为:%d\n",lengthqueue(q));
printf("输出列表为:");
printqueue(q);
printf("\n4.输出队头元素为:%d\n",peekqueue(q));
printf("此时队列长度为:%d\n",lengthqueue(q));
printf("输出列表为:");
printqueue(q);
printf("\n5.删除第二个元素:\n");
deletqueue(q,2);
printf("此时队列长度为:%d\n",lengthqueue(q));
printf("输出列表为:");
printqueue(q);
printf("\n6.清空队列:\n");
clearqueue(q);
printf("此时队列长度为:%d\n",lengthqueue(q));
system("pause");;
}
运行结果: