栈与链表的特性
栈 top端进出
链表增删改查全是O(n),但链表的优势在于,如果是针对链表头操作,增和删都是O(1)级别的
利用上面两点,可以实现 链表栈,链表的head端当栈的top端
ArrayStack VS LinkedListStack
一个需要resize,一个需要new对象,但都是O(1) 级别,
在时间上没有量级差别
用链表实现栈 LinkedList-Stack
注意这里要实现栈的功能,用LinkedList,所以
接口Stack
LinkedList implements Stack {
LinkedList linkedList 对象操作
}
public class LinkedListStack<E> implements Stack<E> {
private LinkedList<E> list;
public LinkedListStack () {
list = new LinkedList<>();
}
@Override
public void push(E e) {
list.addFirst(e);
}
@Override
public E pop() {
return list.removeFirst();
}
@Override
public E peek() {
return list.getFirst();
}
@Override
public int getSize() {
return list.getSize();
}
@Override
public boolean isEmpty() {
return list.isEmpty();
}
@Override
public String toString () {
StringBuilder ret = new StringBuilder();
ret.append("LinkedList-Stack : Top ");
ret.append(list);//!!! 复用LinkedList中的 toString
return ret.toString();
}
public static void main(String[] args) {
LinkedListStack<Integer> linkedListStack = new LinkedListStack<>();
for (int i = 0; i < 5; i ++) {
linkedListStack.push(i);
System.out.println(linkedListStack);
}
linkedListStack.pop();
System.out.println(linkedListStack);
}
}