顺序队列

本程序能够对用户的输入做了合理的处理使得用户想要删除超过本队列的最大容量时会提醒用户该操作错误,从而让用户重新输入,更人性化的提供了两种删除队列元素的方法供用户选择…

/*
完成对队列的初始化 、判断队列的空和满、插入元素、获取队列的首元素、删除元素、销毁队列、
返回队列的长度、打印队列*/#include<iostream>
#include<Windows.h>using namespace std;#define MaxSize  100
typedef int DataType;typedef struct Queue {DataType arr[MaxSize];int front; //前指针int rear;  //尾指针
}sQueue;//队列的初始化
bool InitSq(sQueue* Sq) {if (!Sq) return false;Sq->front = Sq->rear = 0;return true;
}
//判断队列是否为空
bool EmptySq(sQueue* Sq) {if (!Sq) return false;if(Sq->rear==Sq->front){return true;}return false;}
//判断队列是否为满
bool FullSq(sQueue* Sq) {if (!Sq) return false;if (Sq->rear - Sq->front == MaxSize) {return true;}return false;
}
//插入元素
bool InsertSq(sQueue* Sq, int &Element) {if (!Sq) return false;if (FullSq(Sq)) {    //判断队列是否还能插入元素cout << "队列已满,无法插入元素! " << endl;return false;}Sq->arr[Sq->rear] = Element;   //将元素插入到对应的位置Sq->rear++;   //插入后为指针向后移动一位return true;
}
//打印队列元素
void PrintSq(sQueue* Sq) {int p = Sq->front;cout << "顺序存储的队列里面的元素是: ";while (p<Sq->rear) {cout << " " << Sq->arr[p];p++;}cout << endl;return;
}
//获取队列的首元素
bool GetSqFirst(sQueue* Sq, int &firstElement){if (!Sq) return false;if (EmptySq(Sq)) {cout << "获取队首元素失败!,这个队列是空队列!" << endl;return false;} else {firstElement = Sq->arr[Sq->front];return true;}}
//删除队列里元素,将后面的元素向前面移动
bool DelSq1(sQueue* Sq, int &Element) {if (!Sq) return false;if (EmptySq(Sq)) {cout << "这是一个空队列 ";return false;}Element = Sq->arr[Sq->front];for (int i = Sq->front + 1; i < Sq->rear; i++) {Sq->arr[i-1] = Sq->arr[i];}Sq->rear--;return true;
}
//删除前面的元素front向后移动,但是可能会导致假溢出
bool DelSq2(sQueue* Sq,int &Element) {if (!Sq) return false;if (EmptySq(Sq)) {cout << "这是个空队列 ";return false;}Element = Sq->arr[Sq->front];Sq->arr[Sq->front] = Sq->arr[++Sq->front];return true;
}
//返回队列的长度
int LenSq(sQueue* Sq) {return Sq->rear - Sq->front;
}
//销毁队列
void DestroSq(sQueue* Sq) {Sq->front = Sq->rear = 0;
}
int main(void) {sQueue *Sq = new sQueue;if (InitSq(Sq)) {  //初始化队列cout << "队列初始化成功! " << endl;} else {cout << "队列初始化失败! " << endl;}    int n;  //用户想要插入的个数cout << "请输入你想要插入的元素的个数: ";cin >> n;//直到用户输入正确的个数才能进行下面的程序while (1) {      if (n > MaxSize) {cout << "输入的个数超过队列所能容纳的最大个数,不能插入,请用户谨慎选择输入个数! " << endl;} else {break;}}int Element=0;  //  用户要插入的元素//插入元素for (int i = 0; i < n;i++){cout << "请输入你想要插入的元素 :";cin >> Element;if (InsertSq(Sq,Element)) {cout << "插入元素 " << Element << "成功! " << endl;} else {cout << "插入失败! " << endl;}}//打印队列PrintSq(Sq);//获取队列的首元素int firstElement;  //首元素if (GetSqFirst(Sq,firstElement)) {cout << "获取队列的首元素成功! " << endl;cout << "****************************" << endl;cout << "首元素是: " << firstElement << endl;cout << "****************************" << endl;} else {cout << "获取队列的首元素失败! " << endl;}cout << endl;cout << "下面开始删除元素!  " << endl;int chose;cout << "请输入你想要删除的方式: 1后面的元素覆盖前面的值, 2直接删除前面的值(可能会导致假溢出)" << endl;cout << "注意: 恶意输入会导致程序停止运行!!!!" << endl;cin >> chose;int many=0;  //要删除元素的个数cout << "请输入你想要删除的元素的个数: ";cin >> many;while (1) {if (many > n) {cout << "要删除的个数超过本队列的最大容量,请重试! " << endl;cin >> many;continue;  } else {break;}}for (int m=0; m < many; m++) {switch (chose) {case 1://删除队列里的元素(后面的元素覆盖前面的元素)if (DelSq1(Sq, Element)) {cout << "删除队列的元素成功! " << endl;cout << "****************************" << endl;cout << "删除的元素是: " << Element << endl;cout << "****************************" << endl;} else {cout << "删除元素失败,队列里没有该元素! " << endl;}break;case 2://删除前面的元素front向后移动,但是可能会导致假溢出if (DelSq2(Sq, Element)) {cout << "删除队列的元素成功! " << endl;cout << "****************************" << endl;cout << "删除的元素是: " << Element << endl;cout << "****************************" << endl;} else {cout << "删除元素失败,队列里没有该元素! " << endl;}break;default:cout << "恶意输入!!!!!!!!!!,程序结束!!!" << endl;system("pause");return 1;}}PrintSq(Sq);//返回队列的长度int len =LenSq(Sq);cout << "该队列的长度是: " << len << endl;//销毁队列cout << "销毁队列中... " << endl;DestroSq(Sq);PrintSq(Sq);system("pause");return 0;
}

用户恶意选择删除程序时:

用户恶意选择删除元素长度超过队列长度是:

第二种删除方式同样具有以上功能:

数据结构与算法之顺序队列相关推荐

  1. java数据结构与算法之顺序表与链表深入分析

    转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...

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

    数据结构与算法之循环队列的操作 /* 循环队列的入队和出队算法设计 初始化循环队列 .打印队列.插入元素到循环队列.获取循环队列的首元素,元素不出队.出队.获取循环队列元素个数.判断循环队列的空和满. ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. python数据结构与算法——栈、队列与双端队列

    栈 栈:是一种容器,可存入数据元素.访问元素.删除元素,它的特点在于只能允许在容器的一端进行加入数据和输出数据的运算.没有了位置概念,保证任何时候可以访问.删除的元素都是此前最后存入的那个元素,确定了 ...

最新文章

  1. as3 android白屏,Android 8.0中一些坑以及对应的解决方法
  2. 图像处理池化层pooling和卷积核
  3. myjdbc链接数据库.增删改查
  4. 3万字《SpringBoot微服务开发——Shiro(安全)》
  5. IPTV码流分析指标
  6. Android software RD engineer能力模型
  7. 注册表实现欢迎界面的修改
  8. 48. action 与 filter 的执行流程
  9. python开发软件有哪些?Python编程软件
  10. 一元线性回归(最小二乘法)
  11. 卡尔曼滤波器MATLAB实现(从一维到三维)
  12. 美国住宅IP和机房Ip的区别
  13. 当APO生产订单报工遇到物料账期没开
  14. HTML+CSS静态——绿色的餐饮美食网站(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
  15. Logback 配置文件这么写,TPS提高 10 倍
  16. Kubernetes 集群基于 Rook 搭建 Ceph 分布式存储系统
  17. 【教程】搜索引擎高级语法
  18. 估计的商是什么意思_《商》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
  19. 蜜芽刘楠:垂直电商的新出路是价值链为王
  20. 并不简单的翻页时钟(一):样式篇(Flex布局、line-height、data-set用法、css before after伪元素)

热门文章

  1. flask-admin初次使用遇到的几个小问题(显示对象内存地址,编辑无法正确跳转)
  2. Dart基础-控制流程与异常处理
  3. 中国内裤衬里行业市场供需与战略研究报告
  4. 中国双色向滤光镜行业市场供需与战略研究报告
  5. 固定于计算机主机,一种便于固定的计算机主机的制作方法
  6. php 判断数组某个值,浅谈PHP检查数组中是否存在某个值 in_array 函数
  7. 【历史上的今天】8月19日:大型计算机先驱和小型机之父诞生;中国雅虎邮箱成历史...
  8. 从年末生产故障解锁RocketMQ集群部署的最佳实践
  9. 苹果回应iPhone12用5G耗电快;央行:微信支付宝和数字人民币不存在竞争关系;Win10X 将于年底签署 RTM|极客头条
  10. 挑战摩尔定律极限,揭秘阿里云神龙的封神之路