队列是一种线性存储结构,但是只能从队列前端front添加或入队,从队列尾端rear移除或出队数据。队列具有先进先出FIFO的特点。
队列是一种抽象的数据结构,可以用数组或者链表来实现队列。例如,[1,2,3,4,5,6,7,8,9]
使用队列来存储的示意图。
当某共享资源使用(或者处理)数量大于限制数量的时侯,这些请求(或者任务)需要先等待,待资源可用时按照先到先得原则处理,这种情况,这些请求(或者任务)经常会使用队列来保存。
另外,在广度优先搜索算法中我们也经常会用到队列。
常见的队列有以下这些
查看二叉堆课程
注释设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
示例:
输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]
提示:
这道题最容易想到的就是先排序,然后返回最小的k个数。但是实际面试中,面试官可能还会问,如果数据特别大,大到无法直接对整个数组进行排序,该怎么办?
我们可以将数组中前k个数加入到优先队列中,然后遍历数组中剩下的元素,如果元素小于队列中最大的数,则将最大的数出队,然后将元素入队,如果大于则跳过,直到遍历完成。
用栈来实现队列先进先出队列。栈的特点先进后出,怎么才能实现先进先出?