數據結構 第3講 棧

棧又稱堆棧,它是運算受限的線性表,其限制是僅容許在表的一段進行插入和刪除操做,不容許在其餘任何位置進行插入、刪除等操做,表中進行插入、刪除操做的一端稱爲棧頂,棧頂保存的元素稱爲棧頂元素,表的另外一端稱爲棧底。java

image
方法一:數組實現的棧,能存儲任意類型的數據

import java.lang.reflect.Array;

//數組實現的棧,能存儲任意類型的數據
public class Stacktest<T>{

	 private static final int  SIZE = 12;
	 private T[] Arrays;
	 private int count;
	 
	 public Stacktest(Class<T> type){
		 this(type,SIZE);
	 }
	// 不能直接使用Arrays = new T[SIZE];
	public Stacktest(Class<T> type,int size){
	Arrays =(T[]) Array.newInstance(type,size);
	count =0;
	}

	// 將t添加到棧中
	public void push(T t){
		Arrays[count++] = t;
	}
	// 返回"棧頂元素值"
   public T peek(){
   	return Arrays[count-1];
   }
// 返回"棧頂元素值",並刪除"棧頂元素"
   public T pop(){
   	T ret = Arrays[count-1];
   	count--;
   	return ret;
   }
// 返回"棧"的大小
   public int size(){
   	return count;
   }
   // 返回"棧"是否爲空
   public boolean isEmpty() {
       return size()==0;
   }

   // 打印"棧"
   public void PrintArrayStack() {
       if (isEmpty()) {
           System.out.printf("stack is Empty\n");
       }

       System.out.printf("size()=%d\n", size());

       int i=size()-1;
       while (i>=0) {
           System.out.println(Arrays[i]);
           i--;
       }
   }

   public static void main(String[] args) {
       String string;
       // 將10, 20, 30 依次推入棧中
       Stacktest<String> stack = new Stacktest<String>(String.class);    
       stack.push("10");
       stack.push("20");
       stack.push("30");

       // 將"棧頂元素"賦值給stack,並刪除"棧頂元素"
       string = stack.pop();
       System.out.println("stack="+string);

       // 只將"棧頂"賦值給stack,不刪除該元素.
       string = stack.peek();
       System.out.println("stack="+string);

       stack.push("30");
       stack.PrintArrayStack();    // 打印棧
   }
}
複製代碼

image
方法二:Java的 Collection集合 中自帶的"棧"(stack)的示例

import java.util.Stack;

public class Test {
    public static void main(String[] args) {
   int num=0;
// 將10, 20, 30 依次推入棧中
   Stack<Integer> test = new Stack<Integer>();
   test.push(10);
   test.push(20);
   test.push(30);
// 將"棧頂元素"賦值給num,並刪除"棧頂元素"
   num = test.pop();
// 只將"棧頂"賦值給num,不刪除該元素. 
   num = (int)test.peek();
   test.push(30);
   while (!test.empty()) {
	num = (int)test.pop();
	  System.out.printf("num=%d\n",num);
        }
	}
}

複製代碼

image
相關文章
相關標籤/搜索