数组实现队列

举报
兔老大 发表于 2021/04/24 22:52:24 2021/04/24
【摘要】 数组实现队列结构: 相对栈结构要难搞一些,队列的先进先出的,需要一个数组和三个变量,size记录已经进来了多少个元素,不需要其它萌新看不懂的知识。 触底反弹,头尾追逐的感觉。 循环使用数组。 具体解释一下触底反弹:当我们的队头已经到了数组的底,我们就把对头设为数组的第一个元素,对于队尾也是一样。实现了对数组的循环使用。 #include<stdio.h>...

数组实现队列结构:

相对栈结构要难搞一些,队列的先进先出的,需要一个数组和三个变量,size记录已经进来了多少个元素,不需要其它萌新看不懂的知识。

触底反弹,头尾追逐的感觉。

循环使用数组。

具体解释一下触底反弹:当我们的队头已经到了数组的底,我们就把对头设为数组的第一个元素,对于队尾也是一样。实现了对数组的循环使用。


  
  1. #include<stdio.h>
  2. #include<stdbool.h>
  3. #define maxsize 10
  4. typedef int datatype;
  5. typedef struct queue
  6. {
  7. datatype arr[maxsize];
  8. int a,b,size;//头、尾、数量
  9. }queue;
  10. queue s;
  11. void init()//初始化
  12. {
  13. s.a=0;
  14. s.b=0;
  15. s.size=0;
  16. }
  17. int Empty()//判空
  18. {
  19. if(s.size==0)return 1;
  20. return 0;
  21. }
  22. int full()//判满
  23. {
  24. if(s.size==maxsize)return 1;
  25. return 0;
  26. }
  27. datatype peek()//查看队头
  28. {
  29. if(s.size!=0)return s.arr[s.a];
  30. printf("queue is null\n");
  31. }
  32. datatype poll()//弹出队头
  33. {
  34. int temp=s.a;
  35. if(s.size!=0)
  36. {
  37. s.size--;
  38. s.a=s.a==maxsize-1? 0 :s.a+1;//触底反弹
  39. return s.arr[temp];
  40. }
  41. printf("queue is null\n");
  42. }
  43. int push(datatype obj)//放入队尾
  44. {
  45. if(s.size!=maxsize)
  46. {
  47. s.size++;
  48. s.arr[s.b]=obj;
  49. s.b=s.b==maxsize-1? 0 : s.b+1;//触底反弹
  50. return 1;
  51. }
  52. printf("queue is full\n");
  53. return 0;
  54. }
  55. //测试
  56. int main()
  57. {
  58. int i;
  59. init();
  60. if(Empty())printf("null\n");
  61. for(i=0;i<20;i++)push(i);
  62. while(!Empty())
  63. {
  64. printf("%d\n",poll());
  65. }
  66. printf("%d",poll());
  67. }

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/82736862

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。