上课讲了循环队列,决定自己实现试试
主要有四点
1.定义结构体SqQueue Q,Q中有rear,front两个指针(rear指向队尾,用来进:Q.rear = (Q.rear + 1)%MAXSIZE;front指向队首,用来出:Q.front = (Q.front +1 %MAXSIZE 和一个储存队列值的数组data[MAXSIZE];
2.判断循环队列是否为空,用Q.rear == Q.front;
3.判断循环队列是否满了,用(Q.rear + 1)%MAXSIZE == Q.front;
4.求循环队列的长度,用(Q.rear - Q.front +MAXSIZE) % MAXSIZE
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
#define MAXSIZE 5
typedef int QElemType;
typedef int Status;
typedef struct
{
QElemType data[MAXSIZE];
int front;
int rear;
}SqQueue;
//初始化一个新队列
Status InitQueue(SqQueue &Q)
{
Q.front = 0;
Q.rear = 0;
return OK;
}
//循环队列插入元素e为Q新的队尾元素
Status EnQueue(SqQueue &Q,QElemType e)
{
if((Q.rear+1)%MAXSIZE == Q.front) //队列满的判断
return ERROR;
Q.data[Q.rear] = e;
Q.rear = (Q.rear + 1)%MAXSIZE;
return OK;
}
//循环队列求长度
int QueueLength(SqQueue Q)
{
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
//循环队列出列
Status DeQueue(SqQueue &Q,QElemType &e)
{
//int e;
if(Q.front == Q.rear) //判断队列是否为空
return ERROR;
e = Q.data[Q.front];
Q.front = (Q.front+1) %MAXSIZE;
return OK;
}
int main()
{
SqQueue Q;
int n;
int e;
int f;
int length;
printf("你正在建立一个循环队列。\n");
InitQueue(Q);
printf("请输入你想要创立的第一个队列的长度:\n");
scanf("%d",&n);
if(n<0 || n>MAXSIZE)
exit(0);
else
{
printf("请依次将元素入队列:\n");
while(n--)
{
scanf("%d",&e);
EnQueue(Q,e);
}
printf("请输入你想出列的元素个数:\n");
scanf("%d",&n);
int i=1;
while(n--)
{
// printf("现在将出队一个元素。\n");
DeQueue(Q,f);
printf("出队的第%d个元素的值为:%d",i,f);
printf("\n");
i++;
}
length = QueueLength(Q);
printf("现在队列的长度为:%d\n",length);
return 0;
}
}
深知自己的代码水平依托答辩,欢迎指错!!!!!!!!!!!!