日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

顺序栈实现括号匹配的检验(C语言实现)【栈】

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 顺序栈实现括号匹配的检验(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语言实现)【栈】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。