看看java.util.Stack源Java 9

    在咱们的数据结构的学习中,栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,须要读数据的时候从栈顶开始弹出数据。栈是只能在某一端插入和删除的特殊线性表,插入通常称为进栈,删除则称为退栈。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网上大神的,若是你运行了,会发现很慢,奸笑!

有什么讨论的内容,能够加我公众号:

相关文章
相关标签/搜索