當柳上原的風吹向天際的時候...

          真正的快樂來源于創造

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
          注:下文代碼主要來自參考書籍,本人稍稍修改了一下。

          泛型棧類:
          package com.heyang;

          /**
           * 棧數據結構
           * 說明:
           * 作者:何楊(heyang78@gmail.com)
           * 創建時間:2011-1-15 上午07:51:09
           * 修改時間:2011-1-15 上午07:51:09
           
          */
          public class MyStack<T>{
              
          private int size;    // 大小
              private T[] datas;    // 數據
              private int top;    // 棧頂元素下標
              
              @SuppressWarnings(
          "unchecked")
              
          public MyStack(int size){
                  
          this.size=size;
                  datas
          = (T[])new Object[this.size]; 
                  top
          =-1;
              }
              
              
          /**
               * 壓棧
               
          */
              
          public void push(T t){
                  datas[
          ++top]=t;
              }
              
              
          /**
               * 出棧
               * 
               * 說明:
               * 
          @return
               * 創建時間:2011-1-15 上午08:01:15
               
          */
              
          public T pop(){
                  
          return datas[top--];
              }
              
              
          /**
               * 取得棧頂元素
               * 
               * 說明:
               * 
          @return
               * 創建時間:2011-1-15 上午08:02:02
               
          */
              
          public T getTopItem(){
                  
          return datas[top];
              }
              
              
          /**
               * 查看棧是否為空
               * 
               * 說明:
               * 
          @return
               * 創建時間:2011-1-15 上午08:02:38
               
          */
              
          public boolean isEmpty(){
                  
          return top==-1;
              }
          }

          括號檢查類:
          package com.heyang;

          /**
           * 表達式中括號檢查類
           * 說明:
           * 作者:何楊(heyang78@gmail.com)
           * 創建時間:2011-1-15 上午08:05:25
           * 修改時間:2011-1-15 上午08:05:25
           
          */
          public class BracketChecker{
              
          private String input;        // 輸入:待檢查的表達式
              private boolean isValid;    // 是否檢查通過
              private String checkResult;        // 輸出:檢查結果
              
              
          /**
               * 構造函數
               * 
          @param input
               
          */
              
          public BracketChecker(String input){
                  
          this.input=input;
                  
          this.isValid=false;
                  
          this.checkResult="";
                  
                  check();
              }
              
              
          /**
               * 執行檢查
               * 
               * 說明:
               * 創建時間:2011-1-15 上午08:09:25
               
          */
              
          private void check(){
                  
          int length=input.length();
                  MyStack
          <Character> stack=new MyStack<Character>(length);
                  
                  
          for(int i=0;i<length;i++){
                      
          char c=input.charAt(i);
                      
                      
          switch(c){
                          
          case '{':
                          
          case '[':
                          
          case '(':
                              stack.push(c);
                              
          break;
                          
          case '}':
                          
          case ']':
                          
          case ')':
                              
          if(stack.isEmpty()==false){
                                  
          char top=stack.pop();
                                  
                                  
          if( (c=='}' && top!='{'|| (c==']' && top!='['|| (c==')' && top!='(') ){
                                      isValid
          =false;
                                      checkResult
          ="經檢查,表達式'"+input+"'中,位于第"+(i+1)+"的字符‘"+c+"’沒有對應的匹配項";
                                      
          return;
                                  }
                              }
                              
          else{
                                  isValid
          =false;
                                  checkResult
          ="經檢查,表達式'"+input+"'中,位于第"+(i+1)+"的字符‘"+c+"’沒有對應的匹配項";
                                  
          return;
                              }
                              
          break;
                          
          default:
                              
          break;
                      }
                  }
                  
                  
          if(stack.isEmpty()==false){
                      isValid
          =false;
                      checkResult
          ="經檢查,表達式'"+input+"'中右括號缺失,匹配不完整";
                      
          return;
                  }
                  
          else{
                      isValid
          =true;
                      checkResult
          ="經檢查,表達式'"+input+"'中括號匹配無誤.";
                      
          return;
                  }
              }

              
          /**
               * 括號是否匹配
               * 
               * 說明:
               * 
          @return
               * 創建時間:2011-1-15 上午08:39:38
               
          */
              
          public boolean isValid() {
                  
          return isValid;
              }

              
          /**
               * 取得檢查結果
               * 
               * 說明:
               * 
          @return
               * 創建時間:2011-1-15 上午08:39:27
               
          */
              
          public String getCheckResult() {
                  
          return checkResult;
              }
              
              
          public static void main(String[] args){
                  String[] arr
          ={"1+(2/3-4","[1+(2/3-4)]*5","{[1+(2/3-4)]*5+(6+2*3)}*7","{[1+(2/3-4]*5+(6+2*3)}*7"};
                  
                  
          for(String str:arr){
                      BracketChecker c
          =new BracketChecker(str);
                      System.out.println(c.getCheckResult());
                  }
              }
          }

          檢查結果:
          經檢查,表達式'1+(2/3-4'中右括號缺失,匹配不完整
          經檢查,表達式
          '[1+(2/3-4)]*5'中括號匹配無誤.
          經檢查,表達式
          '{[1+(2/3-4)]*5+(6+2*3)}*7'中括號匹配無誤.
          經檢查,表達式
          '{[1+(2/3-4]*5+(6+2*3)}*7'中,位于第11的字符‘]’沒有匹配項


          參考書籍:SAMS的《Java數據結構與算法》第四章

          posted on 2011-01-15 08:49 何楊 閱讀(736) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 红安县| 太原市| 万安县| 丘北县| 湖州市| 肥西县| 高密市| 小金县| 陕西省| 景洪市| 林周县| 洪洞县| 广丰县| 兴安县| 望谟县| 大同市| 兰坪| 澎湖县| 怀安县| 太湖县| 合山市| 嘉峪关市| 西峡县| 瑞昌市| 尚志市| 高陵县| 长汀县| 宁城县| 新源县| 福建省| 句容市| 正定县| 北票市| 靖州| 洛宁县| 分宜县| 连州市| 建瓯市| 库车县| 平陆县| 海林市|