久久久久久久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精品视频免费观看
|
亚洲欧美视频在线观看
|
亚洲福利网站
|
精品国产视频
|
亚洲精品小视频
|