循环队列的相关操作
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAXQSIZE 100
#define OK 1
#define ERROR 0
#define True 1
#define False 0
#define OVERFLOW -1
typedef int Status;
typedef struct
{
int *base;
int front;
int rear;
}SqQueue;
//构建循环队列
Status InitQueue(SqQueue *Q)
{
Q->base=(int *)malloc(MAXQSIZE*sizeof(int));
if(!Q->base) exit(OVERFLOW);
Q->front=Q->rear=0;
return OK;
}
//插入操作
Status EnQuenu(SqQueue *Q,int e)
{
if((Q->rear+1)%MAXQSIZE==Q->front)//判断队列是否已满
return ERROR;
Q->base[Q->rear]=e; //插入元素 ,队列的插入只能从队尾
Q->rear=(Q->rear+1)%MAXQSIZE;//rear后移
return OK;
}
//删除操作
Status DeQueue(SqQueue *Q)
{
if(Q->front==Q->rear) //判断是否为空队列
return ERROR;
Q->front=(Q->front+1)%MAXQSIZE;//将front向后边移动,队列的删除只能从队头
return OK;
}
//向队列中传入数据
Status PasQueue(SqQueue *Q,int n)
{
int i;
if(n>MAXQSIZE)
return ERROR;
else
{
Q->front=Q->rear=0;
for(i=0;i<n;i++)
{
printf("base[%d]=",i);
scanf("%d",&Q->base[i]);
Q->rear++;
}
}
return OK;
}
Status SqQueueTrave(SqQueue Q)
{
if(Q.front==Q.rear)
return ERROR;
int i;
if(Q.front>Q.rear) //若Q.front<Q.rear
{
for(i=Q.front;i<MAXQSIZE;i++)
{
if(!Q.base[i])
continue;
printf("%4d",Q.base[i]);
}
for(i=0;i<Q.rear;i++)
printf("%4d",Q.base[i]);
}
else //若Q.front>Q.rear
{
for(i=Q.front;i<Q.rear;i++)
printf("%4d",Q.base[i]);
}
printf("\n");
}
int main()
{
int n,e;
char c;
SqQueue Q;
InitQueue(&Q);
printf("\n 1.队列的初始化\n 2.插入元素\n 3.删除元素\n 4.退出\n请输入你的选择\n");
while(c!='0')
{
scanf("%c",&c);
switch(c)
{
case'1':
printf("输入首次向队列传入数据的长度:");
scanf("%d",&n);
PasQueue(&Q,n);
SqQueueTrave(Q);
break;
case'2':
printf("请输入插入的元素:");
scanf("%d",&e);
EnQuenu(&Q,e);
SqQueueTrave(Q);
break;
case'3':
DeQueue(&Q);
SqQueueTrave(Q);
break;
case'0':
exit(0);
default:
break;
}
}
system("pause");
}