数据结构与算法之循环队列的操作
数据结构与算法之循环队列的操作
/*
循环队列的入队和出队算法设计
初始化循环队列 、打印队列、插入元素到循环队列、获取循环队列的首元素,元素不出队、出队、获取循环队列元素个数、判断循环队列的空和满。
核心:
循环队列入队, 队尾循环后移: SQ->rear =(SQ->rear+1)%Maxsize;
循环队列出队, 队首循环后移: SQ->front =(SQ->front+1)%Maxsize;
队空:SQ.front=SQ.rear; // SQ.rear 和 SQ.front 指向同一个位置
队满: (SQ.rear+1) %Maxsize=SQ.front; // SQ.rear 向后移一位正好是 SQ.front
计算元素的个数: (SQ.rear-SQ.front+Maxsize)% Maxsize;
*/
//循环队列的入队和出队算法设计
#include<iostream>
#include<Windows.h>#define MaxSize 6 //定义本循环队列的最大容量using namespace std;typedef struct _LQueue { //循环队列int sq[MaxSize];int front; //循环队列的前指针int rear; //循环队列的尾指针
}LqList;//初始化循环队列
bool InitLqList(LqList *duilie) {if (!duilie) return false;duilie->front = duilie->rear = 0;return true;
}
//插入元素到循环队列
bool InserLq(LqList* duilie, int &Element) {if (!duilie) return false;if ((duilie->rear + 1) % MaxSize == duilie->front) {cout << "该队列元素已满! ";} else {duilie->sq[duilie->rear] = Element;duilie->rear =( duilie->rear + 1)%MaxSize;}return true;
}
//打印队列
void PrintLq(LqList *duilie) {if (!duilie) return;cout << "本循环队列的元素依次是: ";int i = duilie->front;while (i != duilie->rear) {cout <<" "<< duilie->sq[i]; i = (i + 1) % MaxSize;}return;
}
//获取循环队列的首元素,元素不出队
bool GetLqFirst(LqList *duilie, int &Element) {if (!duilie) return false;Element = duilie->sq[duilie->front];return true;
}
//出队
bool outLq(LqList *duilie,int &Element){if (!duilie) return false;if (duilie->front == duilie->rear) {cout << "该队列是空队列! "; return false;} else {Element = duilie->sq[duilie->front];duilie->front = (duilie->front + 1) % MaxSize;}return true;
}
//获取循环队列元素个数
void Getlen(LqList *duilie) {cout << "循环队列的元素个数是: " << (duilie->rear - duilie->front + MaxSize) % MaxSize;return;
}int main(void) {LqList *duilie =new LqList;if (InitLqList(duilie)) {cout << "初始化循环队列成功! " << endl;} else {cout << "初始化循环队列失败! " << endl;}//循环队列入队int num; //用户想要入队或者出队的个数cout << "请输入你想要入队的个数(本程序设置的循环队列最大容量为5): ";cin >> num;//直到用户输入正确的入队个数为止while (1) { if (num > MaxSize) {cout << "输入的数量超过了本队列的最大容量,请重新输入入队的个数: " << endl;cout << "请输入你想要入队的个数: ";cin >> num;} else {break;}}int Element = 0;for (int i = 0; i < num; i++) {cout << "请输入你想要插入的元素: ";cin >> Element;if (InserLq(duilie,Element)) {cout << "插入元素 " << Element << " 成功! " << endl;} else {cout << "插入元素失败! " << endl;}}//打印循环队列里的元素PrintLq(duilie);//获取循环队列的首元素,元素不出列if (GetLqFirst(duilie,Element)) {cout << "循环队列的首元素是: " << Element << endl;} else {cout << "获取循环队列首元素失败! " << endl;}//循环队列出队cout << "请输入你想要出队的个数: ";cin >> num;cout << endl;//直到用户输入正确的出队个数为止while (1) {if (num > (duilie->rear - duilie->front + MaxSize) % MaxSize) {cout << "输入的数量超过了本队列的最大容量,请重新输入出队的个数: " << endl;cout << "请输入你想要出队的个数: ";cin >> num;} else {break;}}for (int i = 0; i < num; i++) {if (outLq(duilie, Element)) {cout << "循环队列元素出队成功! 出队元素是: " << Element << endl;} else {cout << "循环队列元素出队失败! " << endl;}}PrintLq(duilie);Getlen(duilie);cout << "在入队一个元素吧,这可是循环队列哟!" << endl;cout << "请输入你想要插入的元素: ";cin >> Element;if (InserLq(duilie, Element)) {cout << "插入元素 " << Element << " 成功! " << endl;} else {cout << "插入元素失败! " << endl;}PrintLq(duilie);system("pause");return 0;
}
数据结构与算法之循环队列的操作相关推荐
- 【数据结构与算法】循环队列和链队列的比较
前言 本文原本是一篇随感+笔记,被翻出来后就整理发了博客. 不曾想能上搜索头条,既如此,决定更新一下,加上必要的阐释,避免影响有需求的读者. (我这么理解大家,如果有需要的话,是不是可以考虑点个赞或者 ...
- 【数据结构与算法】循环队列的Java实现
定义接口 public interface QueueInterface<T> {/*** 入队* 在队尾插入指定数据元素* @param element*/void enQueue(T ...
- python 熊猫钓鱼_Python数据结构与算法之使用队列解决小猫钓鱼问题
本文实例讲述了Python数据结构与算法之使用队列解决小猫钓鱼问题.分享给大家供大家参考,具体如下: 按照<啊哈>里的思路实现这道题目,但是和结果不一样,我自己用一幅牌试了一下,发现是我的 ...
- 数据结构与算法-栈与队列
数据结构与算法-栈与队列 栈 基本概念 简单表述就是仅在表尾进行插入和删除操作的线性表. 常见操作 入栈和出栈, 均在线性表的尾部进行. 基本原则就是, 先入后出. 队列 基本概念 和栈不同的是,队列 ...
- 2.2基本算法之递归和自调用函数_数据结构与算法之5——队列和栈
栈和队列比较简单,而且实用性非常广泛,这里主要介绍一下他们的概念和实现,在很多算法中,栈和队列的运用很重要,因此,虽然简单确是最重要的数据结构之一,必须重视. 栈是保证元素后进先出(后存入者先使用,L ...
- char栈java,Java数据结构与算法-栈和队列(示例代码)
(摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...
- 【数据结构与算法基础】队列、栈、递归
栈(Stack) 定义 栈是一种容器,其中添加移除新项总发生在同一端.这一端通常称为"顶部".与顶部对应的端称为"底部". 最重要特性:先进后出.这一特性让栈拥 ...
- java判断栈中元素数目_Java数据结构与算法-栈和队列
(摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...
- 数据结构与算法:10 队列与多线程
10 队列与多线程 知识结构: 队列是我们经常使用的一种数据结构,如下图所示,购物结账,去食堂打饭等都需要排队,而结账或打饭的顺序与我们排队的顺序是相同的,即谁先排队就为谁先服务. 比如我们发送邮件. ...
最新文章
- 教你用Python进行自然语言处理(附代码)
- 2020华为推迟发布鸿蒙战略,早新闻:华为5nm麒麟芯片延期,确认新版鸿蒙将发...
- Python(数据库之表操作)
- java文档注释生产api没有注释_一个神奇的没有springboot注释的api文档生成器---JApiDocs...
- “疯狂猜成语”软件用户体验
- linux文件i节点,深入理解linux中i节点(inode)
- 通过企业账号邀请开发者(不需要支付99刀,在真机上调试)
- 单片机c语言仿真,单片机c语言教程:C51表达式语句及仿真器
- IT公司速查手册的各大IT公司薪资和待遇内幕
- 关于DNF的多媒体包NPK文件的那些事儿(8) - DNF里的DDS图像
- 流畅的 Python
- 解决使用sharding-jdbc-spring-boot-starter 造成SQLFeatureNotSupportedException: isValid的问题
- 2020届校园招聘360笔试题
- android 根据宽度调整字体大小,android 字体大小 根据分辨率 自动调整
- 奥赛 兔子繁殖 c语言,兔子繁殖问题(斐波拉契)
- 2020年3月全国程序员工资统计,平均工资13820元
- 正在保存“index.vue”: 从 “‘Vetur‘, ‘ESLint‘“ (configure)中获取代码操作。
- 第一章 甄士隐梦幻识通灵 贾雨村风尘怀闺秀
- 构造器(有参、无参)
- 【软件推荐】压缩软件——7-Zip