当前位置:   article > 正文

算法与数据结构 栈队列 (C++)

算法与数据结构 栈队列 (C++)

5.随机产生10个100以内的整数建立链队列,显示链队列中所有数据元素;从键盘输入出队元素个数 n (1<= n <=10),将 n 个元素出队后显示此时的队头元素。

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. using namespace std;
  5. // 定义链表的节点
  6. template <typename DataType>
  7. class Node {
  8. public:
  9. DataType data;
  10. Node* next;
  11. };
  12. // 定义链队列
  13. template <typename DataType>
  14. class LinkQueue {
  15. public:
  16. LinkQueue() {
  17. front = new Node<DataType>;
  18. rear = front;
  19. front->next = nullptr;
  20. }
  21. ~LinkQueue() {
  22. clear();
  23. delete front;
  24. }
  25. void EnQueue(DataType x);
  26. DataType Dequeue();
  27. void Display(); // 显示队列中所有数据元素
  28. void GenerateRandomElements(int count); // 随机生成元素建立链队列
  29. DataType Front(); // 获取队头元素
  30. void clear(); // 清空队列
  31. private:
  32. Node<DataType>* front;
  33. Node<DataType>* rear;
  34. };
  35. // 链队列的实现——入队
  36. template <typename DataType>
  37. void LinkQueue<DataType>::EnQueue(DataType x) {
  38. Node<DataType>* s = new Node<DataType>;
  39. s->data = x;
  40. s->next = nullptr;
  41. rear->next = s;
  42. rear = s;
  43. }
  44. // 链队列的实现——出队
  45. template <typename DataType>
  46. DataType LinkQueue<DataType>::Dequeue() {
  47. if (rear == front) {
  48. throw "下溢";
  49. }
  50. Node<DataType>* p = front->next;
  51. DataType x = p->data;
  52. front->next = p->next;
  53. if (p == rear) {
  54. rear = front;
  55. }
  56. delete p;
  57. return x;
  58. }
  59. // 显示队列中所有数据元素
  60. template <typename DataType>
  61. void LinkQueue<DataType>::Display() {
  62. Node<DataType>* p = front->next;
  63. while (p != nullptr) {
  64. cout << p->data << " ";
  65. p = p->next;
  66. }
  67. cout << endl;
  68. }
  69. // 随机生成元素建立链队列
  70. template <typename DataType>
  71. void LinkQueue<DataType>::GenerateRandomElements(int count) {
  72. srand(time(nullptr));
  73. for (int i = 0; i < count; ++i) {
  74. DataType x = rand() % 100; // 生成0到99的随机数
  75. EnQueue(x);
  76. }
  77. }
  78. // 获取队头元素
  79. template <typename DataType>
  80. DataType LinkQueue<DataType>::Front() {
  81. if (rear == front) {
  82. throw "队列为空";
  83. }
  84. return front->next->data;
  85. }
  86. // 清空队列
  87. template <typename DataType>
  88. void LinkQueue<DataType>::clear() {
  89. Node<DataType>* temp;
  90. while (front->next!=nullptr) {
  91. temp = front->next;
  92. front->next = temp->next;
  93. delete temp;
  94. if (temp == rear)
  95. {
  96. rear = front;
  97. }
  98. }
  99. }
  100. int main() {
  101. LinkQueue<int> queue;
  102. // 随机生成10个100以内的整数建立链队列
  103. queue.GenerateRandomElements(10);
  104. cout << "链队列中所有数据元素:";
  105. queue.Display(); // 显示队列中所有数据元素
  106. int n;
  107. cout << "请输入出队元素个数 n (1<= n <=10):";
  108. cin>>n;
  109. // 出队操作
  110. for (int i = 0; i < n; ++i) {
  111. int dequeuedElement = queue.Dequeue();
  112. cout << "出队元素:" << dequeuedElement << endl;
  113. }
  114. // 显示此时的队头元素
  115. cout << "此时的队头元素:" << queue.Front() << endl;
  116. return 0;
  117. }

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

闽ICP备14008679号