当前位置:   article > 正文

链式队列的入队与出队操作(C语言)_链队列的入队和出队

链队列的入队和出队

1.链队列入队

链式队列的实现思想同顺序队列类似,只需创建两个指针分别指向链表中队列的队头元素和队尾元素。

 

图所示为链式队列的初始状态,此时队列中没有存储任何数据元素,因此 top 和 rear 指针都同时指向头节点。
链队队列中,当有新的数据元素入队,只需进行以下 3 步操作:

  1. 将该数据元素用节点包裹,例如新节点名称为 elem;
  2. 与 rear 指针指向的节点建立逻辑关系,即执行 rear->next=elem;
  3. 最后移动 rear 指针指向该新节点,即 rear=elem;

由此,新节点就入队成功了。
例如,在上图的基础上,我们依次将 {1,2,3} 依次入队,各个数据元素入队的过程如下图所示:

 2.链队列出队

 当链式队列中,有数据元素需要出队时,按照 “先进先出” 的原则,只需将存储该数据的节点以及它之前入队的元素节点按照原则依次出队即可。这里,我们先学习如何将队头元素出队。
  链式队列中队头元素出队,需要做以下 3 步操作:

  1. 通过 top 指针直接找到队头节点,创建一个新指针 p 指向此即将出队的节点;
  2. 将 p 节点(即要出队的队头节点)从链表中摘除;
  3. 释放节点 p,回收其所占的内存空间;

  例如,在上图的基础上,我们将元素 1 和 2 出队,则操作过程如下图所示:

 总体代码:

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. using namespace std;
  5. typedef struct LinkNode{
  6. int data;
  7. struct LinkNode *next;
  8. }LinkNode;
  9. typedef struct LinkQueue{
  10. LinkNode *fronts,*rear;
  11. }LinkQueue;
  12. //初始化
  13. int Init_LinkQueue(LinkQueue &Q)
  14. {
  15. Q.fronts=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
  16. Q.fronts->next==NULL;
  17. }
  18. //入队
  19. int EnQueue(LinkQueue &Q,int x)
  20. {
  21. LinkNode *s;
  22. s=(LinkNode*)malloc(sizeof(LinkNode));
  23. s->data=x;
  24. s->next=NULL;
  25. Q.rear->next=s;
  26. Q.rear=s;
  27. }
  28. //出队
  29. int DeQueue(LinkQueue &Q,int &x)
  30. {
  31. if(Q.fronts==Q.rear)
  32. return 0;
  33. LinkNode *q=Q.fronts->next;
  34. x=q->data;
  35. Q.fronts->next=q->next;
  36. if(Q.rear==q)
  37. {
  38. Q.rear=Q.fronts; //若原队列中仅有一个节点,删除后变空
  39. }
  40. free(q);
  41. return 1;
  42. }
  43. int show_Queue(LinkQueue Q)
  44. {
  45. Q.fronts=Q.fronts->next;
  46. while(Q.fronts!=NULL)
  47. {
  48. printf("%d ",Q.fronts->data);
  49. Q.fronts=Q.fronts->next;
  50. }
  51. }
  52. int main()
  53. {
  54. LinkQueue Q;
  55. Init_LinkQueue(Q);
  56. EnQueue(Q,1);
  57. EnQueue(Q,2);
  58. EnQueue(Q,3);
  59. show_Queue(Q);
  60. int a;
  61. DeQueue(Q,a);
  62. printf("%d\n",a);
  63. show_Queue(Q);
  64. cout << "Hello world!" << endl;
  65. return 0;
  66. }

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

闽ICP备14008679号