1. 程式人生 > >用陣列實現一個棧結構

用陣列實現一個棧結構

    棧在計算機中是很常見的,棧到底是什麼呢?用官方的話說棧(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;    //返回棧中不存在該元素
		}
		
	}

	
	
}