相关内容
最近更新
热门资讯
数据结构中队列的概念与实现方式
时间:2020-12-27 来源:未知 作者:广州达内培训
我们在上文中给大家简单介绍了栈的概念与应用等技术知识,而今天我们就一起来了解一下数据结构中队列的概念与实现方式,下面就开始今天的主要内容吧。
一、概念
队列:先进者先出。与栈一样,也是一种受限的线性表,同样有两个基本操作:入队和出队。
二、队列实现
队列有两种实现方式:顺序队列和链式队列。
顺序队列
用数组实现的队列叫作顺序队列。
需要两个指针:head指针和tail指针,分别指向队头和队尾。
随着入队和出队操作,head和tail会移到右边,即便还有空闲空间,也不通用再入队了。这时候要用数据搬移。在入队时,把数据数组前端移动。
链式队列
用链表实现的队列叫作链式队列。
需要两个指针:head指针和tail指针,分别指向链表起始结点和结尾结点。
循环队列
上面的数组实现,在tail==n时,会有数据搬移操作,这样入队操作性能就会受到影响。
循环队列是一种特殊的队列,长得像个环,原来数组是有头有尾的,是一条直线,现在把尾相连,形成一个环
三、阻塞队列和并发队列
阻塞队列就是在队列基础上增加了阻塞操作。简单来说,就是在队列为空的时候,从队头取数据会被阻塞。
可以使用阻塞队列来实现“生产者-消费者模型”。
通过协调“生产者”和“消费者”的个数,来提高数据的处理效率。
并发队列就是要求线程安全的队列。通过在enqueue()和dequeue()方法上加锁。
四、线程池实现
有两种处理策略。
1、非阻塞的处理方式,直接拒绝任务请求。
2、阻塞的处理方式,将请求排除,等有空闲线程时,取出请求继续处理。
而队列有两种实现方式:基于数组和基于链表。
基于链表,可以实现一个支持无限排除的无界队列,但可能会导致响应时间过长,对于响应时间比较敏感的系统,不适合采用这种方式。
基于数组实现的有界队列,队列的大小有限,超过队列大小时会拒绝请求,但设置一个合理的队列大小是非常讲究的,既不能太大,也不能太小而无法充分利用资源,发挥大性能。
对于大部分资源有限的场景,当没有空闲资源时,基本上都可以通过“队列”这种数据结构来实现请求排除。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。