Java實現一個簡單的棧結構---Strack
阿新 • • 發佈:2018-11-23
棧是資料結構的一種,其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。
之前我覺得棧是一個非常難於理解的資料結構,其實不然,很多的時候真的是自己對於定義不清不楚,遇到想不通的問題便放棄了,對於實現一個簡單的棧結構,我們首先要明白採用什麼順序表結構作為底層的實現,筆者這裡採用的是基於陣列的棧結構。實現一個棧,我們要從定義入手:
(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
就這樣就實現了一個簡單的棧,是不是很簡單,其實關鍵在於理解好定義。