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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3222|回復: 0
打印 上一主題 下一主題
收起左側

C語言利用棧的FILO特性實現括號匹配檢測

[復制鏈接]
跳轉到指定樓層
樓主
ID:390214 發表于 2018-8-27 17:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    括號匹配檢測:例如{ 9 * [2(x+6) ] },需要檢測右邊的 )、 ]、}是否與左邊的括號匹配。

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

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

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

    int Match( STA *STACK, char *Str )       //定義匹配函數。char *Str 是存放方程的數組
    {
        int i;
        int Marker = 1;                      //定義一個標志符
        for(i = 0;Str[ i] != '\0';i++)
        {
            switch( Str[ i] )                 //跳躍性的選擇可以用siwtch()函數
            {
                   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,說明已經不匹配了,下面的匹
                                              //配已經沒有必要進行了,直接跳出循環節省時間
        }
        if( IsEmpty(STACK) == 1 && Marker )   //考慮在沒有左括號的情況下卻出現了右括號的情況
            return 1;                         //如果為1就是匹配,為0就不匹配
        else
            return 0;
    }



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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频免费看 | 一级aaaaaa毛片免费同男同女 | 一区二区中文 | www.毛片| 蜜桃视频在线观看免费视频网站www | 精品久久久久久久久久久 | 亚洲乱码国产乱码精品精的特点 | 天堂中文在线观看 | 日韩国产欧美一区 | 日本福利视频 | 欧美午夜久久 | 日韩精品一区二区三区中文在线 | 亚洲精品一二三区 | 99热精品国产 | 国产精品久久久久久久午夜片 | 97在线超碰| av一级一片 | 网色 | 久在线视频播放免费视频 | 婷婷久| 亚洲精品电影网在线观看 | 欧美13videosex性极品 | 国产区久久| 日韩中文字幕视频在线观看 | 久久久久国产精品 | 国产分类视频 | 日韩一区中文字幕 | av福利网站 | 色精品视频 | 欧美在线色视频 | 操人视频在线观看 | 四色永久| 久久久www成人免费无遮挡大片 | 九九热九九 | 国产精品久久一区 | 又黄又色 | 日韩精品一区在线 | 久久久婷 | 久久精品国产免费一区二区三区 | 国产精品一区二区三区在线 | 日韩在线一区二区三区 |