Java 实现后进先出(LIFO)
/*
* Author: Eric Zhang
* Created: 20074る11ら と 01:09:25
* Modified: 20074る11ら と 01:09:25
* For LIFO
*/
import
java.util.
*
;
public
class
LinkedListStack
{
private static class Node {
Object o;
Node next;
}
private Node top = null;
public boolean imEmpty() {
return top == null;
}
public Object peek() {
if (top == null)
throw new EmptyStackException();
return top.o;
}
public void push(Object o) {
Node temp = new Node();
temp.o = o;
temp.next = top;
top = temp;
//return o;
}
public Object pop() {
if (top == null)
throw new EmptyStackException();
Object o = top.o;
top = top.next;
return o;
}
public static void main(String args[]) {
LinkedListStack o = new LinkedListStack();
o.push("aa");
o.push("bb");
System.out.println(o.pop());
o.push("cc");
System.out.println(o.pop());
System.out.println(o.pop());
}
}
LinkedListStack表明栈由一个私有的顶层嵌套类Node和一个私有引用变量top构成,引用变量top初始化为null表示一个空栈。相对于一维数组实现的栈,LinkedListStack并不需要一个构造器,因为它能够随着数据项的压入动态扩展。这样,void push(Object o)就不需要抛出FullStackException对象。然而,Object pop()还是需要检查栈是否为空的,这可能会导致可抛的EmptyStackException对象。
