您的位置:首页 > 理论基础 > 数据结构算法

c语言数据结构——循环队列

2018-02-28 11:38 225 查看
参考上一篇的简单队列,我们要提出一些不同的地方:
关于判断队空,队满的条件:
循环有什么不同呢?就是当前面的元素出对后,入队的元素可以使用之前的内存空间,节省了地方。但是同时也不能用原来的方法判断了。
但入队时要判断队列是否已满:(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: