前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试题-数组、链表实现队列

面试题-数组、链表实现队列

作者头像
别明天就今天吧
发布2020-10-23 11:38:51
4700
发布2020-10-23 11:38:51
举报

先来看看什么是队列,摘自百科:

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

队列和栈一样同样是一种特殊的数据结构,就像去医院排队体检一样,排在队伍头部(head)的人进行体检,新来的人站到队伍的尾部(tail)。包含入队(enqueue)和出队(dequeue)两个操作,特点是先进先出,后进后出。

数组实现队列(顺序队列) :

首先1、2入队,然后进行了两次出队操作,正常出队,当第三次出队时报出队列为空的提示,功能正常。

再看下这幅图,两次入队、两次出队,按理说队列此时为空,当再次入队操作时,提示队列满了,其实这个时候队列中已经没有了元素,只不过head、tail指针相等并且都指向了capacity的元素索引,无法新元素入队,那么该如何解决呢?

改造一下入队方法,在入队时如果发现tail=capatiy、head=0此时队列满了,如果head!=0则说明队列还有空余的空间,此时进行数据迁移,重置head、tail的位置。

链表实现队列(链式队列):

队列的实际应用:

1.阻塞队列,队列为空时在对头取数据会被阻塞,直到队列中有数据了才会返回,如果队列已满,那么插入操作就被阻塞,直到队列有空闲位置后再插入数据。

2.线程池的队列,请求线程池时,如果核心线程都已经被使用,那么请求存入队列中。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 别明天就今天吧 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档