栈(Stack)的实现和基本操作
栈实现的是一种后进先出(last-in, first-out, LIFO)的策略。
栈的三种基本操作:
- 压入(push)
- 弹出(pop)
- 检查栈是否为空(empty)
三种操作的执行时间都是o(1)
在java中的java.util.LinkedList能够直接实现栈的所有功能的方法,因此可以直接将LinkedList当作栈使用,并且比java.util.stack里的可取。
import java.util.LinkedList;
/**
* Implement a Stack by LinkedList.
* (the code excerpted from thinking in java fourth edition)
*/
public class MyStack<T> {
private LinkedList<T> storage = new LinkedList<T>();
public void push(T v) { storage.addFirst(v); }
public T peek() { return storage.getFirst(); }
public T pop() { return storage.removeFirst(); }
public boolean empty() {return storage.isEmpty(); }
public String toString() { return storage.toString(); }
// test
public static void main(String[] args) {
MyStack<String> stack = new MyStack<>();
for(String s : "My dog has fleas".split(" ")) {
stack.push(s);
}
while(!stack.empty())
System.out.print(stack.pop() + " ");
}
}