顺序栈实现括号匹配的检验(C语言实现)【栈】
生活随笔
收集整理的這篇文章主要介紹了
顺序栈实现括号匹配的检验(C语言实现)【栈】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 原理說明
- 算法思路
- 代碼演示
原理說明
假設表達式中允許括號嵌套,則檢驗括號是否匹配的方法可用“期待的急迫程度”這個概念來描述。
我們下面給和例子進行說明:
可能出現的不匹配的情況:
① 盼來的右括號不是所“期待”的;
② 到來的是“不速之客” (右括號多);
③ 到結束也未盼來所“期待”的括號 (左括號多)。
算法思路
1)凡出現左括號,則進棧;
2)凡出現右括號,首先檢查棧是否空。
若棧空,則表明該“右括號”多余;
否則和棧頂元素比較,
若相匹配,則“左括號出棧”,
否則表明不匹配。
3)表達式檢驗結束時,
若棧空,則表明表達式中匹配正確,
否則表明“左括號”有多余的。
代碼演示
#include <stdio.h> #include <string.h> #include <malloc.h>bool isValid(const char* s);int main() {const char* tmp= "()[]{}";if (isValid(tmp))printf("ok\n");elseprintf("no\n");return 0; } bool isValid(const char* s) {int len = strlen(s);if (len % 2 != 0)return false;char tmp = 0;char* stack = (char *)malloc(len * sizeof(char));int pos = -1;for (int i = 0; i < len; i++){if (s[i] == '{' || s[i] == '[' || s[i] == '('){pos++;stack[pos] = s[i];}else{if (pos < 0)return false;tmp = stack[pos];if (s[i] == '}'){if (tmp != '{')return false;elsepos--;}if (s[i] == ']'){if (tmp != '[')return false;elsepos--;}if (s[i] == ')'){if (tmp != '(')return false;elsepos--;}}}if (pos < 0)return true;return false;}運行結果
總結
以上是生活随笔為你收集整理的顺序栈实现括号匹配的检验(C语言实现)【栈】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 顺序栈实现表达式求值(C语言实现)【栈】
- 下一篇: 栈的动态顺序存储和实现(C语言)【栈】(