《图解数据结构算法》栈与队列总结笔记

总记

栈和队列是两种有序的数据结构。当元素进入栈或队列时,栈中的元素遵循先进后出的规则,而队列中的元素遵循先进先出的规则,它们在处理有序的数据信息中具有重要用处。

本文通过分析LeetCode平台上《图解数据结构算法》一文中的链表专题来介绍常见的栈与队列解题技巧。

栈与队列的等效性

可以用两个栈来实现一个队列,使用两个栈可以非常方便地反转栈中的元素
用栈等效队列

同样地,可以实现一个双端队列来模拟栈。

方法总览

寻找最值

在栈或者队列中,数据具有有序性,有些元素一定在另外一些元素的后方或前方,所以在维护结构的最值时,有些值无需考虑。

维护栈的最值

维护最大值:在数据栈之外额外维护一个最值栈,实行非严格降序;

维护最小值:在数据栈之外额外维护一个最值栈,实行非严格升序;

维护队列的最值

参考题目:望远镜中最高的海拔

维护最大值:在数据队列之外额外维护一个最值队列,实行非严格降序,当队列中出现比最大元素还大的元素时,清空原队列;

参考题目:设计自助结算系统

维护最大值:在数据队列之外额外维护一个最值队列,使用双端队列构建最值队列,每次将比队尾元素大的元素弹出并尝试插入最值队列中,以维护最值队列。

注:数据流中的中位数涉及堆(优先队列)的知识,其本质为树结构,在此不叙述。

总结

栈和队列作为有序数据结构,在维护按照一定顺序排列的数据中有相当的作用。