队列的顺序存储结构

队列的顺序存储结构相对于链式存储结构较为 复杂,本文重点介绍队列顺序结构。下面简单的谈两个问题:
1.
由于是顺序队列,很容易想到用数组来存储元素,假如一个队列的长度是10,就是一下可以放入10个元素,当9个 元素出队后,又放入3个元素,此时是不是要再增长数组的长度呢?实际中不可能增加数组的长度而任内存空间的浪费,所以我们要构造循环队列,也就是当rear=(队列的长度-1),下一个入队元素的位置是rear=(rear+1)%(队列的长度),同理front也是如此。只要是顺序队列都是循环队列
2.如何判断什么时候队列是空,什么时候队列已经满了呢?这个是实际中不可避免的问题。在顺序队列中,我们通常用front,rear两个"指针"来进行入队和出队的操作,在队列的初始化时,front=rear,此时队列为空,这是队列为空的判断条件;那么什么时候队列满了呢,通常留一个存储空间不存储元素,此时判断队列满的条件就是(rear+1)%(队列的长度) =  front,解决了当rear = front时,不知道是队满还是队空的问题。
简单的介绍了循环队列中的棘手的问题,下面给出简单实现的代码:

点击(此处)折叠或打开

  1. #include<iostream>
  2. #define MAX_SIZE 10
  3. using namespace std;

  4. struct Squeue {
  5.     int data[MAX_SIZE];
  6.     int rear, front;
  7. };

  8. void initSqueue(Squeue *);
  9. void emptySqueue(Squeue *);
  10. void fullSqueue(Squeue *);
  11. void Insqueue(Squeue *, int);
  12. void Outsqueue(Squeue *, int *);
  13. void ergodicSqueue(Squeue *);

  14. void initSqueue(Squeue *q) {
  15.     q->front = 0;
  16.     q->rear = 0;
  17. }
  18. void emptySqueue(Squeue *q) {
  19.     if (q->rear == q->front) {                  //判断队列空的条件
  20.         cout << "队列为空!!!" << endl;
  21.         exit(-1);
  22.     }
  23.     else
  24.         return;
  25. }
  26. void fullSqueue(Squeue *q) {
  27.     if ((q->rear + 1) % MAX_SIZE == q->front){   //判断队列已满的条件
  28.     cout << "队列已满!!!" << endl;
  29.     exit(-1);
  30.     }
  31.     else
  32.         return;
  33. }
  34. void Insqueue(Squeue *q, int e) {
  35.     fullSqueue(q);                      //入队时判断队列是否已满
  36.     q->data[q->rear] = e;
  37.     q->rear = (q->rear + 1) % MAX_SIZE;
  38. }
  39. void Outsqueue(Squeue *q, int *e) {
  40.     emptySqueue(q);                     //出队时判断队列是否已空
  41.     *e = q->data[q->front];
  42.     q->front = (q->front + 1) % MAX_SIZE;
  43. }
  44. void ergodicSqueue(Squeue *q) {          //对队列进行入队出队操作后,打印在队列中的元素
  45.     int i = 0;
  46.     cout << "在队列中的元素是:";
  47.     while (q->front != q->rear) {
  48.         cout << q->data[q->front] << ",";
  49.         q->front = (q->front + 1) % MAX_SIZE;
  50.         i++;
  51.     }
  52.     cout << endl;
  53.     cout << "队列中的元素个数为:" << i << endl; //统计队列中元素的个数
  54. }
  55. int main() {

  56.     Squeue queue;
  57.     int e = 0;
  58.     initSqueue(&queue);
  59.     for (int i = 1; i <= 9; i++) {
  60.         Insqueue(&queue, i);
  61.     }
  62.    
  63.     Outsqueue(&queue, &e);
  64.     cout << "出队的元素是:" << e << endl;
  65.     Outsqueue(&queue, &e);
  66.     cout << "出队的元素是:" << e << endl;

  67.     Insqueue(&queue, 10);
  68.     Outsqueue(&queue, &e);
  69.     cout << "出队的元素是:" << e << endl;
  70.     ergodicSqueue(&queue);
  71. }
执行结果:

以上只是粗略的介绍,当然更为详细的是画图分析该过程,由于画图比较繁琐,这里不作展示。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29876893/viewspace-1847566/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29876893/viewspace-1847566/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码下载:完整代码,可直接运行 ;运行版本:2022a或2019b或2014a;若运行有问题,可私信博主; **仿真咨询 1 各类智能优化算法改进及应用** 生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化 **2 机器学习和深度学习方面** 卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断 **3 图像处理方面** 图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知 **4 路径规划方面** 旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化 **5 无人机应用方面** 无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配 **6 无线传感器定位及布局方面** 传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化 **7 信号处理方面** 信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化 **8 电力系统方面** 微电网优化、无功优化、配电网重构、储能配置 **9 元胞自动机方面** 交通流 人群疏散 病毒扩散 晶体生长 **10 雷达方面** 卡尔曼滤波跟踪、航迹关联、航迹融合

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值