最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用Java代碼實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)的基本方法歸納

 更新時(shí)間:2015年08月06日 11:09:57   作者:zinss26914  
這篇文章主要介紹了用Java代碼實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)的基本方法歸納,各種算法的實(shí)現(xiàn)也是ACM上經(jīng)常出現(xiàn)的題目,是計(jì)算機(jī)學(xué)習(xí)的基本功,需要的朋友可以參考下

鏈?zhǔn)綄?shí)現(xiàn):

在棧的一段添加和刪除元素,在棧中維護(hù)一個(gè)指向棧頂?shù)慕Y(jié)點(diǎn)和一個(gè)count變量指示棧的大?。?br /> private LinearNode top; //指向棧頂
private int count;//標(biāo)記棧的大小
每次出棧和壓棧在鏈表的表頭:(也可以再表尾,實(shí)現(xiàn)方式不一樣而已)
top--->元素1--->元素2--->元素3.........
實(shí)現(xiàn)(附帶測(cè)試main):
LinkedStack

package Stack;
import Bag.LinearNode;
//為了重點(diǎn)來(lái)實(shí)現(xiàn)算法,將異常情況直接打印出然后退出程序,不再聲明異常類(lèi)
public class LinkedStack implements StackADT {
  private LinearNode top; //指向棧頂
  private int count;//標(biāo)記棧的大小
  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("連續(xù)執(zhí)行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;
  }
}

運(yùn)行結(jié)果:
將0到10依次壓棧
連續(xù)執(zhí)行5次出棧操作
棧為空嗎?: false
棧的大小為: 5
棧頂元素為: 4
棧頂元素為: 4

數(shù)組實(shí)現(xiàn):

棧底總是數(shù)組下標(biāo)為0的位置,入棧出棧從數(shù)組下標(biāo)的最后一個(gè)元素開(kāi)始:

private Object[] contents;
private int top;//top標(biāo)記下一個(gè)入棧的位置,同時(shí)也表示棧的容量大小,跟鏈?zhǔn)綄?shí)現(xiàn)的count比較一下?。?!

實(shí)現(xiàn)(附帶測(cè)試main):
ArrayStack

