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

          真正的快樂來源于創造

            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)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 繁昌县| 阳曲县| 新郑市| 信宜市| 定兴县| 西畴县| 郓城县| 剑河县| 买车| 郑州市| 云霄县| 霍邱县| 普兰店市| 勃利县| 江西省| 平泉县| 迁安市| 堆龙德庆县| 永嘉县| 崇礼县| 德昌县| 利辛县| 陇西县| 桂阳县| 宿迁市| 门头沟区| 绿春县| 抚远县| 得荣县| 达拉特旗| 沐川县| 潜山县| 永福县| 申扎县| 乌拉特前旗| 顺义区| 五原县| 芜湖市| 睢宁县| 沧州市| 天祝|