在咱们的数据结构的学习中,栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,须要读数据的时候从栈顶开始弹出数据。栈是只能在某一端插入和删除的特殊线性表,插入通常称为进栈,删除则称为退栈。java
咱们看看java.util.Stack的设计吧。数据结构
咱们来解读一下官方文档给的说明吧,Stack类表示对象的后进先出(LIFO)堆栈。它使用五个操做扩展了Vector类,这些操做容许将向量视为堆栈。提供了常见的推送和弹出操做,以及查看堆栈顶部项目的方法,测试堆栈是否为空的方法,以及搜索堆栈中的值并发现其从顶部的距离。并发
建立堆栈时,它不包含任何值。函数
Deque接口及其实现提供了更完整和一致的LIFO堆栈操做集,应优先使用此类。例如: 学习
Deque<Integer> stack = new ArrayDeque<Integer>();测试
能够看到Stack的构造方法就一个,里面什么也没有,就是super()先会调用Vector的默认构造方法。设计
Stack有如下的几个方法3d
empty()方法就是返回stack是否为空,判断的是size()==0对象
peek()方法获取此堆栈顶部的对象,而不将其从堆栈中删除。blog
pop()方法移除此堆栈顶部的对象,并将该对象做为此函数的值返回。其中removeelementAt是继承的Vector的方法,是加了synchronized
push(E item)将项目推到此堆栈的顶部。其实就是Vector的addElement方法
search(Object o)返回对象在此堆栈上的从1开始的位置
而后咱们看看用stack来解决汉诺塔问题娱乐如下吧!
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(以下图)。游戏的目标:把A杆上的金盘所有移到C杆上,并仍保持原有顺序叠好。操做规则:每次只能移动一个盘子,而且在移动过程当中三根杆上都始终保持大盘在下,小盘在上,操做过程当中盘子能够置于A、B、C任一杆上。
下面的代码,是我copy网上大神的,若是你运行了,会发现很慢,奸笑!
有什么讨论的内容,能够加我公众号: