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

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

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|

服務器之家 - 編程語言 - JAVA教程 - java 數據結構中棧結構應用的兩個實例

java 數據結構中棧結構應用的兩個實例

2020-11-05 15:51想作會飛的魚 JAVA教程

這篇文章主要介紹了java 數據結構中棧結構應用的兩個實例的相關資料,需要的朋友可以參考下

java 數據結構結構應用的兩個實例

1、單詞逆序。

 要求從控制臺讀入一串字符,按回車結束輸入,同時顯示其逆序字符串。

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

?
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//定義了棧的基本結構和操作
  {
  private int maxSize;//棧最大值
  private char[] stackArray;//棧內用數組存儲數據
  private int top;//當前棧頂標號,從0開始
//--------------------------------------------------------------
  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("") )    // 若沒有輸入字符串直接按回車,則結束
      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.分隔符匹配

有些分割符在編程中一定是成對出現的,例如(),{},和[]等。如果發現有未匹配的分隔符,編譯器會報錯。因為匹配操作采取就近原則,后輸入的分割符優先匹配,具有“后進先出”的特點。這個匹配操作可以用棧來實現。

具體操作是在輸入過程中,如果遇到左匹配符,則將左匹配符壓入棧中。如果遇到右匹配符,則從棧中取出一個數據,分析其與右匹配符是否相匹配。若匹配,則繼續進行,若不匹配,則報錯終止。

?
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
////////////////////////////////////////////////////////////////

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

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

延伸 · 閱讀

精彩推薦
  • JAVA教程Java命名規范

    Java命名規范

    本文主要介紹了Java命名規范。具有一定的參考價值,下面跟著小編一起來看下吧...

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

    spring boot和mybatis集成分頁插件

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

    牛頭人1822020-09-17
  • JAVA教程JAVA中 Spring定時器的兩種實現方式

    JAVA中 Spring定時器的兩種實現方式

    本文向您介紹Spring定時器的兩種實現方式,包括Java Timer定時和Quartz定時器,兩種Spring定時器的實現方式各有優點,可結合具體項目考慮是否采用。 ...

    mrr1832020-01-05
  • JAVA教程JavaI/O深入學習之輸入和輸出

    JavaI/O深入學習之輸入和輸出

    這篇文章主要介紹了JavaI/O深入學習之輸入和輸出,Java類庫中的I/O類分成輸入和輸出兩部分,可以在JDK文檔里的類層次結構中查看到。,需要的朋友可以參考...

    木瓜芒果4692019-07-07
  • JAVA教程java實現策略模式使用示例

    java實現策略模式使用示例

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

    java教程網1652019-11-08
  • JAVA教程Jdbc的步驟以及簡單實現代碼

    Jdbc的步驟以及簡單實現代碼

    下面小編就為大家帶來一篇Jdbc的步驟以及簡單實現代碼。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    java教程網1992020-05-31
  • JAVA教程java中Callback簡單使用總結

    java中Callback簡單使用總結

    正好學習到java Callback,就整理了一下,希望整理的文章內容對大家有所幫助...

    改變自己chenyu2182020-09-09
  • JAVA教程java利用udp實現發送數據

    java利用udp實現發送數據

    這篇文章主要為大家詳細介紹了java利用udp實現發送數據,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    佑佑有話說1282020-07-29
主站蜘蛛池模板: 国产成人网| 一级一片在线播放在线观看 | 欧美成人免费在线视频 | 奇米一区二区三区 | 亚洲成人免费观看 | 日韩精品在线观看视频 | 国产成人av一区 | 日韩欧美专区 | 国产精品一码二码三码在线 | 黄色永久网站 | 综合久久99 | 色噜 | 在线观看免费av网 | 99精品欧美一区二区三区 | 日韩精品一区二区三区中文字幕 | 欧美黄视频在线观看 | 高清国产一区二区三区四区五区 | 综合色导航| 欧美在线视频一区 | 久久丝 | 天天澡天天狠天天天做 | 免费黄色网止 | 中文字幕在线一区二区三区 | 久久免费公开视频 | 91在线视频在线 | 成人二区| 国产精品香蕉 | 吴梦梦到粉丝家实战华中在线观看 | 色九九九 | 成人av免费 | 91精品国产综合久久香蕉的用户体验 | 日产一区二区 | 91婷婷射 | 日日日日干干干干 | 日韩欧美大片在线观看 | 538在线 | 在线免费观看av的网站 | 午夜寂寞少妇aaa片毛片 | 看一级片 | 激情欧美日韩一区二区 | 免费黄色小视频 |