当前位置:   article > 正文

数据结构-循环队列的基本操作与实现_循环队列的基本操作代码

循环队列的基本操作代码

第三章循环队列的基本操作

                        Status InitQueue(SqQueue &Q)——循环队列的初始化。
                        int QueueLength(SqQueue Q)——循环队列的长度。
                        Status EnQueue(SqQueue &Q,QElemType e)——循环队列的入队。
                        Status DeQueue(SqQueue &Q,QElemType &e)——循环队列的出队。
                        int GetHead(SqQueue Q,QElemType &e)——取循环队列的队头元素。

循环队列的基本操作的实现代码

  1. //----------循环队列的实现----------//
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #define OVERFLOW -1
  5. #define OK 1
  6. #define ERROR 0
  7. typedef int QElemType;
  8. typedef int Status;
  9. //---队列的顺序存储结构---//
  10. #define MAXSIZE 100//队列可能达到的最大长度
  11. typedef struct
  12. {
  13. QElemType *base;//存储空间的基地址
  14. int front;//头指针
  15. int rear;//尾指针
  16. }SqQueue;
  17. //---循环队列的初始化---//
  18. Status InitQueue(SqQueue &Q)
  19. {
  20. //构造一个空队列
  21. Q.base=new QElemType[MAXSIZE];//为队列分配一个最大容量为MAXSIZE的数组空间
  22. if(!Q.base) exit(OVERFLOW);//存储分配失败
  23. Q.front=Q.rear=0;//头指针和尾指针置为零,队列为空
  24. return OK;
  25. }
  26. //---循环队列的长度---//
  27. int QueueLength(SqQueue Q)
  28. {
  29. //返回Q的元素个数,即队列的长度
  30. return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
  31. }
  32. //---循环队列的入队---//
  33. Status EnQueue(SqQueue &Q,QElemType e)
  34. {
  35. //插入元素e为Q的新的队尾元素
  36. if((Q.rear+1)%MAXSIZE==Q.front)//尾指针在循环意义上加1后等于头指针,表明队满
  37. return ERROR;
  38. Q.base[Q.rear]=e;//新元素插入到队尾
  39. Q.rear=(Q.rear+1)%MAXSIZE;//队尾指针加1
  40. }
  41. //---循环队列的出队---//
  42. Status DeQueue(SqQueue &Q,QElemType &e)
  43. {
  44. //删除Q的队头元素,用e返回其值
  45. if(Q.front==Q.rear) return ERROR;//队空
  46. e=Q.base[Q.front];//保存队头元素
  47. Q.front=(Q.front+1)%MAXSIZE;//队头指针加1
  48. return OK;
  49. }
  50. //---取循环队列的队头元素---//
  51. int GetHead(SqQueue Q,QElemType &e)
  52. {
  53. //返回Q的队头元素,不修改队头指针
  54. if(Q.front!=Q.rear)//队列非空
  55. e=Q.base[Q.front];//返回队头元素的值,队头指针不变
  56. }
  57. void Menu()
  58. {
  59. printf("*************************************\n");
  60. printf("1.循环队列的初始化\n");
  61. printf("2.循环队列的长度\n");
  62. printf("3.循环队列的入队\n");
  63. printf("4.循环队列的出队\n");
  64. printf("5.取循环队列的队头元素\n");
  65. printf("6.退出程序\n");
  66. printf("*************************************\n");
  67. }
  68. int main()
  69. {
  70. int choice,e,e1,e2;
  71. SqQueue Q;
  72. while(1)
  73. {
  74. Menu();
  75. printf("请输入要执行的操作:");
  76. scanf("%d",&choice);
  77. switch(choice)
  78. {
  79. case 1:
  80. InitQueue(Q);
  81. printf("循环队列Q,初始化成功!\n");
  82. break;
  83. case 2:
  84. printf("此时循环队列S的长度为:%d\n",QueueLength(Q));
  85. break;
  86. case 3:
  87. printf("请输入要入队的数据元素:");
  88. scanf("%d",&e1);
  89. EnQueue(Q,e1);
  90. printf("数据元素%d入队成功!\n",e1);
  91. break;
  92. case 4:
  93. DeQueue(Q,e2);
  94. printf("数据元素%d出队成功!\n",e2);
  95. break;
  96. case 5:
  97. GetHead(Q,e);
  98. printf("此时循环队列的队头元素为:%d\n",e);
  99. break;
  100. case 6:
  101. printf("退出程序!");
  102. exit(0);
  103. default:
  104. printf("输入错误!");
  105. break;
  106. }
  107. }
  108. }

