数据结构与算法之循环队列的操作

/*
循环队列的入队和出队算法设计
初始化循环队列 、打印队列、插入元素到循环队列、获取循环队列的首元素,元素不出队、出队、获取循环队列元素个数、判断循环队列的空和满。

核心:
循环队列入队, 队尾循环后移: 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;
}

数据结构与算法之循环队列的操作相关推荐

  1. 【数据结构与算法】循环队列和链队列的比较

    前言 本文原本是一篇随感+笔记,被翻出来后就整理发了博客. 不曾想能上搜索头条,既如此,决定更新一下,加上必要的阐释,避免影响有需求的读者. (我这么理解大家,如果有需要的话,是不是可以考虑点个赞或者 ...

  2. 【数据结构与算法】循环队列的Java实现

    定义接口 public interface QueueInterface<T> {/*** 入队* 在队尾插入指定数据元素* @param element*/void enQueue(T ...

  3. python 熊猫钓鱼_Python数据结构与算法之使用队列解决小猫钓鱼问题

    本文实例讲述了Python数据结构与算法之使用队列解决小猫钓鱼问题.分享给大家供大家参考,具体如下: 按照<啊哈>里的思路实现这道题目,但是和结果不一样,我自己用一幅牌试了一下,发现是我的 ...

  4. 数据结构与算法-栈与队列

    数据结构与算法-栈与队列 栈 基本概念 简单表述就是仅在表尾进行插入和删除操作的线性表. 常见操作 入栈和出栈, 均在线性表的尾部进行. 基本原则就是, 先入后出. 队列 基本概念 和栈不同的是,队列 ...

  5. 2.2基本算法之递归和自调用函数_数据结构与算法之5——队列和栈

    栈和队列比较简单,而且实用性非常广泛,这里主要介绍一下他们的概念和实现,在很多算法中,栈和队列的运用很重要,因此,虽然简单确是最重要的数据结构之一,必须重视. 栈是保证元素后进先出(后存入者先使用,L ...

  6. char栈java,Java数据结构与算法-栈和队列(示例代码)

    (摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...

  7. 【数据结构与算法基础】队列、栈、递归

    栈(Stack) 定义 栈是一种容器,其中添加移除新项总发生在同一端.这一端通常称为"顶部".与顶部对应的端称为"底部". 最重要特性:先进后出.这一特性让栈拥 ...

  8. java判断栈中元素数目_Java数据结构与算法-栈和队列

    (摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...

  9. 数据结构与算法:10 队列与多线程

    10 队列与多线程 知识结构: 队列是我们经常使用的一种数据结构,如下图所示,购物结账,去食堂打饭等都需要排队,而结账或打饭的顺序与我们排队的顺序是相同的,即谁先排队就为谁先服务. 比如我们发送邮件. ...

最新文章

  1. 教你用Python进行自然语言处理(附代码)
  2. 2020华为推迟发布鸿蒙战略,早新闻:华为5nm麒麟芯片延期,确认新版鸿蒙将发...
  3. Python(数据库之表操作)
  4. java文档注释生产api没有注释_一个神奇的没有springboot注释的api文档生成器---JApiDocs...
  5. “疯狂猜成语”软件用户体验
  6. linux文件i节点,深入理解linux中i节点(inode)
  7. 通过企业账号邀请开发者(不需要支付99刀,在真机上调试)
  8. 单片机c语言仿真,单片机c语言教程:C51表达式语句及仿真器
  9. IT公司速查手册的各大IT公司薪资和待遇内幕
  10. 关于DNF的多媒体包NPK文件的那些事儿(8) - DNF里的DDS图像
  11. 流畅的 Python
  12. 解决使用sharding-jdbc-spring-boot-starter 造成SQLFeatureNotSupportedException: isValid的问题
  13. 2020届校园招聘360笔试题
  14. android 根据宽度调整字体大小,android 字体大小 根据分辨率 自动调整
  15. 奥赛 兔子繁殖 c语言,兔子繁殖问题(斐波拉契)
  16. 2020年3月全国程序员工资统计,平均工资13820元
  17. 正在保存“index.vue”: 从 “‘Vetur‘, ‘ESLint‘“ (configure)中获取代码操作。
  18. 第一章 甄士隐梦幻识通灵 贾雨村风尘怀闺秀
  19. 构造器(有参、无参)
  20. 【软件推荐】压缩软件——7-Zip

热门文章

  1. 中国坚果脱壳机行业市场供需与战略研究报告
  2. 2021年中国电缆吹风机市场趋势报告、技术动态创新及2027年市场预测
  3. java vc_vc++与 java有什么不同
  4. js金额格式化最简单方法 JS对货币格式化,js钱三位一隔,javascript货币格式化
  5. 权限不足_十分钟掌握Linux文件属性及权限操作,不再担心权限不足!
  6. Python菜鸟入门:day08函数概念
  7. 我的15年操作系统开源路——RT-Thread 创始人熊谱翔
  8. 开源新手必看7个小技巧
  9. 万万没想到 Java 中最重要的关键字竟然是这个!
  10. Zoom 是如何击败科技巨头的?