队列 之 循环队列
程序员文章站
2022-07-14 13:48:36
...
#include<cstdio>
#include<iostream>
using namespace std;
#define MAXSIZE 50
typedef struct
{
int data[MAXSIZE];
int front;///队头指针:指向队头元素
int rear;///队尾指针:指向队尾元素的下一个位置
}SqQueue;
void InitQueue(SqQueue &Q)///初始化
{
Q.rear=Q.front=0;
}
bool QueueEmpty(SqQueue Q)///判断队列是否为空
{
if(Q.rear=Q.front) return true;
else return false;
}
/*
进队前:判断是否队满
进队
进队后:队尾指针加1取模
*/
bool EnQueue(SqQueue &Q,int x)
{
if((Q.rear+1)%MAXSIZE==Q.front) return false;///队满条件
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MAXSIZE;
return true;
}
/*
出队前:判断是否队空
出队
出队后:队头指针加1取模
*/
bool DeQueue(SqQueue &Q,int &x)
{
if(Q.rear==Q.front) return false;
x=Q.data[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
return true;
}
void Queue_Traverse(SqQueue Q)///循环队列的遍历
{
int i;
if(Q.front==Q.rear) return;///队列为空
i=Q.front;
while(i!=Q.rear)
{
cout<<Q.data[i]<<" ";
i=(i+1)%MAXSIZE;
}
cout<<endl;
}
int main()
{
int x;
SqQueue Q={{1,2,3,4,5,6,7,8,9,10},0,10};
if(QueueEmpty(Q)) cout<<"队列为空"<<endl;
else cout<<"队列不为空"<<endl;
if(EnQueue(Q,99)) cout<<"进队成功"<<endl;
else cout<<"进队失败"<<endl;
if(DeQueue(Q,x)) cout<<"出队成功"<<endl;
else cout<<"出队失败"<<endl;
}
上一篇: 循环队列(JAVA)
下一篇: 循环队列的Java简单实现