数组实现队列

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

数组实现队列结构:

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

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

循环使用数组。

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


      #include<stdio.h>
      #include<stdbool.h>
      #define maxsize 10
      typedef int datatype;
      typedef struct queue
      {
       datatype arr[maxsize];
      int a,b,size;//头、尾、数量
      }queue;
      queue s;
      void init()//初始化
      {
       s.a=0;
       s.b=0;
       s.size=0;
      }
      int Empty()//判空
      {
      if(s.size==0)return 1;
      return 0;
      }
      int full()//判满
      {
      if(s.size==maxsize)return 1;
      return 0;
      }
      datatype peek()//查看队头
      {
      if(s.size!=0)return s.arr[s.a];
      printf("queue is null\n");
      }
      datatype poll()//弹出队头
      {
      int temp=s.a;
      if(s.size!=0)
       {
       s.size--;
       s.a=s.a==maxsize-1? 0 :s.a+1;//触底反弹
      return s.arr[temp];
       }
      printf("queue is null\n");
      }
      int push(datatype obj)//放入队尾
      {
      if(s.size!=maxsize)
       {
       s.size++;
       s.arr[s.b]=obj;
       s.b=s.b==maxsize-1? 0 : s.b+1;//触底反弹
      return 1;
       }
      printf("queue is full\n");
      return 0;
      }
      //测试
      int main()
      {
      int i;
       init();
      if(Empty())printf("null\n");
      for(i=0;i<20;i++)push(i);
      while(!Empty())
       {
      printf("%d\n",poll());
       }
      printf("%d",poll());
      }
  
 

 

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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