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

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - java 數(shù)據(jù)結(jié)構(gòu)中棧結(jié)構(gòu)應(yīng)用的兩個(gè)實(shí)例

java 數(shù)據(jù)結(jié)構(gòu)中棧結(jié)構(gòu)應(yīng)用的兩個(gè)實(shí)例

2020-11-05 15:51想作會(huì)飛的魚(yú) JAVA教程

這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)中棧結(jié)構(gòu)應(yīng)用的兩個(gè)實(shí)例的相關(guān)資料,需要的朋友可以參考下

java 數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)應(yīng)用的兩個(gè)實(shí)例

1、單詞逆序。

 要求從控制臺(tái)讀入一串字符,按回車(chē)結(jié)束輸入,同時(shí)顯示其逆序字符串。

對(duì)于顛倒順序的操作,用棧來(lái)解決是很方便的。具體思想是把字符串中的每一個(gè)字符按順序存入棧中,然后再一個(gè)一個(gè)的從棧中取出。這時(shí)就是按照逆序取出的字符串。     

?
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// reverse.java
// stack used to reverse a string
// to run this program: C>java ReverseApp
import java.io.*;         // for I/O
////////////////////////////////////////////////////////////////
class StackX//定義了棧的基本結(jié)構(gòu)和操作
  {
  private int maxSize;//棧最大值
  private char[] stackArray;//棧內(nèi)用數(shù)組存儲(chǔ)數(shù)據(jù)
  private int top;//當(dāng)前棧頂標(biāo)號(hào),從0開(kāi)始
//--------------------------------------------------------------
  public StackX(int max)  // constructor
   {
   maxSize = max;
   stackArray = new char[maxSize];
   top = -1;
   }
//--------------------------------------------------------------
  public void push(char j) // put item on top of stack
   {
   stackArray[++top] = j;
   }
//--------------------------------------------------------------
  public char pop()     // take item from top of stack
   {
   return stackArray[top--];
   }
//--------------------------------------------------------------
  public char peek()    // peek at top of stack
   {
   return stackArray[top];
   }
//--------------------------------------------------------------
  public boolean isEmpty() // true if stack is empty
   {
   return (top == -1);
   }
//--------------------------------------------------------------
  } // end class StackX
////////////////////////////////////////////////////////////////
class Reverser//封裝了單詞逆序的操作
  {
  private String input;        // input string
  private String output;        // output string
//--------------------------------------------------------------
  public Reverser(String in)      // constructor
   { input = in; }
//--------------------------------------------------------------
  public String doRev()        // reverse the string
   {
   int stackSize = input.length();  // get max stack size
   StackX theStack = new StackX(stackSize); // make stack
 
   for(int j=0; j<input.length(); j++)
     {
     char ch = input.charAt(j);   // get a char from input
     theStack.push(ch);       // push it
     }
   output = "";
   while( !theStack.isEmpty() )
     {
     char ch = theStack.pop();   // pop a char,
     output = output + ch;     // append to output
     }
   return output;
   } // end doRev()
//--------------------------------------------------------------
  } // end class Reverser
////////////////////////////////////////////////////////////////
class ReverseApp
  {
  public static void main(String[] args) throws IOException
   {
   String input, output;
   while(true)
     {
     System.out.print("Enter a string: ");
     System.out.flush();
     input = getString();     // read a string from kbd
     if( input.equals("") )    // 若沒(méi)有輸入字符串直接按回車(chē),則結(jié)束
      break;
                    // make a Reverser
     Reverser theReverser = new Reverser(input);
     output = theReverser.doRev(); // use it
     System.out.println("Reversed: " + output);
     } // end while
     System.out.println("this is end");
   } // end main()
//--------------------------------------------------------------
  public static String getString() throws IOException
   {
   InputStreamReader isr = new InputStreamReader(System.in);
   BufferedReader br = new BufferedReader(isr);
   String s = br.readLine();
   return s;
   }
//--------------------------------------------------------------
  } // end class ReverseApp
////////////////////////////////////////////////////////////////

2.分隔符匹配

