顺序实现的循环队列只是逻辑上的循环队列,要与链式的区别开来
具体的函数类型可根据需要自行修改,这里采用bool只是方便
#include<bits/stdc++.h>
using namespace std;
#define Maxsize 10
typedef struct Queue { //循环队列,牺牲一个单元来区分队空和队满,体现为Q.front == (Q.rear + 1) % Maxsize
int data[Maxsize];
int front, rear; //队头和队尾指针
}Sqqueue;
void Initqueue(Sqqueue& Q)
{
Q.front = Q.rear = 0; //初始化
}
bool Emptyqueue(Sqqueue Q) //判空
{
if (Q.front == Q.rear)
return true;
return false;
}
bool Push(Sqqueue& Q, int e) //入队
{
if (Q.front == (Q.rear + 1) % Maxsize) //这里采用的是牺牲一个单元来区分队空和队满
return false; //队满
Q.data[Q.rear] = e;
Q.rear = (Q.rear + 1) % Maxsize; //这里取模是为了体现逻辑上的循环,要与链式的循环区别开
return true;
}
bool Pop(Sqqueue& Q, int &e) //出队
{
if (Q.front == Q.rear)
return false; //队空
e = Q.data[Q.front];
Q.front = (Q.front + 1) % Maxsize;
return true;
}
int Lengthqueue(Sqqueue Q) //队列长度
{
return (Q.rear - Q.front ) % Maxsize;
}
int main()
{
Sqqueue Q;
Initqueue(Q);
cout<<Emptyqueue(Q)<<endl;
Push(Q, 1);
Push(Q, 2);
Push(Q, 3);
cout << "队列长度:" << Lengthqueue(Q) << endl;
for (int i = 0; i < 3; i++)
{
int e = 0;
Pop(Q,e);
cout << e << " "; //队列先进先出
}
return 0;
}