数据结构之顺序循环队列的基本操作(非常详细C语言版)
1.排忧解惑:
2.代码实现
# include <stdio.h>
# include <malloc.h>
#define MAXQSIZE 5
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int QElemType;
typedef int Status;
typedef struct {
QElemType * base;
int front;
int rear;
} SqQueue;
Status InitQueue(SqQueue &Q) {
Q.base = (QElemType *)malloc(MAXQSIZE*sizeof(QElemType));
if(!Q.base) {
printf("内存溢出,无法开辟空间!");
return OVERFLOW;
}
Q.front=Q.rear=0;
printf("初始化队列成功!\n");
return OK;
}
Status EnQueue(SqQueue &Q) {
if((Q.rear+1)%MAXQSIZE==Q.front) {
printf("当前队满!\n");
return OVERFLOW;
}
int input;
printf("请输入入队元素:\n");
scanf("%d",&input);
Q.base[Q.rear] = input;
Q.rear = (Q.rear+1)%MAXQSIZE;
return OK;
}
Status DeQueue(SqQueue &Q) {
if(Q.front==Q.rear) {
printf("当前队空,请先入队!\n");
return ERROR;
}
int output;
output = Q.base[Q.front];
Q.front = (Q.front+1)%MAXQSIZE;
printf("出队元素为:%d\n",output);
return OK;
}
Status GetHead(SqQueue &Q) {
if(Q.front==Q.rear) {
printf("当前队空,请先入队!\n");
return ERROR;
}
int head;
head = Q.base[Q.front];
printf("当前队头元素为:%d\n",head);
return OK;
}
Status QueueEmpty(SqQueue &Q) {
if(Q.front==Q.rear) {
printf("当前队空,请先入队!\n");
return ERROR;
}
printf("当前队列不为空\n");
}
Status TravelQueue(SqQueue &Q) {
if(Q.front==Q.rear) {
printf("当前队空,请先入队!\n");
return ERROR;
}
int front2 = Q.front;
printf("当前队列中的元素为:");
while(!(front2==Q.rear)) {
printf("%d ",Q.base[front2]);
front2=(front2+1)%MAXQSIZE;
}
printf("\n");
return OK;
}
Status QueueLength(SqQueue &Q) {
return OK;
}
Status DestoryQueue(SqQueue &Q) {
Q.front=Q.rear;
printf("队列销毁成功!");
return OK;
}
int main(void) {
SqQueue Q;
int option;
int loop=1;
do {
printf("1.初始化队列\n");
printf("2.判断当前队列是否为空\n");
printf("3.入队\n");
printf("4.出队\n");
printf("5.取队头元素\n");
printf("6.获取当前队列长度\n");
printf("7.遍历队列中元素\n");
printf("8.销毁队列\n");
printf("9.退出系统\n");
printf("请输入你的操作:");
scanf("%d",&option);
switch(option) {
case 1:
InitQueue(Q);
break;
case 2:
QueueEmpty(Q);
break;
case 3:
EnQueue(Q);
break;
case 4:
DeQueue(Q);
break;
case 5:
GetHead(Q);
break;
case 6:
QueueLength(Q);
break;
case 7:
TravelQueue(Q);
break;
case 8:
DestoryQueue(Q);
break;
case 9:
loop = 0;
printf("你退出了系统......");
}
printf("\n\n");
} while(loop);
}