括號匹配 逆波蘭函式(棧)

2021-08-26 05:52:32 字數 1349 閱讀 1173

1.括號匹配

int isbrackets(char ch)//判斷括號函式

' == ch))

return0;}

void matchbrackets(const

char *str)

ch = stacktop(&s);

if (!(('(' == ch && ')' == str[i])

|| ('[' == ch && ']' == str[i])

|| ('' == str[i])))//檢測當前括號是否與棧頂括號匹配

stackpop(&s);}}

}if (stackempty(&s))

printf("括號匹配正確!\n");

else

printf("左括號比右括號多!!!\n");

}int main()

";//左右括號次序匹配不正確

char b = "(()))abc";//右括號比左括號多

char c = "(()()abc";//左括號比右括號多

char d = "(())abc";//左右括號匹配正確

matchbrackets(a);

matchbrackets(b);

matchbrackets(c);

matchbrackets(d);

system("pause");

return

0;}

程式輸出結果:

2.逆波蘭函式

//12 3 4 + * 6 - 8 2 / +

//列舉

enum ;

//定義乙個結構體分別存放符號和資料

typedef

struct rpn

rpn;

int _rpn(rpn *p, int size)

else

//為其他則說明是符號,將棧中元素出棧,先出的為右運算元

}p++;

}return stacktop(&s);

}int main()

, , ,

, , , ,

, , , };

int size = sizeof(p) / sizeof(p[0]);

printf("%d\n", _rpn(p, size));

system("pause");

return

0;}

程式輸出結果為:8

棧應用 括號匹配和逆波蘭表示式

stack宣告見前文 括號匹配 匹配串類似 abc 思路 乙個指標遍歷串,如是左括號入棧,右括號則出棧並於當前指標比較是否匹配。再指標指向 0,並且棧為空時才是匹配模式 匹配成功返回1 int match brackets const char string stack s init s 考慮左括號...

利用棧解決括號匹配和逆波蘭表示式

當我們學習了棧這種資料結構滯後,我們就可以利用棧來解決一些實際問題。這裡是我們給出的動態順序棧的實現 template class t class stack void push const t data void pop bool empty t top t top const size t si...

棧解決 括號匹配問題和逆波蘭表示式

所需知識 棧 字串 思路分析 有如下四組字串 如何檢測左右括號順序與個數是否匹配 char a abc char b abc char c abc char d abc 1 解決 1 當讀到乙個左括號的字元,包括 時,檢測棧頂元素是否為與之匹配的左括號,若是,證明這一對括號匹配,將這個左括號出棧繼續...