参考上一篇的简单队列,我们要提出一些不同的地方:
关于判断队空,队满的条件:
循环有什么不同呢?就是当前面的元素出对后,入队的元素可以使用之前的内存空间,节省了地方。但是同时也不能用原来的方法判断了。
但入队时要判断队列是否已满:(queue->rear+1)%max_num==queue->front
出对时要判断队列是否为空:(queue->front+1)%max_num==queue->rear
具体情况见代码:
#define max_num 100
#include <iostream>
using namespace std;
typedef struct queue
{
int arr[max_num];
int front;
int reer;
}que1, *que;
void init(que queue)
{
queue->front = 0;
queue->reer = queue->front;
}
bool isEmpty(que queue)
{
if (queue->front == queue->reer)
{
return true;
}
else
{
return false;
}
}
void bianli(que queue)
{
int temp = queue->front;
while (temp != queue->reer)
{
cout << queue->arr[temp] << endl;
temp = (temp + 1) % max_num;
}
}
void in_queue(que queue, int num)
{
if ((queue->reer+1)%max_num==queue->front)
{
cout << "Error:full queue!" << endl;
}
else
{
queue->arr[queue->reer] = num;
queue->reer = (queue->reer + 1) % max_num;
}
}
void out_queue(que queue)
{
if (queue->front == queue->reer)
{
cout << "Error:empty queue" << endl;
}
else
{
queue->front = (queue->front + 1) % max_num;
}
}
int main()
{
que1 queue1;
init(&queue1);
bool a = isEmpty(&queue1);
cout << a << endl;
in_queue(&queue1, 5);
bianli(&queue1);
out_queue(&queue1);
bool b = isEmpty(&queue1);
cout << b << endl;
}