循环队列理解及练习
来源:互联网 发布:室内分布设计软件 编辑:程序博客网 时间:2024/06/02 05:31
最近对循环队列进行了深入了解,根据自己的理解用AI画了下面的示意图,并对其要点进行了归纳。如下所示:
下面是书上的习题,设计一个可以在队头和队尾进行入队、出队的队列,算是循环队列的练习升级版,代码如下:
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
const int MAXSIZE = 100;//循环队列长度,可存储的最大数据个数为MAXSIZE-1
typedef struct cycQueue{
int data[MAXSIZE];
int front, rear;
}cycQueue;//数据类型定义
void initQueue(cycQueue *& Q)//使用指针的引用
{
Q = (cycQueue*)malloc(sizeof(cycQueue));
Q->front = Q->rear=0;
}
int empty(cycQueue* Q)
{
if (Q->front == Q->rear)
return 1;
else
return 0;
}
int enQueue_f(cycQueue * Q, int x)//从队头入队
{
if ((Q->front - 1 + MAXSIZE) % MAXSIZE == Q->rear)//判断队是否为满
return 0;
else
{
Q->data[Q->front] = x;//将x赋值给当前front指向的地址
Q->front = (Q->front - 1 + MAXSIZE) % MAXSIZE;//将front指向下一个front
return 1;
}
}
int enQueue_r(cycQueue*Q, int x)//从队尾入队
{
if ((Q->rear + 1) % MAXSIZE == Q->front)//判断队是否为满
return 0;
else
{
Q->data[(Q->rear + 1) % MAXSIZE] = x;//将x赋值给当前rear的下一个位置
Q->rear = (Q->rear + 1) % MAXSIZE;
return 1;
}
}
int deQueue_f(cycQueue*Q, int &x)//从队头出队
{
if (Q->rear == Q->front)//判断队是否为空
return 0;
else
{
x = Q->data[(Q->front + 1) % MAXSIZE];//将当前front指向的下一个位置的值赋给x,注:front没有存储有用值
Q->front = (Q->front + 1) % MAXSIZE;//将front往前移动一位
return 1;
}
}
int deQueue_r(cycQueue*Q, int&x)//从队尾出队
{
if (Q->rear == Q->front)//判断队列是否为空
return 0;
else
{
x = Q->data[Q->rear];//将当前队尾元素赋值给x
Q->rear = (Q->rear - 1 + MAXSIZE) % MAXSIZE;//将当前队尾后移一位
return 1;
}
}
//以下是测试函数
int _tmain(int argc, _TCHAR* argv[])
{
cycQueue * Q;
int x;
initQueue(Q);
//1、头插法入队、出队,功能类似栈
for (int i = 0; i < 10; i++)
enQueue_f(Q, i);
while (!empty(Q))
{
deQueue_f(Q, x);
cout << x << endl;
}
cout << "==============================\n";
//2、尾插法入队、出队,功能类似栈
for (int i = 0; i < 10; i++)
enQueue_r(Q, i);
while (!empty(Q))
{
deQueue_r(Q, x);
cout << x << endl;
}
cout << "==============================\n";
//3、头入队,尾出队
for (int i = 0; i < 10; i++)
enQueue_f(Q, i);
while (!empty(Q))
{
deQueue_r(Q, x);
cout << x << endl;
}
cout << "==============================\n";
//4、尾出队,头入队
for (int i = 0; i < 10; i++)
enQueue_r(Q, i);
while (!empty(Q))
{
deQueue_f(Q, x);
cout << x << endl;
}
return 0;
}
- 循环队列理解及练习
- 循环队列的自我练习
- 队列及实现、循环队列实现
- 数据结构——队列及循环队列
- 队列定义及实现、循环队列实现
- 浅谈队列及循环队列实现
- python3队列及循环队列基本实现
- 队列及循环队列的基本操作
- 循环队列及循环队列实现数值转换
- 一般队列和循环队列及优先级队列的实现
- 单调队列理解及应用
- 队列的理解(利用数组实现循环队列)
- 深入理解循环队列----循环数组实现ArrayDeque
- 循环队列及C语言实现<一>
- 循环队列及C语言实现<二>
- Java基础 - 循环队列及实现
- 循环队列及C语言实现<三>
- 循环队列的定义及操作
- iOS远程真机之OS X EI Captian 编译 libimobiledevice 错误记录以及解决方法!!
- 十大Intellij IDEA快捷键
- 无法启动链接服务器 "XXXXXX" 的 OLE DB 访问接口 "MSDASQL" 的嵌套事务。由于 XACT_ABORT 选项已设置为 OFF,因此必须使用嵌套事务。
- CodeForces 370 B.Berland Bingo(模拟)
- 【NOI2002】caioj1095: 并查集4(银河英雄传说)
- 循环队列理解及练习
- AndroidStudio 打包apk笔记
- 一次失败的SP优化
- unix环境高级编程-互斥量机制
- 1135: 算菜价
- MySQL 数据库性能优化之表结构优化
- 原生js中的事件委托(为新添加的DOM元素添加事件)
- redis高级应用
- 项目要求url打开android应用