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;
}
关于判断队空,队满的条件:
循环有什么不同呢?就是当前面的元素出对后,入队的元素可以使用之前的内存空间,节省了地方。但是同时也不能用原来的方法判断了。
但入队时要判断队列是否已满:(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;
}
相关文章推荐
- 循环队列 C语言数据结构
- 循环队列–C语言实现–数据结构
- 算法与数据结构【四】——C语言实现循环队列
- 数据结构:循环队列(C语言实现)
- 详解数据结构C语言实现之循环队列
- 数据结构:循环队列(C语言实现)
- 数据结构:循环队列(C语言实现)
- 数据结构:循环队列(C语言实现)
- C语言数据结构——循环队列
- 数据结构 c语言实现链式循环队列(输入数字入队 输入字母出队)
- 数据结构:循环队列(C语言实现)
- 数据结构:循环队列(C语言实现)
- 数据结构:循环队列(C语言实现)
- 数据结构循环队列的基本操作(C语言)
- 数据结构循环队列斐波拉契数列的实现(c语言)
- 数据结构:循环队列(C语言实现)
- 数据结构:循环队列(C语言实现)
- 数据结构:循环队列(C语言实现)
- 数据结构:循环队列(C语言实现)
- 数据结构:循环队列(C语言实现)