"棧“者,存儲貨物或供旅客住宿的地方,可引申為倉庫、中轉站,所以引入到電腦領域里,就是指數據暫時存儲的地方,所以才有進棧、出棧的說法。 ...
原理來自百度百科
一、棧的定義
棧是一種只能在一端進行插入和刪除操作的特殊線性表;它按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來);棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針;插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。
二、棧的實現
package com.jalja.org.arith; public class MyStack<E>{ private Object [] arr;//存儲 private int index;//棧元素實際入棧索引 private int maxSize;//棧的最大空間 private MyStack(int maxSize) { this.arr=new Object[maxSize]; this.index=0; this.maxSize=maxSize; } //入棧 public void push(E e) { if(isFull()) { throw new RuntimeException("myStack is full "); } arr[index++]=e; } //出棧 public E pop() { if(isNull()) { throw new RuntimeException("myStack is null "); } E e=(E)arr[--index]; return e; } //訪問棧頂元素 public E peek() { return (E)arr[index-1]; } //棧是否為空 public boolean isNull() { return this.index <= 0; } //棧是否滿了 public boolean isFull() { return index>=maxSize; } public static void main(String[] args) { MyStack<String> myStack=new MyStack(3); myStack.push("A0"); myStack.push("A1"); myStack.push("A2"); System.out.println(myStack.peek()); while(!myStack.isNull()) { System.out.println(myStack.pop()); } } }