//顺序队列存在一个问题 ---假溢出现象,为了解决这个问题,提出了循环队列
//循环队列中存在队空和队满条件一样的情况,因此提出了牺牲一个空间的方法
//循环队列的基本操作
#include <iostream>
using namespace std;
#define MAXSIZE 5
//队列的结构体
struct Node
{
int *base;
int front;
int rear;
};
//队列的初始化操作
void initQueue(struct Node &Q)
{
Q.base = new int[MAXSIZE];
if(Q.base == NULL)
{
cout<<"地址分配失败\n";
exit(1);
}
Q.front = Q.rear=0;
}
//队空的判断
int isEmpty(struct Node Q)
{
if(Q.front == Q.rear)
{
return 1;
}
else
{
return 0;
}
}
//队满的判断
int isFull(struct Node Q)
{
if((Q.rear+1)%MAXSIZE==Q.front)
{
return 1;
}
else
{
return 0;
}
}
//入队列操作
void Enqueue(struct Node &Q)
{
int e;
cout<<"请输入你要入队的数据:\n";
cin>>e;
Q.base[Q.rear] = e;
Q.rear=(Q.rear+1)%MAXSIZE;
}
//出队列的操作
void inQueue(struct Node &Q,int &e)
{
e = Q.base[Q.front];
Q.front = (Q.front +1)%MAXSIZE;
}
//队列的实际长度
int length(struct Node Q)
{
int len;
len = (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
return len;
}
int main()
{
struct Node Q;
initQueue(Q);
for(int i=0;i<4;i++)
{
if(isFull(Q))
{
cout<<"队列已经满了\n";
break;
}
Enqueue(Q);
}
int e;
for(int i=0;i<4;i++)
{
inQueue(Q,e);
cout<<e<<" ";
}
if(isEmpty(Q))
{
cout<<"队列为空\n";
exit(1);
}
return 0;
}
数据结构(十一)循环队列的基本操作----6个基本操作
最新推荐文章于 2024-07-28 19:16:57 发布