您的位置:首页 > 编程语言 > Java开发

Java Collection Stack

2016-12-13 13:01 190 查看
栈只允许访问一个数据项:即最后插入的数据项。移除这个数据项后才能访问倒数第二个插入的数据项,依此类推。而Stack这个类就是实现这种数据结构的类,也就是说Stack这个类代表着last-in-first-out(LIFO).Stack继承自Vector并且添加了5个方法,然后就可以把它对待成一个栈结构。

push() 添加一个元素入栈.

pop() 删除在栈顶的元素,并且返回这个元素

peek() 查看在栈顶的元素,但是并不会把这个元素从栈中移除

empty() 测试这个栈是否是一个空的

search(Object) 返回这个元素的在栈中由上而下所在的位置

实现栈可以用数组,也可以用链表。而JDK中实现栈是通过数组实现的,它是继承自Vector,我们可以把Vector对待为线程安全的ArrayList.在之前的Blog中已经介绍了ArrayList的数据结构 – Java Collection ArrayList.

下面我们来看一看这5个方法的具体实现:

1、push

public E push(E item) {
addElement(item);

return item;
}


调用Vector的addElement()方法把元素到栈中。

2、peek

public synchronized E peek() {
int     len = size();

if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}


返回数组中的最后一个元素,也就是栈顶元素。

3、pop

public synchronized E pop() {
E       obj;
int     len = size();

obj = peek();
removeElementAt(len - 1);

return obj;
}


删除栈顶元素,并返回。

4、empty

public boolean empty() {
return size() == 0;
}


通过判断数组长度为0来判断栈是否为空。

5、search

public synchronized int search(Object o) {
int i = lastIndexOf(o);

if (i >= 0) {
return size() - i;
}
return -1;
}


判断元素在数组出现的最后一次(有可能元素重复)的位置,然后size - 1,得到元素在栈的位置。

6、栈的应用

栈是计算机术语中比较重要的概念,实质上栈就是一段内存区域,但是栈满足一定的特性,那就是只有一个口,具有先入后出的特性,这种特性在计算机中有很广泛的运用。其实在程序员无时无刻不在运用栈,函数的调用是我们间接使用栈的最好例子,因此可以说栈的一个最重要的运用就是函数的调用。

但是栈的运用还不止这些,还有很多,其中几个典型的运行如下:判断平衡符号,实现表达式的求值(也就是中缀表达式转后缀表达式的问题以及后缀表达式求值问题),在路劲探索中实现路劲的保存也可以说是栈的经典运用之一。具体的问题具体分析,只要满足先入后出特性的问题都能找到现成的数据结构—栈。

符号的平衡问题

表达式的求值问题

后缀表达式求值问题

具体的应用可以参看: 栈的经典运用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: