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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3196|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

C語言利用棧的FILO特性實(shí)現(xiàn)括號(hào)匹配檢測(cè)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:390214 發(fā)表于 2018-8-27 17:35 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
    括號(hào)匹配檢測(cè):例如{ 9 * [2(x+6) ] },需要檢測(cè)右邊的 )、 ]、}是否與左邊的括號(hào)匹配。

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

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

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

    int Match( STA *STACK, char *Str )       //定義匹配函數(shù)。char *Str 是存放方程的數(shù)組
    {
        int i;
        int Marker = 1;                      //定義一個(gè)標(biāo)志符
        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為零,
此時(shí)它是括號(hào)不匹配的標(biāo)志
                              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)沒有必要進(jìn)行了,直接跳出循環(huán)節(jié)省時(shí)間
        }
        if( IsEmpty(STACK) == 1 && Marker )   //考慮在沒有左括號(hào)的情況下卻出現(xiàn)了右括號(hào)的情況
            return 1;                         //如果為1就是匹配,為0就不匹配
        else
            return 0;
    }



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

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩第一页 | 99精品欧美一区二区蜜桃免费 | 精品国产18久久久久久二百 | 日韩福利| 蜜桃免费av | 亚洲精品在线视频 | 国产一区二区影院 | 成人3d动漫一区二区三区91 | 免费99视频| 亚洲高清在线 | 亚洲最大的成人网 | 国产一区二区精品 | 日韩欧美在线视频播放 | 国产精品久久午夜夜伦鲁鲁 | 欧美日韩在线一区二区 | 国产成在线观看免费视频 | 亚洲看片| 亚洲精品中文字幕 | www.男人天堂.com | 激情欧美一区二区三区 | 成人在线电影在线观看 | 99久久久久久 | 国产内谢 | 国产精品一区二区三区在线 | 成人免费视频 | 久久久国产一区二区三区 | 免费视频一区二区 | 99这里只有精品视频 | www.se91 | 午夜爽爽爽男女免费观看影院 | 精品亚洲91 | 久久国产精品一区二区三区 | 久久精品国产一区二区电影 | 国产一区免费 | 亚洲精品大片 | www国产成人免费观看视频 | 龙珠z国语版在线观看 | 国产高清自拍视频在线观看 | 国产精品一区在线播放 | 色视频在线免费观看 | 精品成人免费一区二区在线播放 |