队列的基本操作

£神魔★判官ぃ 2021-06-24 15:56 501阅读 0赞
  1. #include "stdafx.h"
  2. #include<iostream>
  3. using namespace std;
  4. typedef struct node
  5. {
  6. char data;
  7. struct node *link;//指向后缀结点的指针
  8. };
  9. typedef struct Queue
  10. {
  11. node *first,*rear;//定义队列的头和尾指针
  12. };
  13. Queue * InsertQueue(Queue *Q,char value)
  14. {
  15. node*newNode=(node*)malloc(sizeof(node));
  16. newNode->data=value;
  17. newNode->link=NULL;
  18. if(Q->first==NULL)
  19. Q->first=Q->rear=newNode;
  20. else
  21. {
  22. Q->rear->link=newNode;
  23. Q->rear=newNode;
  24. }
  25. return Q;
  26. }
  27. Queue * DeleteQueue(Queue *Q)
  28. {
  29. node*ptemp;
  30. if(Q->first==NULL)
  31. cout<<"队列已空!"<<endl;
  32. else
  33. {
  34. ptemp=Q->first;
  35. if(Q->first==Q->rear)
  36. {
  37. Q->first=NULL;
  38. Q->rear=NULL;
  39. }
  40. else
  41. Q->first=Q->first->link;
  42. free(ptemp);
  43. }
  44. return Q;
  45. }
  46. Queue * InitQueue()
  47. {
  48. char ch;
  49. node*newNode;
  50. Queue *QL=(Queue*)malloc(sizeof(Queue));//初始化队列
  51. QL->first=(node*)malloc(sizeof(node));//队列中的第一个元素,头尾指针均指向该结点
  52. QL->first->link=NULL;
  53. QL->rear=QL->first;
  54. cout<<"请输入字符串并回车,初始化队列如下:"<<endl;
  55. ch=getchar();
  56. while(ch!='\n')
  57. {
  58. newNode=(node*)malloc(sizeof(node));
  59. newNode->data=ch;
  60. newNode->link=NULL;
  61. if(QL->first==NULL)
  62. QL->first=QL->rear=newNode;
  63. else
  64. {
  65. QL->rear->link=newNode;
  66. QL->rear=newNode;
  67. }
  68. ch=getchar();
  69. }
  70. return QL;
  71. }
  72. int length(Queue *Q)
  73. {
  74. int count=0;
  75. node*ptemp=Q->first;
  76. while(ptemp->link!=NULL)
  77. {
  78. count++;
  79. ptemp=ptemp->link;
  80. }
  81. return count;
  82. }
  83. void DisplayQueue(Queue *QL)
  84. {
  85. node*ptemp;
  86. ptemp=QL->first->link;
  87. if(ptemp==NULL)
  88. cout<<"队列已空!"<<endl;
  89. while(ptemp!=NULL)
  90. {
  91. cout<<ptemp->data;
  92. ptemp=ptemp->link;
  93. if(ptemp!=NULL)
  94. cout<<"——> ";
  95. }
  96. cout<<endl;
  97. }
  98. int _tmain(int argc, _TCHAR* argv[])
  99. {
  100. Queue *Q=InitQueue();
  101. DisplayQueue(Q);
  102. cout<<"After InsertQueue():"<<endl;
  103. InsertQueue(Q,'c');
  104. cout<<"在队列尾部插入字符c后的元素有:"<<endl;
  105. DisplayQueue(Q);
  106. cout<<"After DeleteQueue():"<<endl;
  107. DeleteQueue(Q);
  108. cout<<"删除队列头部元素后,队列中的元素有:"<<endl;
  109. DisplayQueue(Q);
  110. cout<<"队列中元素的数目是:"<<length(Q)<<endl;
  111. system("pause");
  112. return 0;
  113. }

发表评论

表情:
评论列表 (有 0 条评论,501人围观)

还没有评论,来说两句吧...

相关阅读

    相关 基本操作

    目录 一、什么是队列? 二、用数组实现队列 代码实现: 数组实现的缺点: 三、用链表实现队列 代码实现: -------------------- 一、什么

    相关 循环基本操作

    循环队列设置不同队空与队满条件的解决方案 为了解决顺序队列假溢出的问题,我们采用的方案是少用一个元素空间,此时的指针状态是队尾指针加1才与队头指针重合,于是此时队满的判定