当前位置:   article > 正文

【顺序表】循环队列入队与出队_循环队列入队出队

循环队列入队出队

前言

本文章介绍的是循环队列的入队与出队的操作。

题目案例

输入描述

整数n表示n个元素入队

n个元素,用回车隔开

输出描述

输出三个元素

问题分析

  1. 首先应该初始化顺序表。
  2. 循环队列入队是通过改变队尾指针来达到入队的。
  3. 循环队列出队是通过改变队头指针来达到出队的。

 具体代码

  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4. #define MAXQSIZE 100
  5. #define OK 1
  6. #define ERROR 0
  7. #define OVERFLOW -2
  8. typedef char QElemType;
  9. typedef char SElemType;
  10. typedef int Status;
  11. typedef struct {
  12. QElemType *base;//初始化时动态分配存储空间
  13. int front;//头指针
  14. int rear;//尾指针
  15. } SqQueue;
  16. Status EnQueue(SqQueue &Q, QElemType e);
  17. Status DeQueue(SqQueue &Q, QElemType &e);
  18. //算法3.11 循环队列的初始化
  19. Status InitQueue(SqQueue &Q) {//构造一个空队列Q
  20. Q.base = new QElemType[MAXQSIZE]; //为队列分配一个最大容量为MAXSIZE的数组空间
  21. if (!Q.base)
  22. exit(OVERFLOW); //存储分配失败
  23. Q.front = Q.rear = 0; //头指针和尾指针置为零,队列为空
  24. return OK;
  25. }
  26. int main() {
  27. SqQueue Q;
  28. QElemType e, j;
  29. int n,i;
  30. InitQueue(Q);
  31. cin>>n; //输入n的值
  32. for(i=0;i<n;i++)
  33. {
  34. cin>>e; //输入e的值
  35. EnQueue(Q, e);
  36. }
  37. while (DeQueue(Q, e)){
  38. cout << e <<endl; //输出e的值
  39. }
  40. return 0;
  41. }
  42. Status EnQueue(SqQueue &Q, QElemType e) {//插入元素e为Q的新的队尾元素
  43. if ((Q.rear + 1) % MAXQSIZE == Q.front) //尾指针在循环意义上加1后等于头指针,表明队满
  44. return ERROR;
  45. Q.base[Q.rear] = e; //新元素插入队尾
  46. Q.rear = (Q.rear + 1) % MAXQSIZE; //队尾指针加1
  47. return OK;
  48. }
  49. //循环队列出队
  50. Status DeQueue(SqQueue &Q, QElemType &e){
  51. if(Q.front == Q.rear) //若队列为空
  52. {
  53. return ERROR;
  54. }
  55. e = Q.base[Q.front];
  56. Q.front = (Q.front + 1) % MAXQSIZE;
  57. return OK;
  58. }

 问题结果

 样例输入

3
A
B
C

样例输出

A
B
C

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/867311
推荐阅读
相关标签