定义
栈:后进先出(LIFO-last in first out):最后插入的元素最先出来。
队列:先进先出(FIFO-first in first out):最先插入的元素最先出来。
图示
本文通过一些简单的算法题来带你们更好的理解栈(Stack)和队列(Queue)。
三道算法题加深理解
第一题
题目:获取一个栈的min
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
1 | import java.util.Stack; |
第二题
题目:用栈实现队列
思路:构建两个栈(Push栈和Pop栈);将Push栈中的数据导入Pop栈中然后返回给用户,就实现了队列。需要注意两个条件:①Pop栈为空时才能往里面倒数据。②向Pop栈倒数据必须全部倒完。
1 | import java.util.Stack; |
第三题
题目:用队列实现栈
思路:构建两个队列:queue队列和help队列;压入数据时数据都进queue队列,假设队列中进入了1、2、3、4、5,返回数据时,把1、2、3、4放入help队列,然后拿出queue的5返回。接着把queue队列和help队列的引用交换。即下次返回数据还是从queue队列拿1、2、3、放入help队列,然后queue拿出4返回,再交换各自的引用,一直重复。
1 | import java.util.LinkedList; |
总结
就是把栈跟队列的特点介绍了一下,然后用三道经典的题目来加深对栈和队列的理解,然后附上我自己写的代码,都是经过测试后才附上的。有什么问题,欢迎与我交流和讨论,我的目的就是大家一起学习一起进步。