有些分割符在編程中一定是成對(duì)出現(xiàn)的,例如(),{},和[]等。如果發(fā)現(xiàn)有未匹配的分隔符,編譯器會(huì)報(bào)錯(cuò)。因?yàn)槠ヅ洳僮鞑扇【徒瓌t,后輸入的分割符優(yōu)先匹配,具有“后進(jìn)先出”的特點(diǎn)。這個(gè)匹配操作可以用棧來(lái)實(shí)現(xiàn)。

具體操作是在輸入過(guò)程中,如果遇到左匹配符,則將左匹配符壓入棧中。如果遇到右匹配符,則從棧中取出一個(gè)數(shù)據(jù),分析其與右匹配符是否相匹配。若匹配,則繼續(xù)進(jìn)行,若不匹配,則報(bào)錯(cuò)終止。

?
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// brackets.java
// stacks used to check matching brackets
// to run this program: C>java bracketsApp
import java.io.*;         // for I/O
////////////////////////////////////////////////////////////////
class StackX
  {
  private int maxSize;
  private char[] stackArray;
  private int top;
//--------------------------------------------------------------
  public StackX(int s)    // constructor
   {
   maxSize = s;
   stackArray = new char[maxSize];
   top = -1;
   }
//--------------------------------------------------------------
  public void push(char j) // put item on top of stack
   {
   stackArray[++top] = j;
   }
//--------------------------------------------------------------
  public char pop()     // take item from top of stack
   {
   return stackArray[top--];
   }
//--------------------------------------------------------------
  public char peek()    // peek at top of stack
   {
   return stackArray[top];
   }
//--------------------------------------------------------------
  public boolean isEmpty()  // true if stack is empty
   {
   return (top == -1);
   }
//--------------------------------------------------------------
  } // end class StackX
////////////////////////////////////////////////////////////////
class BracketChecker
  {
  private String input;          // input string
//--------------------------------------------------------------
  public BracketChecker(String in)    // constructor
   { input = in; }
//--------------------------------------------------------------
  public void check()
   {
   int stackSize = input.length();   // get max stack size
   StackX theStack = new StackX(stackSize); // make stack
 
   for(int j=0; j<input.length(); j++) // get chars in turn
     {
     char ch = input.charAt(j);    // get char
     switch(ch)
      {
      case '{':           // opening symbols
      case '[':
      case '(':
        theStack.push(ch);     // push them
        break;
 
      case '}':           // closing symbols
      case ']':
      case ')':
        if( !theStack.isEmpty() )  // if stack not empty,
         {
         char chx = theStack.pop(); // pop and check
         if( (ch=='}' && chx!='{') ||
           (ch==']' && chx!='[') ||
           (ch==')' && chx!='(') )//分隔符不匹配
           System.out.println("Error: "+ch+" at "+j);
         }
        else            // prematurely empty
         System.out.println("Error: "+ch+" at "+j);
        break;
      default// no action on other characters
        break;
      } // end switch
     } // end for
   // at this point, all characters have been processed
   if( !theStack.isEmpty() )
     System.out.println("Error: missing right delimiter");
   } // end check()
//--------------------------------------------------------------
  } // end class BracketChecker
////////////////////////////////////////////////////////////////
class BracketsApp
  {
  public static void main(String[] args) throws IOException
   {
   String input;
   while(true)
     {
     System.out.print(
           "Enter string containing delimiters: ");
     System.out.flush();
     input = getString();   // read a string from kbd
     if( input.equals("") )  // quit if [Enter]
      break;
                 // make a BracketChecker
     BracketChecker theChecker = new BracketChecker(input);
     theChecker.check();   // check brackets
     } // end while
   } // end main()
//--------------------------------------------------------------
  public static String getString() throws IOException
   {
   InputStreamReader isr = new InputStreamReader(System.in);
   BufferedReader br = new BufferedReader(isr);
   String s = br.readLine();
   return s;
   }
//--------------------------------------------------------------
  } // end class BracketsApp
////////////////////////////////////////////////////////////////

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

原文鏈接:http://blog.csdn.net/xiaokang123456kao/article/details/54089360

延伸 · 閱讀

