1. 程式人生 > >Java實現一個簡單的棧結構---Strack

Java實現一個簡單的棧結構---Strack

棧是資料結構的一種,其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。

之前我覺得棧是一個非常難於理解的資料結構,其實不然,很多的時候真的是自己對於定義不清不楚,遇到想不通的問題便放棄了,對於實現一個簡單的棧結構,我們首先要明白採用什麼順序表結構作為底層的實現,筆者這裡採用的是基於陣列的棧結構。實現一個棧,我們要從定義入手:

(1)僅允許在表的一端進行插入和刪除,這意味著我們需要一個指標變數,用來代表這一端。

(2)我們採用的是基於資料的棧,那麼我還還需要定義一個數組來包裹我們的資料物件

(3)棧的初始大小,最大值等等

清楚了上面的步驟,我覺得就可以自己思考怎麼去實現了,下面我們通過程式碼來看看:

 

public class Stack<E> {
	
	private int max_size = 16;//棧容量(最大值)
	
	private int top = -1;//棧頂指標
	
	private Object[] data;//棧資料
	
	private double opcatity = 0.75;//負載因子
	
	public Stack(){
		this(10);
	}
	public Stack(int size){
		if(size<0){
			throw new IllegalArgumentException("棧的初始大小不能小於0"+size);
		}
		if(size>max_size){
			max_size = max_size + (int)(max_size*opcatity);
		}
		max_size = size;
		data = new Object[max_size];
	}
	public E push(E e){
		if(top>this.max_size-1){
			throw new RuntimeException("棧已滿");
		}
		E obj = e;
		data[++top] = e;
		return obj;
	}
	public E pop(){
		if(top==-1){
			throw new RuntimeException("棧為空");
		}
		return (E) data[top--];
	}
	public E search(int index){
		if(index>this.max_size-1||index<0){
			throw new RuntimeException("查詢不在範圍之內");
		}
		int i = 0;
		while(index!=i){
			i++;
		}
		return (E) data[i];
	}
}

然後我們來測試一下:

 

public class Main {
	public static void main(String[] args) {
		Stack stack = new Stack(10);
		
		 for(int i=0;i<10;i++)  
	        {  
			 	stack.push(i);  
	        }  
		 for(int i=0;i<10;i++){
			 System.out.println(stack.pop());
		 }
	        
	}
}

 

 

 

結果:

 

 

9
8
7
6
5
4
3
2
1
0
就這樣就實現了一個簡單的棧,是不是很簡單,其實關鍵在於理解好定義。