Code
/* 队列基本操作
InitQueue(&Q):初始化队列,构造一个空队列Q。
QueueEmpty(Q):判队列空,若队列Q为空返回true,否则返回false。
EnQueue(&Q, x):入队,若队列Q未满,则将x加入使之成为新的队尾。
DeQueue(&Q, &x):出队,若队列Q非空,则删除队头元素,并用x返回。
GetHead(Q, &x):读队头元素,若队列Q非空则用x返回队头元素。
ClearQueue(&Q):销毁队列,并释放队列Q占用的内存空间。
* */
#include <iostream>
using namespace std;
#define ElemType int
#define MaxSize 10
//数据结构//
typedef struct {
ElemType data[MaxSize];
int front,rear;//需要头指针和尾指针,因为队列可以在头部和尾部都可以操作。
}SqQueue;
/*基本操作*/
/**
*队空条件:Q.front==Q.rear==0
*队满条件:Q.rear == MaxSize
* 队长:Q.rear - Q.front
*/
//初始化//
void InitQueue(SqQueue &Q){
// front指向队头元素,rear指向队尾元素的下一位置
// (或front指向队头元素的前一位置,rear指向队尾元素)
// - 初始时front == rear == 0
Q.front=Q.rear=0;
}
//判空//
bool IsEmpty(SqQueue Q){
if(Q.rear==Q.front){
return true;
}
return true;
}
//入队//
int EnQueue(SqQueue &Q,ElemType item){
if(Q.rear>=MaxSize){
cout<<"满队列,不能操作"<<endl;
return 0;
}
Q.data[Q.rear]=item;
++Q.rear;
return 1;
}
//出队//
int DeQueue(SqQueue &Q,ElemType &x){
if(Q.rear==Q.front){
cout<<"空队列,不能操作"<<endl;
return 0;
}
x=Q.data[Q.front];
++Q.front;
return 1;
}
int main(){
SqQueue Q;
InitQueue(Q);
cout<<IsEmpty(Q)<<endl;
int x;
DeQueue(Q,x);
for(int i=0;i<4;i++){
EnQueue(Q,i);
}
for(int i=Q.front;i<Q.rear;i++){
cout<<Q.data[i]<<" ";
}
return 0;
}
Input && Output
1
空队列,不能操作
0 1 2 3
Process finished with exit code 0