用陣列實現一個棧結構
阿新 • • 發佈:2018-12-23
棧在計算機中是很常見的,棧到底是什麼呢?用官方的話說棧(Stack
) 類表示後進先出(LIFO)的物件堆疊。通俗的講棧相當於是一個容器,就我們生活中而言,我們可以在容器中裝東西,也可以從中取出我們想要的物品。我們可以形象地畫個示意圖,如下所示:
假如,我們有幾個(編號為1、2、3、4、5、6、7)物品按照如圖裝入容器中,順序如圖所示,假如我們要取出來,順序一定是倒著的(即:7、6、5、4、3、2、1),這就是我們所謂的:LIFO(Last In First Out)。在棧中,我們稱最先放入的元素稱為棧底元素,最後放入的稱為棧頂元素。將元素放在棧中稱為入棧,取出稱為出棧。現在我們想要用陣列簡單地實現棧結構。
查API可知,在棧中存在5個方法,即:empty()、peek()、pop()、push()、search()。要想實現這幾種方法,我們需要分別構造相應的方法,使之達到預期的效果。
package stack01; import java.util.Arrays; import java.util.EmptyStackException; public class StackExer { class ArrayStack{ private String[] data=new String[10];//儲存資料 private int size;//記錄個數 //把item壓入堆疊頂部 public void push(String str) { //判斷是否需要擴容 if (size>data.length) { data=Arrays.copyOf(data, data.length*2); } data[size++]=str; } //檢視堆疊頂部的物件,但不從堆疊中移除它 public String peek() { //判斷棧是否為空 if (size==0) { throw new EmptyStackException(); } return data[size-1]; //獲取棧頂元素 } //移除堆疊頂部的物件,並作為此函式的值返回該物件 public String pop() { String str=this.peek();//獲取棧頂元素 size--; //減少元素個數 return str; } //測試堆疊是否為空 public boolean empty() { return size==0; } //返回物件在堆疊中的位置,以 1 為基數 public int research(String str) { //順著放倒著拿(FILO/LIFO) for (int i = size-1; i >=0; i--) { if (str==data[i]||str!=null&&data[i].equals(str)) { return size-i; } } return -1; //返回棧中不存在該元素 } } }