C语言栈括号匹配算法
生活随笔
收集整理的這篇文章主要介紹了
C语言栈括号匹配算法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、C語言棧括號匹配算法
部分函數(shù)的調(diào)用,請參考:https://blog.csdn.net/qq_50504109/article/details/120330818
一起加油兄弟姐妹們!!!沖沖沖
/** * 思想很簡單就是左括號進棧,遇到右括號的時候,就把棧頂元素取出,然后匹配,然后對結(jié)果進行不用的處理* 括號匹配算法:* 匹配失敗的可能:* 1、左括號多于有括號:這個時候會出現(xiàn)棧已經(jīng)空了,但是字符組數(shù)還沒有掃描結(jié)束;* 2、右括號多于左括號:這個時候會出現(xiàn)棧還有剩余,但是字符數(shù)組已經(jīng)掃描完了;* 3、左括號和右括號不是同一個類型*/#include<stdio.h> #include"InstanceSqeStack.c"int main() {void BreacketMatch(SqeStack *s, char str[]);char str[] = {'(', ')', '{', '[', '}',']', '}','}'};SqeStack *s = InitStack();BreacketMatch(s,str); }void BreacketMatch(SqeStack *s, char *str) {int Match(char left,char rigth);char x = '\0'; //x 是用來記錄出棧的內(nèi)容// 字符竄數(shù)組結(jié)束的標(biāo)記是遇到'\0',所以結(jié)束條件時 str[i] != '\0'哦;for (int i = 0; str[i]!='\0'; i++) {switch (str[i]) {case '(':case '[':case '{':push(s,str[i]);break; // 因為只要是左括號都需要進棧,所以寫到上面三行的下面最好case ')':case ']':case '}':if (isEmpty(s)){ //如果是空的話,返回1printf("右括號多余!\n");return;}else{pop(s,&x);if (Match(x,str[i])){// 如果匹配成功,什么都不用做,因為我是先出棧}else{printf("左右括號類型匹配不成功!\n");return;}}}}//到最后還是要判斷一下的,因為上面只有兩種情況我們判斷了,還差一種左括號多余if (isEmpty(s)){printf("匹配成功!\n");}else{printf("左括號匹配多余!!\n");}}int Match(char left,char rigth){//判斷左右括號是不是同一個類型if (left == '(' && rigth == ')'){return 1;}else if (left == '[' && rigth == ']'){return 1;}else if (left == '{' && rigth == '}'){return 1;}else{return 0;}}總結(jié)
以上是生活随笔為你收集整理的C语言栈括号匹配算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言源程序的基础单位,c源程序的基本单
- 下一篇: 匹配算法