队列
循环队列
在队列的顺序存储中,采用出队的方式 , 是删除 front 所指的元素,然后加 1 并返回被删元素。这样可以避免元素 移动,但是也带来了一个新的问题“假溢出” , 使前面的内存不能再次使用。
能否利用前面的空间继续存储入队呢?采用循环队列
演示代码:
#include<iostream>
using namespace std;
//循环队列
//最大存储数
const int MAX = 5;
//模拟存储的数据类型
typedef int dataType;
//队列结构体
struct MyQueue
{
dataType data[MAX];
int front; //指向队头
int rear; //指向队尾
};
//初始化队列
void initQueue(MyQueue & myQueue)
{
myQueue.front = myQueue.rear = 0;
}
//判断队列是否已经满了
bool fullQueue(MyQueue & myQueue)
{
if ( (( myQueue.rear + 1 ) % MAX) == myQueue.front )
{
return true;
}
return false;
}
//入队
void pushQueue(MyQueue & myQueue , dataType value)
{
if (fullQueue(myQueue))
{
cout << "队列已满不可再次插入" << endl;
return;
}
myQueue.data[myQueue.rear] = value;
myQueue.rear = (myQueue.rear + 1) % MAX;
}
//判断队列是否为空
bool emptyQueue(MyQueue & myQueue)
{
if (myQueue.rear == myQueue.front)
{
return true;
}
return false;
}
//弹出队头元素
void pushQueue(MyQueue & myQueue)
{
if (emptyQueue(myQueue))
{
cout << "队列为空" << endl;
return;
}
myQueue.front = (myQueue.front + 1) % MAX;
}
//遍历队列
void printQueue(MyQueue & myQueue)
{
if (emptyQueue(myQueue))
{
cout << "队列为空" << endl;
return;
}
int temp = myQueue.front;
while (temp != myQueue.rear)
{
cout << myQueue.data[temp] << endl;
temp = (temp + 1) % MAX;
}
}
int main()
{
MyQueue myQueue;
//队列初始化
initQueue(myQueue);
//队列添加元素
for (int i = 0; i < 7; i++)
{
pushQueue(myQueue, i);
}
//打印队列元素
printQueue(myQueue);
system("pause");
return 0;
}