当前位置:   article > 正文

(C语言)链式队列的实现_实现一个链接存储的队列

实现一个链接存储的队列
  1. //链式队列实现
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. typedef struct Queue_LinkList
  5. {
  6. int data;
  7. struct Queue_LinkList *next;
  8. }Node,*pNode;
  9. typedef struct Queue
  10. {
  11. pNode front,rear;
  12. }Queue,*pQueue;
  13. void Initqueue(pQueue); //初始化
  14. int Isempty(pQueue); //判断队空
  15. void Enqueue(pQueue,int*); //入队
  16. int Dequeue(pQueue,int*); //出队
  17. void Traverse(pQueue); //遍历
  18. int main()
  19. {
  20. int val;
  21. Queue s1;
  22. Initqueue(&s1);
  23. if(Isempty(&s1)) //判断队空
  24. printf("队列为空!\n");
  25. else printf("队列不空!\n");
  26. printf("请输入入队元素:"); //入队1
  27. scanf("%d",&val);
  28. Enqueue(&s1,&val);
  29. printf("请输入入队元素:"); //入队2
  30. scanf("%d",&val);
  31. Enqueue(&s1,&val);
  32. printf("请输入入队元素:"); //入队3
  33. scanf("%d",&val);
  34. Enqueue(&s1,&val);
  35. Traverse(&s1); //遍历
  36. printf("\n");
  37. if(Dequeue(&s1,&val)) //出队
  38. printf("删除成功!删除的元素为:%d\n",val);
  39. else printf("队空!出队失败!\n");
  40. Traverse(&s1); //遍历
  41. return 0;
  42. }
  43. //初始化
  44. void Initqueue(pQueue ps1)
  45. {
  46. ps1->front=ps1->rear=(pNode)malloc(sizeof(Node));
  47. if(ps1->front==NULL)
  48. exit(-1);
  49. else
  50. {
  51. ps1->front->next=NULL;
  52. return;
  53. }
  54. }
  55. //判断队空,空返回1,不空返回0
  56. int Isempty(pQueue ps1)
  57. {
  58. if(ps1->front==ps1->rear)
  59. return 1;
  60. else return 0;
  61. }
  62. //入队,插入队尾,入队元素用val传递
  63. void Enqueue(pQueue ps1,int *pVal)
  64. {
  65. pNode p;
  66. p=(pNode)malloc(sizeof(Node));
  67. p->data=*pVal;
  68. p->next=NULL;
  69. ps1->rear->next=p;
  70. ps1->rear=p;
  71. return;
  72. }
  73. //出队,出队元素用val传递,成功返回1,失败返回0
  74. int Dequeue(pQueue ps1,int *pVal)
  75. {
  76. pNode p;
  77. if(Isempty(ps1))
  78. return 0;
  79. else
  80. {
  81. p=ps1->front->next;
  82. *pVal=p->data;
  83. ps1->front->next=p->next;
  84. if(ps1->rear==p)
  85. ps1->rear=ps1->front;
  86. free(p);
  87. return 1;
  88. }
  89. }
  90. //遍历,从队头遍历到队尾
  91. void Traverse(pQueue ps1)
  92. {
  93. pNode p;
  94. if(Isempty(ps1))
  95. printf("所遍历队为空!\n");
  96. else
  97. {
  98. printf("遍历结果:");
  99. for(p=ps1->front->next;p!=ps1->rear;p=p->next) //循环条件为p!=ps1->rear,结束后尾结点没有输出
  100. printf("%d ",p->data);
  101. printf("%d ",p->data); //输出尾结点的数据
  102. }
  103. }

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

闽ICP备14008679号