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 MaxSize 50
//循环队列数据结构
typedef struct {
int *base;
int front;
int rear;//指向最后一个元素的下一个空白区域
}SqQueue;
//初始化
int InitQueue(SqQueue &Q){
Q.base=new int[MaxSize];
if(!Q.base)return 0;
Q.front=Q.rear=0; //头指针和尾指针值为零,队列为空
return 1;
}
//球队列长度
int QueueLength(SqQueue Q){
return (Q.rear-Q.front+MaxSize)%MaxSize;
}
// 入队
int EnQueue(SqQueue &Q,int x){
if((Q.rear+1)%MaxSize==Q.front)//队列满
return 0;
Q.base[Q.rear]=x;//基地址加上偏移量 base+rear
Q.rear=(Q.rear+1)%MaxSize; //rear+1
return 1;
}
//出队
int DeQueue(SqQueue &Q,int &x){//x接受队伍头元素
if(Q.rear==Q.front)//对空
return 0;
x=Q.base[Q.front];
Q.front=(Q.front+1)%MaxSize;
return 1;
}
//取头节点的元素
int GetHead(SqQueue Q){
if(Q.front==Q.rear)
return -1;
return Q.base[Q.front];
}
int main(){
SqQueue Q;
InitQueue(Q);
cout<<QueueLength(Q)<<endl;
for(int i=0;i<4;i++){
EnQueue(Q,i);
}
cout<<QueueLength(Q)<<endl;
return 0;
}
Input && Output
0
4
Process finished with exit code 0