当前位置:   article > 正文

利用C++实现队列的表示和操作,插入、删除、遍历等(顺序表示)_队列插入主函数

队列插入主函数

一、创建sqqueue.h头文件,定义队列并声明函数

  1. #pragma once
  2. #include<iostream>
  3. using namespace std;
  4. #define MAXSIZE 100 //最大队列长度
  5. //队列
  6. struct SqQueue
  7. {
  8. int* base; //初始化的动态分配存储空间
  9. int front; //头指针
  10. int rear; //尾指针
  11. };
  12. //初始化
  13. bool InitQueue(SqQueue& Q);
  14. //插入(入队)
  15. bool InsertQueue(SqQueue& Q, int e);
  16. //删除(出队)
  17. bool DeQueue(SqQueue& Q, int& e);
  18. //遍历
  19. void PrintQueue(SqQueue Q);
  20. //判断是否为空
  21. bool QueueEmpty(SqQueue Q);
  22. //队列长度
  23. int QueueLength(SqQueue Q);
  24. //清空
  25. bool ClearQueue(SqQueue& Q);
  26. //销毁
  27. bool DestroyQueue(SqQueue& Q);

二、创建sqqueue.cpp源文件,将声明的函数做具体实现

  1. #include"sqqueue.h"
  2. //初始化
  3. bool InitQueue(SqQueue& Q)
  4. {
  5. Q.base = new int[MAXSIZE]; //分配数组空间
  6. if (!Q.base)
  7. {
  8. exit(0);
  9. }
  10. Q.front = Q.rear = 0; //头指针尾指针置为0,队列为空
  11. return true;
  12. }
  13. //插入(入队)
  14. bool InsertQueue(SqQueue& Q, int e)
  15. {
  16. if ((Q.rear + 1) % MAXSIZE == Q.front) //队满
  17. {
  18. return false;
  19. }
  20. Q.base[Q.rear] = e; //新元素插入队尾
  21. Q.rear = (Q.rear + 1) % MAXSIZE; //队尾指针加1
  22. return true;
  23. }
  24. //删除(出队)
  25. bool DeQueue(SqQueue& Q, int& e)
  26. {
  27. if (Q.front == Q.rear) //队空
  28. {
  29. return false;
  30. }
  31. e = Q.base[Q.front]; //保存队头元素
  32. Q.front = (Q.front + 1) % MAXSIZE; //队头指针加1
  33. return true;
  34. }
  35. //遍历
  36. void PrintQueue(SqQueue Q)
  37. {
  38. while (Q.front != Q.rear)
  39. {
  40. cout << Q.base[Q.front] << endl; //输出头指针元素
  41. Q.front = (Q.front + 1) % MAXSIZE; //头指针加1
  42. }
  43. }
  44. //判断是否为空
  45. bool QueueEmpty(SqQueue Q)
  46. {
  47. if (Q.front == Q.rear)
  48. {
  49. return true;
  50. }
  51. else
  52. {
  53. return false;
  54. }
  55. }
  56. //队列长度
  57. int QueueLength(SqQueue Q)
  58. {
  59. return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
  60. }
  61. //清空
  62. bool ClearQueue(SqQueue& Q)
  63. {
  64. if (Q.base)
  65. {
  66. Q.front = Q.rear;
  67. }
  68. return true;
  69. }
  70. //销毁
  71. bool DestroyQueue(SqQueue& Q)
  72. {
  73. if (Q.base)
  74. {
  75. delete Q.base;
  76. Q.front = Q.rear = 0;
  77. }
  78. return true;
  79. }

三、在主函数中测试

  1. #include<iostream>
  2. using namespace std;
  3. #include"sqqueue.h"
  4. int main()
  5. {
  6. //1.创建队列Q,并初始化
  7. SqQueue Q;
  8. InitQueue(Q);
  9. //2.插入数据
  10. int arr[5] = { 1,2,3,4,5 };
  11. for (int i = 0; i < 5; i++)
  12. {
  13. InsertQueue(Q, arr[i]);
  14. }
  15. cout << "插入后元素:" << endl;
  16. //3.遍历
  17. PrintQueue(Q);
  18. //4.删除
  19. int e;
  20. DeQueue(Q, e);
  21. cout << "元素" << e << "以删除" << endl;
  22. cout << "删除后元素:" << endl;
  23. PrintQueue(Q);
  24. //5.判断是否为空
  25. if (QueueEmpty(Q))
  26. {
  27. cout << "队列为空" << endl;
  28. }
  29. else
  30. {
  31. //6.队列长度
  32. cout << "队列不为空队列长度为:" << QueueLength(Q) << endl;
  33. }
  34. //7.清空
  35. ClearQueue(Q);
  36. cout << "清空后遍历:" << endl;
  37. PrintQueue(Q);
  38. //8.销毁
  39. DestroyQueue(Q);
  40. cout << "销毁后遍历:" << endl;
  41. PrintQueue(Q);
  42. system("pause");
  43. return 0;
  44. }

四、最终结果

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

闽ICP备14008679号