用Java代碼實現棧資料結構的基本方法歸納_java

來源:互聯網
上載者:User

鏈式實現:

在棧的一段添加和刪除元素,在棧中維護一個指向棧頂的結點和一個count變數指示棧的大小:
private LinearNode top; //指向棧頂
private int count;//標記棧的大小
每次出棧和壓棧在鏈表的表頭:(也可以再表尾,實現方式不一樣而已)
top--->元素1--->元素2--->元素3.........
實現(附帶測試main):
LinkedStack

package Stack;import Bag.LinearNode;//為了重點來實現演算法,將異常情況直接列印出然後退出程式,不再聲明異常類public class LinkedStack implements StackADT {  private LinearNode top; //指向棧頂  private int count;//標記棧的大小  public static void main(String[] args){    LinkedStack stack = new LinkedStack();    System.out.println("將0到10依次壓棧");    for(int i = 0;i < 10;i++)      stack.push(i);    System.out.println("連續執行5次出棧操作");    for(int i = 0;i < 5;i++)      stack.pop();    System.out.println("棧為空白嗎?: " + stack.isEmpty());    System.out.println("棧的大小為: " + stack.size());    System.out.println("棧頂元素為: " + stack.top.getElement());    System.out.println("棧頂元素為: " + stack.peek());    }  public LinkedStack()  {    top = null;    count = 0;  }  public int size() {    return count;  }  public boolean isEmpty() {    return (size() == 0);  }  public void push(Object element) {    LinearNode node = new LinearNode(element);    node.setNext(top);    top = node;    count++;  }  public Object pop() {    if(isEmpty())    {      System.out.println("stack is empty!");      System.exit(1);    }    Object result = top.getElement();    top = top.getNext();    count--;    return result;  }  public Object peek() {    Object result = top.getElement();    return result;  }}

運行結果:
將0到10依次壓棧
連續執行5次出棧操作
棧為空白嗎?: false
棧的大小為: 5
棧頂元素為: 4
棧頂元素為: 4

數組實現:

棧底總是數組下標為0的位置,入棧出棧從數組下標的最後一個元素開始:

private Object[] contents;private int top;//top標記下一個入棧的位置,同時也表示棧的容量大小,跟鏈式實現的count比較一下!!!

實現(附帶測試main):
ArrayStack

package Stack;public class ArrayStack implements StackADT {  private Object[] contents;  private int top;//top標記下一個入棧的位置,同時也表示棧的容量大小,跟鏈式實現的count比較一下!!!  private static int SIZE = 10;  public ArrayStack()  {    contents = new Object[SIZE];    top = 0;  }  public void expand(){//藉助於申請一個輔助空間,每次擴充容量一倍    Object[] larger = new Object[size()*2];    for(int index = 0;index < top;index++)      larger[index] = contents[index];    contents = larger;  }  public int size() {    return top;  }  public boolean isEmpty() {    return (size() == 0);  }  public void push(Object element) {    //if(isEmpty())      //expand();    if(top == contents.length)      expand();    contents[top] = element;    top++;  }  public Object pop() {    if(isEmpty())    {      System.out.println("stack is empty!");      System.exit(1);    }    Object result = contents[top-1];    contents[top-1] = null;//出棧    top--;    return result;      /*書上這樣寫簡便一點:::     * top--;     * Object result = contents[top];     * contents[top] = null;*/      }  public Object peek() {    Object result;    if(isEmpty())      result = null;    else      result = contents[top-1];    return result;  }  public static void main(String[] args) {    ArrayStack stack = new ArrayStack();    System.out.println("將0到24依次壓棧,然後連續10次出棧");    for(int i = 0;i < 25;i++)      stack.push(i);    for(int i = 0;i < 10;i++)      stack.pop();    System.out.println("棧的大小為: " + stack.size());    System.out.println("棧為空白嗎?: " + stack.isEmpty());    System.out.println("棧頂元素為: " + stack.peek());  }}

運行結果:
將0到24依次壓棧,然後連續10次出棧
棧的大小為: 15
棧為空白嗎?: false
棧頂元素為: 14

使用集合LinkedList來類比棧
方法
java的泛型可以讓LinkedList類比儲存各種資料類型的棧,包括int,double,String,Object等等,介紹一下幾種用到的API介面:

入棧

  void addFirst(E e); // 將指定元素插入此列表的開頭 


擷取棧頂元素

  E getFirst(); // 返回此列表的第一個元素 


出棧

  E removeFirst(); // 移除並返回此列表第一個元素 


判棧空

  boolean isEmpty(); // 判斷棧空 

範例程式碼

   

 import java.util.LinkedList;   import java.util.NoSuchElementException;         public class SimulateStack {     private LinkedList<Integer> stack = new LinkedList<Integer>();          public boolean isEmpty() {       return this.stack.isEmpty();     }          public void push(int data) {       this.stack.addFirst(data);     }          public int pop() throws NoSuchElementException{       return this.stack.removeFirst();     }          public int getTop() throws NoSuchElementException{       return this.stack.getFirst();     }          public static void main(String args[]) {       SimulateStack s = new SimulateStack();              s.push(1);       s.push(2);       s.push(3);              while (! s.isEmpty()) {         int data = s.getTop();         System.out.println(data);         s.pop();       }     }   } 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.