国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 用Java代碼實現棧數據結構的基本方法歸納

用Java代碼實現棧數據結構的基本方法歸納

2020-01-02 14:23zinss26914 JAVA教程

這篇文章主要介紹了用Java代碼實現棧數據結構的基本方法歸納,各種算法的實現也是ACM上經常出現的題目,是計算機學習的基本功,需要的朋友可以參考下

鏈式實現:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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的位置,入棧出棧從數組下標的最后一個元素開始:

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

實現(附帶測試main):
ArrayStack

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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接口:

入棧

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


獲取棧頂元素

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


出棧

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


判???/p>

?
1
boolean isEmpty(); // 判斷棧空

 

示例代碼

   

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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();
     }
   }
 }

延伸 · 閱讀

精彩推薦
  • JAVA教程SpringMVC文件上傳 多文件上傳實例

    SpringMVC文件上傳 多文件上傳實例

    這篇文章主要介紹了SpringMVC文件上傳 多文件上傳實例,有需要的朋友可以參考一下 ...

    java教程網3732019-11-01
  • JAVA教程java獲取ip地址示例

    java獲取ip地址示例

    在JSP里,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid等反向代理軟件就不能獲取到客戶...

    Java教程網3802019-11-18
  • JAVA教程從java面試題了解你所模糊的數組

    從java面試題了解你所模糊的數組

    這篇文章主要介紹了從java面試題了解你所模糊的數組,數組用來存儲一系列的數據項,其中的每一項具有相同的基本數據類型、類或相同的父類。通過使用...

    話爾loony1932019-06-27
  • JAVA教程教你如何編寫簡單的網絡爬蟲

    教你如何編寫簡單的網絡爬蟲

    實際的爬蟲是從一系列的種子鏈接開始。種子鏈接是起始節點,種子頁面的超鏈接指向的頁面是子節點(中間節點),對于非html文檔,如excel等,不能從中...

    java之家4602019-10-16
  • JAVA教程JAVA中STRING的常用方法小結

    JAVA中STRING的常用方法小結

    這篇文章介紹了JAVA中STRING的常用方法,有需要的朋友可以參考一下 ...

    JAVA之家3402019-10-13
  • JAVA教程用代碼更新你的jar包

    用代碼更新你的jar包

    這篇文章主要介紹了用程序代碼更新com目錄下的所有文件到jar的對應目錄結構中去,這樣可以做到自動更新程序吧 ...

    java教程網4222019-11-03
  • JAVA教程解析Java中的默認方法

    解析Java中的默認方法

    這篇文章主要介紹了Java中的默認方法,包括繼承和調用等Java入門學習中的基礎知識,需要的朋友可以參考下 ...

    goldensun1192019-12-26
  • JAVA教程java實現冒泡排序算法

    java實現冒泡排序算法

    冒泡排序(Bubble Sort)是一種簡單的排序算法。它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工...

    hebedich2662019-12-15
主站蜘蛛池模板: 久久久精品综合 | 欧美日韩一区二区三区在线电影 | 欧美日韩a | 亚洲一区视频在线 | 一本色道久久综合狠狠躁的推荐 | 99视频网站 | www.五月婷| 69国产精品成人96视频色 | 久久精品国产v日韩v亚洲 | 午夜寂寞少妇aaa片毛片 | 国产在线观看免费 | 久久精品久久综合 | 黄色a视频| 欧美日韩成人在线播放 | 四虎影视4hu4虎成人 | 最近免费中文字幕大全免费版视频 | 免费成人黄色大片 | 夜夜摸夜夜操 | 亚洲福利国产 | 香蕉视频成人在线观看 | 操网| 国产一区二区精品丝袜 | 亚洲精品一区在线观看 | 色999国产| 在线视频亚洲 | 精品国偷自产国产一区 | 麻豆一区二区三区 | 欧美日韩精品免费观看 | 日韩精品久久 | 狠久久| 午夜视频网站 | 人人爽在线观看 | av在线日韩 | 在线色网站 | 日本网站在线免费观看 | 亚洲综合二区 | 亚洲 欧美 日韩在线 | 亚洲精品久久久久久国产精华液 | 二区在线视频 | 国产精品久久久久久亚洲调教 | 欧美中文字幕一区 |