c語言通過棧判斷括號匹配是否配對
更新時間:2023年09月22日 09:16:25 作者:gnip
前面實(shí)現(xiàn)了棧的基本數(shù)據(jù)結(jié)構(gòu),這里來做一個聯(lián)系,用棧來解決一道比較常見的算法題,就是括號配對是否滿足規(guī)則,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
實(shí)現(xiàn)
描述
給定一組括號,判斷是否滿足配對。
代碼
#include<stdio.h> #include<assert.h> #include<stdlib.h> #define bool char #define true 1 #define MAX_LEN 10 #define false 0 typedef char ElementType; typedef struct Stack { int top; ElementType stackList[MAX_LEN]; } Stack; bool fn(char arr[], int len, Stack* S); bool push(Stack* S, ElementType data); bool pop(Stack* S, ElementType* x); bool intStack(Stack* S); int main() { Stack S; intStack(&S); char brackList[] = {'(', '{','(',')','}','{','}','}' }; printf("%d", fn(brackList, sizeof(brackList) / sizeof(brackList[0]), &S)); } bool fn(char arr[], int len, Stack* S) { for (int i = 0; i < len; i++) { if (arr[i] == '{' || arr[i] == '(') { push(S,arr[i]); printf("%c", arr[i]); } else { if (S->top == 0) { return false; } ElementType topData; pop(S, &topData); if (topData == '(' && arr[i] != ')') { return false; } else if (topData == '{' && arr[i] != '}') { return false; } } } if (S->top == 0) { return true; } return false; } //初始化 bool intStack(Stack* S) { for (int i = 0; i < MAX_LEN; i++) { S->stackList[i] = 0; } S->top = 0; return true; } //入棧 bool push(Stack* S,ElementType data) { S->top++; S->stackList[S->top] = data; return true; } //出棧 bool pop(Stack* S, ElementType *x) { *x = S->stackList[S->top]; S->stackList[S->top] = 0; S->top--; return true; }
到此這篇關(guān)于c語言通過棧判斷括號匹配是否配對的文章就介紹到這了,更多相關(guān)c語言判斷是否配對內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
學(xué)生成績管理系統(tǒng)C語言代碼實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了C語言代碼實(shí)現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01詳解C++ 拷貝構(gòu)造函數(shù)和賦值運(yùn)算符
本文主要介紹了拷貝構(gòu)造函數(shù)和賦值運(yùn)算符的區(qū)別,以及在什么時候調(diào)用拷貝構(gòu)造函數(shù)、什么情況下調(diào)用賦值運(yùn)算符。最后,簡單的分析了下深拷貝和淺拷貝的問題。有需要的朋友可以看下2016-12-12C++面試八股文之STL標(biāo)準(zhǔn)模板庫使用詳解
這篇文章主要為大家介紹了C++面試八股文之STL標(biāo)準(zhǔn)模板庫使用詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06淺析string 與char* char[]之間的轉(zhuǎn)換
與char*不同的是,string不一定以NULL('\0')結(jié)束。string長度可以根據(jù)length()得到,string可以根據(jù)下標(biāo)訪問。所以,不能將string直接賦值給char*2013-10-10C++實(shí)現(xiàn)假裝藍(lán)屏整蠱小程序
因?yàn)楣ぷ鞯男枰袝r候我們離開時并不想讓別人看到我們電腦的內(nèi)容,所以本文為大家分享了一個基于C++實(shí)現(xiàn)的假裝藍(lán)屏的小程序,需要的可以參考下2023-06-06