久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
C語言利用棧的FILO特性實現括號匹配檢測
[打印本頁]
作者:
hahajiajun
時間:
2018-8-27 17:35
標題:
C語言利用棧的FILO特性實現括號匹配檢測
括號匹配檢測:例如{ 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]
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久激情网
|
麻豆久久久9性大片
|
狠狠躁18三区二区一区
|
av大片
|
欧美亚洲国产日韩
|
精品成人免费一区二区在线播放
|
jizz在线看片
|
国产高清久久久
|
91精品国产色综合久久不卡98口
|
欧美美女一区二区
|
国产成人一区二区三区精
|
狠狠操狠狠干
|
欧美乱淫视频
|
翔田千里一区二区
|
国产成人av在线
|
日韩精品在线观看视频
|
成人h动漫亚洲一区二区
|
男女羞羞视频免费
|
精品国产乱码久久久久久88av
|
欧美精品在线免费观看
|
久久精品久久久久久
|
男女羞羞视频在线看
|
亚洲欧洲在线观看视频
|
美国一级片在线观看
|
欧一区二区
|
亚洲成人在线免费
|
成人午夜视频在线观看
|
国产一区二区三区在线
|
久综合
|
一区二区三区在线播放
|
av一区二区三区四区
|
婷婷开心激情综合五月天
|
毛片免费观看视频
|
久久伊人青青草
|
国产在线a
|
亚洲精品9999久久久久
|
观看av
|
波多野结衣中文字幕一区二区三区
|
日韩国产一区二区
|
国产成人在线视频免费观看
|
久久国产欧美日韩精品
|