运行结果

  1. *************************************
  2. 1.循环队列的初始化
  3. 2.循环队列的长度
  4. 3.循环队列的入队
  5. 4.循环队列的出队
  6. 5.取循环队列的队头元素
  7. 6.退出程序
  8. *************************************
  9. 请输入要执行的操作:1
  10. 循环队列Q,初始化成功!
  11. *************************************
  12. 1.循环队列的初始化
  13. 2.循环队列的长度
  14. 3.循环队列的入队
  15. 4.循环队列的出队
  16. 5.取循环队列的队头元素
  17. 6.退出程序
  18. *************************************
  19. 请输入要执行的操作:3
  20. 请输入要入队的数据元素:1
  21. 数据元素1入队成功!
  22. *************************************
  23. 1.循环队列的初始化
  24. 2.循环队列的长度
  25. 3.循环队列的入队
  26. 4.循环队列的出队
  27. 5.取循环队列的队头元素
  28. 6.退出程序
  29. *************************************
  30. 请输入要执行的操作:3
  31. 请输入要入队的数据元素:2
  32. 数据元素2入队成功!
  33. *************************************
  34. 1.循环队列的初始化
  35. 2.循环队列的长度
  36. 3.循环队列的入队
  37. 4.循环队列的出队
  38. 5.取循环队列的队头元素
  39. 6.退出程序
  40. *************************************
  41. 请输入要执行的操作:3
  42. 请输入要入队的数据元素:3
  43. 数据元素3入队成功!
  44. *************************************
  45. 1.循环队列的初始化
  46. 2.循环队列的长度
  47. 3.循环队列的入队
  48. 4.循环队列的出队
  49. 5.取循环队列的队头元素
  50. 6.退出程序
  51. *************************************
  52. 请输入要执行的操作:3
  53. 请输入要入队的数据元素:4
  54. 数据元素4入队成功!
  55. *************************************
  56. 1.循环队列的初始化
  57. 2.循环队列的长度
  58. 3.循环队列的入队
  59. 4.循环队列的出队
  60. 5.取循环队列的队头元素
  61. 6.退出程序
  62. *************************************
  63. 请输入要执行的操作:3
  64. 请输入要入队的数据元素:5
  65. 数据元素5入队成功!
  66. *************************************
  67. 1.循环队列的初始化
  68. 2.循环队列的长度
  69. 3.循环队列的入队
  70. 4.循环队列的出队
  71. 5.取循环队列的队头元素
  72. 6.退出程序
  73. *************************************
  74. 请输入要执行的操作:3
  75. 请输入要入队的数据元素:6
  76. 数据元素6入队成功!
  77. *************************************
  78. 1.循环队列的初始化
  79. 2.循环队列的长度
  80. 3.循环队列的入队
  81. 4.循环队列的出队
  82. 5.取循环队列的队头元素
  83. 6.退出程序
  84. *************************************
  85. 请输入要执行的操作:2
  86. 此时循环队列S的长度为:6
  87. *************************************
  88. 1.循环队列的初始化
  89. 2.循环队列的长度
  90. 3.循环队列的入队
  91. 4.循环队列的出队
  92. 5.取循环队列的队头元素
  93. 6.退出程序
  94. *************************************
  95. 请输入要执行的操作:5
  96. 此时循环队列的队头元素为:1
  97. *************************************
  98. 1.循环队列的初始化
  99. 2.循环队列的长度
  100. 3.循环队列的入队
  101. 4.循环队列的出队
  102. 5.取循环队列的队头元素
  103. 6.退出程序
  104. *************************************
  105. 请输入要执行的操作:4
  106. 数据元素1出队成功!
  107. *************************************
  108. 1.循环队列的初始化
  109. 2.循环队列的长度
  110. 3.循环队列的入队
  111. 4.循环队列的出队
  112. 5.取循环队列的队头元素
  113. 6.退出程序
  114. *************************************
  115. 请输入要执行的操作:6
  116. 退出程序!
  117. --------------------------------
  118. Process exited after 33.71 seconds with return value 0
  119. 请按任意键继续. . .

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号