当前位置:   article > 正文

C++实现队列的顺序存储与链式存储_队列的顺序存储结构源代码

队列的顺序存储结构源代码

        队列是一种特殊的数据存储结构,与栈不同的是(C++实现栈的顺序存储与链式存储),其数据存储与访问顺序为先进先出,形式如下:

下面附上队列顺序存储与链式存储的实现代码:

1、顺序存储

  1. #include <iostream>
  2. using namespace std;
  3. const int max_size=1024;
  4. //定义队列
  5. class seqqueue
  6. {
  7. public:
  8. void* data[max_size];
  9. int size;
  10. };
  11. //初始化队列
  12. seqqueue* init_seqqueue()
  13. {
  14. seqqueue* queue=new seqqueue;
  15. for (int i = 0; i < max_size; i++)
  16. {
  17. queue->data[i]=NULL;
  18. }
  19. queue->size=0;
  20. return queue;
  21. }
  22. //入队
  23. void push_seqqueue(seqqueue* queue,void* data)
  24. {
  25. queue->data[queue->size]=data;
  26. queue->size++;
  27. }
  28. //返回队头元素
  29. void* front_seqqueue(seqqueue* queue)
  30. {
  31. return queue->data[0];
  32. }
  33. //出队
  34. void pop_seqqueue(seqqueue* queue)
  35. {
  36. for (int i = 0; i < queue->size; i++)
  37. {
  38. queue->data[i]=queue->data[i+1];
  39. }
  40. queue->size--;
  41. }
  42. int main()
  43. {
  44. //创建队列
  45. seqqueue* queue=init_seqqueue();
  46. //创建数据
  47. int arr[9];
  48. for (int i = 0; i < 9; i++)
  49. {
  50. arr[i]=i+1;
  51. }
  52. //数据入队
  53. for (int i = 0; i < 9; i++)
  54. {
  55. cout<<"第"<<i+1<<"个元素入队:"<<arr[i]<<endl;
  56. push_seqqueue(queue,&arr[i]);
  57. }
  58. cout<<endl;
  59. //数据出队
  60. for (int i = 0; i < 9; i++)
  61. {
  62. cout<<"第"<<i+1<<"个元素出队:"<<*((int*)front_seqqueue(queue))<<endl;
  63. pop_seqqueue(queue);
  64. }
  65. system("pause");
  66. return 0;
  67. }

 结果:

2、链式存储

  1. #include <iostream>
  2. using namespace std;
  3. //创建节点
  4. class node
  5. {
  6. public:
  7. node* next;
  8. };
  9. //创建队列
  10. class linkqueue
  11. {
  12. public:
  13. node head;
  14. int size;
  15. };
  16. //队列初始化
  17. linkqueue* init_linkqueue()
  18. {
  19. linkqueue* queue=new linkqueue;
  20. queue->head.next=NULL;
  21. queue->size=0;
  22. return queue;
  23. }
  24. //入队
  25. void push_linkqueue(linkqueue* queue,node* data)
  26. {
  27. data->next=queue->head.next;
  28. queue->head.next=data;
  29. queue->size++;
  30. }
  31. //出队
  32. void pop_linkqueuq(linkqueue* queue)
  33. {
  34. node* pcurrent=queue->head.next;
  35. for (int i = 0; i < queue->size-1; i++)
  36. {
  37. pcurrent=pcurrent->next;
  38. }
  39. pcurrent=NULL;
  40. queue->size--;
  41. }
  42. //返回队顶元素
  43. node* top_linkqueuq(linkqueue* queue)
  44. {
  45. node* pcurrent=queue->head.next;
  46. for (int i = 0; i < queue->size-1; i++)
  47. {
  48. pcurrent=pcurrent->next;
  49. }
  50. return pcurrent;
  51. }
  52. class my_data
  53. {
  54. public:
  55. node* p;
  56. char data;
  57. };
  58. int main()
  59. {
  60. //创建队
  61. linkqueue* queue=init_linkqueue();
  62. //创建数据
  63. string str="ABCDEFGHI";
  64. my_data data[9];
  65. for (int i = 0; i < str.size(); i++)
  66. {
  67. data[i].p=NULL;
  68. data[i].data=str[i];
  69. }
  70. //入队
  71. for (int i = 0; i < str.size(); i++)
  72. {
  73. cout<<"第"<<i+1<<"个入队元素为:"<<str[i]<<endl;
  74. push_linkqueue(queue,(node*)&data[i]);
  75. }
  76. cout<<endl;
  77. //出队
  78. for (int i = 0; i < str.size(); i++)
  79. {
  80. cout<<"第"<<i+1<<"个出队元素为:"<<((my_data*)top_linkqueuq(queue))->data<<endl;
  81. pop_linkqueuq(queue);
  82. }
  83. system("pause");
  84. return 0;
  85. }

结果:

 

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

闽ICP备14008679号