漫画趣解——队列

写在前面:

上一篇文章中我们聊到了栈——漫画趣解什么是栈?
相信很多小伙伴都理解了栈;
那么这次,同样采用漫画形式,给大家聊一聊什么是队列;

思维导图:

什么是队列?

队列是一种受限的线性表;
队列只允许在一端进行插入操作,另一端进行删除操作;

队列的特性?



在这里插入图片描述

允许插入的一端叫队尾,允许删除的的一端叫队头
先进先出,后进后出

队列的存储结构:


代码实现:

文中完整源码获取请关注公众号《程序员的时光》;
后台回复——数据结构源码,可以获得常见数据结构代码;

队列的顺序存储:

方法类:

//入队
    public void Push_SeqQueue(SeqQueue queue, Object data){ if(queue==null){ return; } if(data==null){ return; } //如果队列容量小于或等于数组容量 if(queue.size==Max_Size){ return; } //元素入队 queue.data[queue.size]=data; queue.size++; } //返回队头元素 public Object Front_SeqQueue(SeqQueue queue){ if(queue==null){ return null; } if(queue.size==0){ return null; } //队头元素下标为0 return queue.data[0]; } //出队 public void Pop_SeqQueue(SeqQueue queue){ if(queue==null){ return; } if(queue.size==0){ return; } //出队操作需要移动全部元素 for (int i = 0; i < queue.size-1; i++) { queue.data[i]=queue.data[i+1]; } queue.size--; } 

主函数:

public static void main(String[] args) { SeqQueueDao seqQueueDao=new SeqQueueDao(); //初始化队列 SeqQueue queue=seqQueueDao.Init_SeqQueue(); //入队 seqQueueDao.Push_SeqQueue(queue,"A"); seqQueueDao.Push_SeqQueue(queue,"B"); seqQueueDao.Push_SeqQueue(queue,"C"); seqQueueDao.Push_SeqQueue(queue,"D"); seqQueueDao.Push_SeqQueue(queue,"E"); //出队 while (queue.size>0){ //查找队头元素 Object o=seqQueueDao.Front_SeqQueue(queue); System.out.println(o); //出队 seqQueueDao.Pop_SeqQueue(queue); } } 

运行结果:

队列的链式存储:

方法类:

//入队列
    public void Push_LinkQueue(LinkQueue queue,Object data){ if (queue == null){ return; } if (data == null){ return; } //创建新插入的结点,也就是队列顶指针后面的第一个元素,因为只能在队列顶进行元素插入或删除 LinkQueueNode newNode=new LinkQueueNode(data,null); //进入插入操作 newNode.next=queue.head.next; //队列顶指针的next等于新插入结点 queue.head.next=newNode; //队列容量加1 queue.size++; } //出队列 public void Pop_LinkQueue(LinkQueue queue){ if (queue == null){ return; } if (queue.size == 0){ return; } //pPrev指头结点,pCurrent指头结点后面的第一个元素,直到pCurrent为空为止 LinkQueueNode pPrev=queue.head; LinkQueueNode pCurrent=pPrev.next; while (pCurrent.next!=null){ pPrev=pCurrent; pCurrent=pPrev.next; } pPrev.next=null; //队列容量减1 queue.size--; } //返回队头元素 public Object Front_LinkQueue(LinkQueue queue){ if (queue == null){ return null; } if (queue.size == 0){ return null; } //队头元素也就是前面插入的元素,采用循环一直找到队头元素 LinkQueueNode pCurrent=queue.head; while (pCurrent.next!=null){ pCurrent=pCurrent.next; } return pCurrent.data; } 

主函数:

public static void main(String[] args) { LinkQueueDao linkQueueDao=new LinkQueueDao(); //初始化队列 LinkQueue queue=linkQueueDao.Init_LinkQueue(); //入队列 linkQueueDao.Push_LinkQueue(queue,"A"); linkQueueDao.Push_LinkQueue(queue,"B"); linkQueueDao.Push_LinkQueue(queue,"C"); linkQueueDao.Push_LinkQueue(queue,"D"); linkQueueDao.Push_LinkQueue(queue,"E"); //输出队列元素 while(!linkQueueDao.IsEmpty_LinkQueue(queue)){ //查找队头元素 Object o=linkQueueDao.Front_LinkQueue(queue); System.out.println(o); //出队列 linkQueueDao.Pop_LinkQueue(queue); } } 

运行结果:
在这里插入图片描述


好了,今天就先分享到这里了,下期给大家带来的讲解!
更多采用漫画趣解编程知识的文章,欢迎关注我的微信公众号,一起学习进步!
源码获取,后台回复——数据结构源码


                原创实属不易,求个关注吧~

猜你喜欢

转载自www.cnblogs.com/huke123/p/12409768.html