久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: C語言利用棧的FILO特性實現(xiàn)括號匹配檢測 [打印本頁]

作者: hahajiajun    時間: 2018-8-27 17:35
標題: C語言利用棧的FILO特性實現(xiàn)括號匹配檢測
    括號匹配檢測:例如{ 9 * [2(x+6) ] },需要檢測右邊的 )、 ]、}是否與左邊的括號匹配。

    原理:把上述方程存入一個字符數(shù)組當中,存儲完畢后遍歷數(shù)組,當遇到左括號時就PUSH入棧;當遇到右括號時就POP出棧,比較此時的右括號與此時POP出棧的左括號是否匹配。

    優(yōu)化:利用棧的FILO特性(逆序)和數(shù)組(正序)可以實現(xiàn):把上面的方程中的左括號都存入一個字符棧當中,右括號都存入一個字符數(shù)組當中,可以節(jié)約遍歷存放方程的數(shù)組的時間。

    typedef struct
    {
        DataType *base, *top;
        int stacksize;
    }STA;

    int Match( STA *STACK, char *Str )       //定義匹配函數(shù)。char *Str 是存放方程的數(shù)組
    {
        int i;
        int Marker = 1;                      //定義一個標志符
        for(i = 0;Str[ i] != '\0';i++)
        {
            switch( Str[ i] )                 //跳躍性的選擇可以用siwtch()函數(shù)
            {
                   case '(': PUSH( &STACK,Str[ i] );
                            break;
                   case '{':
[ i][ i][ i] PUSH( &STACK,Str[ i] );[ i]
                            break;
                   case '[': PUSH( &STACK,Str[ i] );[ i]
                            break;
                  case ')': if( POP( &STACK ) != '(' )
                                Marker = 0;  //如果Marker為零,
此時它是括號不匹配的標志
                              break;         
                   case '}':
if( POP( &STACK ) != '{' )
                                
Marker = 0;
                              break;
                   case ']': if( POP( &STACK ) != '[' )
                                
Marker = 0;
                              break;
                   default :  break;

             }
             if( !Marker )    break;          //如果Marker有一次為0,說明已經(jīng)不匹配了,下面的匹
                                              //配已經(jīng)沒有必要進行了,直接跳出循環(huán)節(jié)省時間
        }
        if( IsEmpty(STACK) == 1 && Marker )   //考慮在沒有左括號的情況下卻出現(xiàn)了右括號的情況
            return 1;                         //如果為1就是匹配,為0就不匹配
        else
            return 0;
    }



    這里還需要有一個模塊思維:就是把一些很簡單的功能分別用一個函數(shù)表示,把它封裝起來。比如IsEmpty函數(shù),可以都封裝起來,這樣功能就很簡潔明了了。
    IsEmpty(STA STACK )
    {
        return STACK.base == STACK.top;
    }
[ i]




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美日韩在线一区二区 | 密乳av| heyzo在线观看| 欧美成人精品一区二区 | 草草视频在线 | 国产日韩欧美综合 | www.欧美精品 | 午夜88| 特级黄色大片 | 精品福利在线 | 国语对白做受69 | 国产一级特黄 | 日韩av影片 | 欧美专区在线观看 | 日本人做爰全过程 | 性爱一级视频 | 91在线亚洲 | 国产小视频在线观看 | 三级在线看 | 国产一级片免费 | 精品日韩在线 | 日韩一区二区中文字幕 | 亚洲国产一区二区三区 | 欧美一级淫片免费视频魅影视频 | 欧美日韩a | 日韩av一区二区三区四区 | 9l视频自拍九色9l视频成人 | 国产盗摄一区二区 | 欧美性色网 | 亚洲成人黄色 | 新av在线 | 在线亚洲天堂 | 亚洲三级在线 | 双性呜呜宫交受不住了h | 国产一区二区不卡 | 免费观看一区二区 | 99精品视频免费观看 | 亚洲欧美视频在线观看 | 亚洲福利网站 | 精品国产视频 | 亚洲精品小视频 |