程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 用Java代碼完成棧數據構造的根本辦法歸結

用Java代碼完成棧數據構造的根本辦法歸結

編輯:關於JAVA

用Java代碼完成棧數據構造的根本辦法歸結。本站提示廣大學習愛好者:(用Java代碼完成棧數據構造的根本辦法歸結)文章只能為提供參考,不一定能成為您想要的結果。以下是用Java代碼完成棧數據構造的根本辦法歸結正文


鏈式完成:

在棧的一段添加和刪除元素,在棧中保護一個指向棧頂的結點和一個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(); 
      } 
    } 
  } 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved