1. 程式人生 > >java Stack(棧)

java Stack(棧)

"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
*///:~