这里首先展示的是分配一块连续的储存单元存放队列中的元素的储存方法,逻辑上用的结构为环(防止上溢出)的循环队列:
在做循环队列的题目时,明确几个容易混淆的概念(假设数组存储空间为N)
1.存储单元下标是:从0到N-1,即能存储数据的个数为N-1个。
2.为了防止溢出,构成环结构,而形成环结构为了判断队空还是队满则放弃了一个存储单元
#include<stdio.h>
#include<windows.h>
#define MaxSize 5
typedef struct{
int data[MaxSize];
int rear; //尾
int front; //头
}SqQueue;
void InitQueue(SqQueue &Q)
{
Q.front=0;
Q.rear=0;
}
bool CheckQueue(SqQueue Q) ///判断队满
{
if((Q.rear+1)%MaxSize==Q.front){
return false;
}else{
return true;
}
}
bool CheckQueueEmpty(SqQueue Q) ///判断队空
{
if(Q.front==Q.rear)
return false;
else
return true;
}
void PushQueue(SqQueue &Q)
{
int x,element;
scanf("%d",&x);
for (int i = 0; i < x; i++)
{
scanf("%d",&element);
if(CheckQueue(Q)){
Q.data[Q.rear]=element;
Q.rear=(Q.rear+1)%MaxSize;
}
else
break;
}
}
void EnQueue(SqQueue &Q)
{
if(CheckQueueEmpty(Q)){
Q.front=(Q.front+1)%MaxSize;
}
}
void GetQueue(SqQueue Q)
{
for (int i = Q.front; i < Q.rear; i++)
printf("%d ",Q.data[i]);
printf("\n");
printf("%d\n",Q.data[Q.front]);
}
int main()
{
SqQueue Q;
InitQueue(Q);
PushQueue(Q);
EnQueue(Q);
GetQueue(Q);
system("pause");
return 0;
}