"Stack" 通常时指"后进后出"(LIFO)的容器,有时栈也被称为叠加栈,因为最后"压入"栈的元素,第一个"弹出"栈,经常用来类比栈的事物时装有弹簧的储存器中的自助托盘,最后装入托盘的总是最先拿出.
LinkedList具有能够直接实现栈的所有功能的方法,因此可以直接将LinkedList当栈使用,不过,有时一个正真的"Stack"更能把事情讲清楚
下面时java编程思想的栈,T是泛型,类名之后加<T>告诉编译器这将是一个参数化类型而其中的类细参数,即在类被使用时将被实际类类型替换的参数,"我么在定义一个可以持有T类型对象的Stack." Stack是用LinkedList实现的,而LinkedList也被告知它将持有T类型对象.注意push接受的是T类型的对象,而peek()和pop返回T类型的对象,
//: net/mindview/util/Stack.java // Making a stack from a LinkedList. package object; import java.util.LinkedList; public class Stack<T> {//T是泛型,类名之后加<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(); } } ///:~
使用实例
//: holding/StackTest.java package object; //import net.mindview.util.*; public class StackTest { public static void main(String[] args) { Stack<String> stack = new Stack<String>(); for(String s : "My dog has fleas".split(" "))/split分隔字符串返回数组 stack.push(s); while(!stack.empty()) System.out.print(stack.pop() + " "); } } /* Output: fleas has dog My *///:~
编程思想的Stack和java的Stack使用实例
//: holding/StackCollision.java package object; import net.mindview.util.*; public class StackCollision { public static void main(String[] args) { Stack<String> stack = new Stack<String>(); for(String s : "My dog has fleas".split(" ")) stack.push(s); while(!stack.empty()) System.out.print(stack.pop() + " "); System.out.println(); java.util.Stack<String> stack2 = new java.util.Stack<String>(); for(String s : "My dog has fleas".split(" ")) stack2.push(s); while(!stack2.empty()) System.out.print(stack2.pop() + " "); } } /* Output: fleas has dog My fleas has dog My *///:~