//队列的顺序存储(循环队列)
#include<stdio.h>
#include<stdlib.h>
#define Maxsize 10
typedef struct{
int data[Maxsize];
int front,rear;
}SqQueue;
void InitQueue(SqQueue &Q){//初始化队列
Q.front=Q.rear=0;
}
bool isEmpty(SqQueue Q){//判断队列是否为空
if(Q.front==Q.rear){
return true;
}
return false;
}
bool EnQueue(SqQueue &Q,int x){//入队
if((Q.rear+1)%Maxsize==Q.front){//队满(Q.rear+1 是因为少用了一个队列单元,若不少用一个队列单元,则会导致队满和队空的判断条件相同(也可以设置Q.size变量进行记录)
return false;
}
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%Maxsize;
return true;
}
bool DeQueue(SqQueue &Q,int &x){//出队
if(Q.front==Q.rear){//判断队空
return false;
}
x=Q.data[Q.front];
Q.front=(Q.front+1)%Maxsize; //注意:出队的点,在物理结构中仍在内存里。逻辑上已不在队列
return true;
}
int main(){
SqQueue S;
InitQueue(S);
EnQueue(S,3);
int x=S.data[S.front];
printf("%d\n",x);
printf("队列长度为:%d",(S.rear-S.front+Maxsize)%Maxsize);
return 0;
}
数据结构实战:循环队列的实现与操作
本文深入探讨了数据结构中的顺序存储方式——循环队列,包括其初始化、判断队列是否为空、元素入队和出队等核心操作。通过对循环队列的实践,有助于深化对数据结构中队列概念的理解。
3676

被折叠的 条评论
为什么被折叠?



