一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java數據結構與算法之棧(動力節點Java學院整理)

Java數據結構與算法之棧(動力節點Java學院整理)

2020-09-10 13:47動力節點 Java教程

這篇文章主要介紹了Java數據結構與算法之棧,棧是先進后出的數據的結構,本文通過文字說明與實例代碼相結合的形式給大家介紹的非常詳細,需要的朋友跟著小編一起學習吧

stack,中文翻譯為堆,其實指的是棧,heap,堆。這里講的是數據結構的棧,不是內存分配里面的堆和棧。

棧是先進后出的數據的結構,好比你碟子一個一個堆起來,最后放的那個是堆在最上面的。

隊列就是排隊買蘋果,先去的那個可以先買。

?
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
public class Stack {
   private int array[];
   private int max;
   private int top;
   public Stack(int max){
     this.max = max;
     array = new int[max];
     top = 0;
   }
   public void push(int value){
     if(isFull()){
       System.out.println("full,can not insert");
       return;
     }
     array[top++]=value;
   }
   public int pop(){
     return array[--top];
   }
   public boolean isEmpty(){
     if(top == 0){
       return true;
     }
     return false;
   }
   public boolean isFull(){
     if(top == max ){
       return true;
     }
     return false;
   }
   public void display(){
     while(!isEmpty()){
       System.out.println(pop());
     }
   }
   public static void main(String[] args) {
     Stack s = new Stack(5);
     s.push(1);
     s.push(3);
     s.push(5);
     s.push(5);
     s.push(5);
     s.display();
   }
 }

其實還是覺得設置top為-1好計算一點,記住這里的i++和++i,如果i=1,那么array[i++]=2,指的是array[1]=2,下次用到i的時候i的值才會變2,而++i就是直接使用i=2。

top指向0,因為每次都push一個元素加一,那么添加到最后一個元素的時候top=max。由于先進后出,那么先出的是最后進的,剛剛為top-1所在的位置。

正確輸出:

 5 
 5 
 5 
 3 
 1 

一、棧的使用——單詞逆序。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public String reverse(String in){
    String out="";
    for (int i = 0; i < in.length(); i++) {
      char c = in.charAt(i);
      push(c);
    }
    while(!isEmpty()){
      out+=pop();
    }
    return out;
  }
  public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    String string = s.nextLine();
    Stack st = new Stack(string.length());
    System.out.println(st.reverse(string));     
  }

將Stack的數組類型改為char即可。

讀取輸入也可以用IO讀取。

?
1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) {
  InputStreamReader is = new InputStreamReader(System.in);
  BufferedReader b = new BufferedReader(is);
  String string="";
  try {
    string = b.readLine();
  } catch (IOException e) {
    e.printStackTrace();
  }
  Stack st = new Stack(string.length());
  System.out.println(st.reverse(string));
}

二、棧的使用——分隔符匹配。

?
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
public int charat(char c){
  for (int i = 0; i < array.length; i++) {
    if(c == array[i])
      return i;
  }
  return array.length;
}
public void match(String in){
  String out="";
  for (int i = 0; i < in.length(); i++) {
    char c = in.charAt(i);
    if(c == '{' || c == '(' || c == '[' ){
      push(c);
    }
    if(c == '}' || c == ')' || c == ']'){
      char temp = pop();
     if(c == '}' && temp != '{'|| c == ')' && temp != '('|| c == ']' && temp != ']'){
        System.out.println("can not match in "+i);
      }
    }
  }
  while(!isEmpty()){
    char c = pop();
    if(c == '{'){
      System.out.println("insert } to match "+charat(c));
    }
    if(c == '[' ){
      System.out.println("insert ] to match "+charat(c));
    }
    if(c == '(' ){
      System.out.println("insert ) to match "+charat(c));
    }
  }
}
public static void main(String[] args) {
  Scanner s = new Scanner(System.in);
  String string = s.nextLine();
  Stack st = new Stack(string.length());
  st.match(string);
}
result:
klsjdf(klj{lkjjsdf{)
can not match in 19
insert } to match 1
insert ) to match 0

將({[先壓入棧,一旦遇到)}]便與彈出的元素比較,若吻合,則匹配。如果一直沒有)}],最后便會彈出棧的左符號,提示是在具體哪個位置,缺少的具體的右符號類型。

這是可以用棧來實現的工具。

棧中數據入棧和出棧的時間復雜度為常數O(1),因為與數據個數無關,直接壓入彈出,操作時間短,優勢便在這里,如果現實生活的使用只需用到先進后出的順序而且只用到進出數據的比較,那就可以使用棧了。

以上所述是小編給大家介紹的Java數據結構與算法之棧(動力節點Java學院整理),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 热久久最新网址 | 超强台风免费观看完整版视频 | 日本天堂影院在线播放 | 色综合久久九月婷婷色综合 | 色老大在线 | 男人jj视频| 国产精品久久久免费视频 | 亚洲国产果果在线播放在线 | 经典三级四虎在线观看 | 日韩精品成人在线 | 日韩精选 | 亚洲 无码 制服 日韩 | 羞羞私人影院可以直接免费观影吗 | 国产乱码在线精品可播放 | 四虎现在的网址入口2022 | 日本不卡一区二区三区在线观看 | 爱福利视频一区 | 亚洲欧美国产另类视频 | 双性np玩烂了np欲之国的太子 | 久久久免费观成人影院 | 五月天91| 亚洲无线一二三四区 | 美女在尿口隐私视频 | 奇米影视777最新在线 | 二区三区不卡不卡视频 | 999任你躁在线精品免费不卡 | 日韩精品成人 | 欧美日韩1区2区 | 国产成人精品一区二区阿娇陈冠希 | 精品国产国产精2020久久日 | 四虎影视在线观看2413 | 丁香婷婷在线视频 | 欧美日韩一品道 | 色综合天天娱乐综合网 | 亚洲成在人网站天堂一区二区 | 亚洲视频在线免费 | 艹的好爽 | 国产精品夜色视频一级区 | jk制服白丝超短裙流白浆 | 国产毛片在线观看 | 免费精品99久久国产综合精品 |