精彩推薦
  • JAVA教程Java命名規(guī)范

    Java命名規(guī)范

    本文主要介紹了Java命名規(guī)范。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧...

    王中秋4992020-07-28
  • JAVA教程spring boot和mybatis集成分頁(yè)插件

    spring boot和mybatis集成分頁(yè)插件

    這篇文章主要為大家詳細(xì)介紹了spring boot和mybatis集成分頁(yè)插件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    牛頭人1822020-09-17
  • JAVA教程JAVA中 Spring定時(shí)器的兩種實(shí)現(xiàn)方式

    JAVA中 Spring定時(shí)器的兩種實(shí)現(xiàn)方式

    本文向您介紹Spring定時(shí)器的兩種實(shí)現(xiàn)方式,包括Java Timer定時(shí)和Quartz定時(shí)器,兩種Spring定時(shí)器的實(shí)現(xiàn)方式各有優(yōu)點(diǎn),可結(jié)合具體項(xiàng)目考慮是否采用。 ...

    mrr1832020-01-05
  • JAVA教程JavaI/O深入學(xué)習(xí)之輸入和輸出

    JavaI/O深入學(xué)習(xí)之輸入和輸出

    這篇文章主要介紹了JavaI/O深入學(xué)習(xí)之輸入和輸出,Java類(lèi)庫(kù)中的I/O類(lèi)分成輸入和輸出兩部分,可以在JDK文檔里的類(lèi)層次結(jié)構(gòu)中查看到。,需要的朋友可以參考...

    木瓜芒果4692019-07-07
  • JAVA教程java實(shí)現(xiàn)策略模式使用示例

    java實(shí)現(xiàn)策略模式使用示例

    在使用圖像處理軟件處理圖片后,需要選擇一種格式進(jìn)行保存。然而各種格式在底層實(shí)現(xiàn)的算法并不相同,這剛好適合策略模式。編寫(xiě)程序,演示如何使用...

    java教程網(wǎng)1652019-11-08
  • JAVA教程Jdbc的步驟以及簡(jiǎn)單實(shí)現(xiàn)代碼

    Jdbc的步驟以及簡(jiǎn)單實(shí)現(xiàn)代碼

    下面小編就為大家?guī)?lái)一篇Jdbc的步驟以及簡(jiǎn)單實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧 ...

    java教程網(wǎng)1992020-05-31
  • JAVA教程java中Callback簡(jiǎn)單使用總結(jié)

    java中Callback簡(jiǎn)單使用總結(jié)

    正好學(xué)習(xí)到j(luò)ava Callback,就整理了一下,希望整理的文章內(nèi)容對(duì)大家有所幫助...

    改變自己chenyu2182020-09-09
  • JAVA教程java利用udp實(shí)現(xiàn)發(fā)送數(shù)據(jù)

    java利用udp實(shí)現(xiàn)發(fā)送數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了java利用udp實(shí)現(xiàn)發(fā)送數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    佑佑有話(huà)說(shuō)1282020-07-29
主站蜘蛛池模板: 国产成人亚洲影视在线 | 69re在线观看 | 久久精品国产清白在天天线 | 日韩ab| 多人群p全肉小说 | 日韩国产欧美视频 | 色综合亚洲天天综合网站 | 日本在线小视频 | 国产一级在线免费观看 | 亚洲国产韩国欧美在线不卡 | 国产女主播在线播放一区二区 | 精品视频一区二区观看 | 国产一区二区不卡 | 久久亚洲精品AV无码四区 | 天堂成人在线视频 | 亚洲人成综合在线播放 | yy8090韩国日本三理论免费 | 久久中文字幕综合不卡一二区 | chinesespanking网站 | 精品国产一区二区三区在线观看 | 天天黄视频 | 国产精品视频免费视频 | 四虎国产一区 | 日日摸日日添日日透 | 射逼视频 | 好男人好资源在线观看 | 女同学用白丝脚玩我的故事 | 91麻豆精品国产自产在线观看 | 天堂在线看| s0e一923春菜花在线播放 | 日韩高清在线高清免费 | www.色婷婷.com | 高清欧美不卡一区二区三区 | 2021久久| 天堂资源8中文最新版 | 久久青青草原精品国产软件 | sxx免费看视频在线播放 | 欧美久久热 | 好大好深受不了了快进来 | 欧美性xxx狂流白浆 欧美性f | 国产亚洲一区二区三区 |