package Stack;
public class ArrayStack implements StackADT {
  private Object[] contents;
  private int top;//top標(biāo)記下一個(gè)入棧的位置,同時(shí)也表示棧的容量大小,跟鏈?zhǔn)綄?shí)現(xiàn)的count比較一下?。?!
  private static int SIZE = 10;
  public ArrayStack()
  {
    contents = new Object[SIZE];
    top = 0;
  }
  public void expand(){//借助于申請(qǐng)一個(gè)輔助空間,每次擴(kuò)展容量一倍
    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;  
    /*書(shū)上這樣寫(xiě)簡(jiǎn)便一點(diǎn):::
     * 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依次壓棧,然后連續(xù)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());
  }
}

運(yùn)行結(jié)果:
將0到24依次壓棧,然后連續(xù)10次出棧
棧的大小為: 15
棧為空嗎?: false
棧頂元素為: 14

使用集合LinkedList來(lái)模擬棧
方法
java的泛型可以讓LinkedList模擬存儲(chǔ)各種數(shù)據(jù)類(lèi)型的棧,包括int,double,String,Object等等,介紹一下幾種用到的API接口:

入棧

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


獲取棧頂元素

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


出棧

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


判???/p>

  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(); 
      } 
    } 
  } 

相關(guān)文章

  • Springboot如何根據(jù)實(shí)體類(lèi)生成數(shù)據(jù)庫(kù)表

    Springboot如何根據(jù)實(shí)體類(lèi)生成數(shù)據(jù)庫(kù)表

    這篇文章主要介紹了Springboot如何根據(jù)實(shí)體類(lèi)生成數(shù)據(jù)庫(kù)表的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot+Vue項(xiàng)目部署上線(xiàn)的實(shí)現(xiàn)示例

    SpringBoot+Vue項(xiàng)目部署上線(xiàn)的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot+Vue項(xiàng)目部署上線(xiàn)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • springboot2.2 集成 activity6實(shí)現(xiàn)請(qǐng)假流程(示例詳解)

    springboot2.2 集成 activity6實(shí)現(xiàn)請(qǐng)假流程(示例詳解)

    這篇文章主要介紹了springboot2.2 集成 activity6實(shí)現(xiàn)請(qǐng)假完整流程示例詳解,本文通過(guò)示例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java對(duì)象方法的調(diào)用執(zhí)行過(guò)程詳解

    Java對(duì)象方法的調(diào)用執(zhí)行過(guò)程詳解

    這篇文章主要介紹了Java對(duì)象方法的調(diào)用執(zhí)行過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 聊聊springboot靜態(tài)資源加載的規(guī)則

    聊聊springboot靜態(tài)資源加載的規(guī)則

    這篇文章主要介紹了springboot靜態(tài)資源加載的規(guī)則,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java創(chuàng)建多線(xiàn)程局域網(wǎng)聊天室實(shí)例

    Java創(chuàng)建多線(xiàn)程局域網(wǎng)聊天室實(shí)例

    這篇文章主要介紹了Java創(chuàng)建多線(xiàn)程局域網(wǎng)聊天室實(shí)例,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Springboot整合微信支付(訂單過(guò)期取消及商戶(hù)主動(dòng)查單)

    Springboot整合微信支付(訂單過(guò)期取消及商戶(hù)主動(dòng)查單)

    本文主要介紹了Springboot整合微信支付(訂單過(guò)期取消及商戶(hù)主動(dòng)查單),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java線(xiàn)程池獲取池中所有線(xiàn)程列表的方法總結(jié)

    Java線(xiàn)程池獲取池中所有線(xiàn)程列表的方法總結(jié)

    在Java中,獲取線(xiàn)程池中所有線(xiàn)程列表并不是一個(gè)直接支持的功能,因?yàn)榫€(xiàn)程池的設(shè)計(jì)通常是為了隱藏和管理底層的線(xiàn)程細(xì)節(jié),從而提供更高層次的抽象和并發(fā)控制能力,本文給大家介紹了Java線(xiàn)程池獲取池中所有線(xiàn)程列表的方法,需要的朋友可以參考下
    2024-10-10
  • Java中NIO的三大核心組件詳細(xì)解析

    Java中NIO的三大核心組件詳細(xì)解析

    這篇文章主要介紹了Java中NIO的三大核心組件詳細(xì)解析,NIO的Buffer類(lèi)是一個(gè)抽象類(lèi),位于java.nio包中,提供了一組更加有效的方法,用來(lái)進(jìn)行寫(xiě)入和讀取的交替訪(fǎng)問(wèn),本質(zhì)上是一個(gè)內(nèi)存塊,既可以寫(xiě)入數(shù)據(jù),也可以從中讀取數(shù)據(jù),需要的朋友可以參考下
    2023-12-12
  • Mybatis?XML配置文件實(shí)現(xiàn)增刪改查的示例代碼

    Mybatis?XML配置文件實(shí)現(xiàn)增刪改查的示例代碼

    本文主要介紹了Mybatis?XML配置文件實(shí)現(xiàn)增刪改查的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03

最新評(píng)論

罗田县| 玛曲县| 嘉义县| 新河县| 桓仁| 抚顺市| 宾阳县| 葵青区| 长兴县| 师宗县| 桃园县| 南丰县| 阿合奇县| 中山市| 大邑县| 揭东县| 苍山县| 临桂县| 五莲县| 定远县| 玉龙| 巴塘县| 德庆县| 凤台县| 乌拉特前旗| 常德市| 河间市| 正阳县| 玛纳斯县| 民权县| 丘北县| 余干县| 呼和浩特市| 精河县| 宣恩县| 搜索| 高安市| 肃南| 阿克陶县| 安庆市| 扶沟县|