若你掌握以下知识,你可以更好地理解此篇文章:
1.C语言基本语法。
2.栈的核心思想与栈的构建。
分割线/
相信看此篇文章的朋友很多是从书本过来的,书本那段描述真的晦涩难懂,什么紧迫性123456的,什么被需要,被满足。。。。我这里先简单说一下括号匹配的思路是怎么样的。括号匹配有点像俄罗斯方块,或者消消乐,怎么说呢,我给大家用图演示一个过程就知道了
1.首先准备一个数组装要匹配的括号们,再准备一个栈。

2.然后把数组内第一个括号丢入栈里

3.丢了以后是这样

4.再丢数组内第二个括号

5.丢数组内第三个

6.丢第四个

7.丢第五个

发现匹配,然后就消消乐

消除后:

8.丢第六个

9.丢第七个

发现匹配,需要消除:

消除后:

9.丢第八个括号

发现匹配,消除,这里就不圈出来了。消除后的:

10.丢第九个括号入栈:

匹配,消除:

11.丢第10个括号入栈

匹配,消除:

现在栈是空的了,证明括号匹配。读者可以按这个思路,在草稿纸上拿其他括号序列来实验一下。
——————分割线——————
接下来给大家讲解一下写程序的思路:
1.首先把装括号序列的数组写上
#include<stdio.h>
#include <string.h>
#define length 100int main(){char array[length] = {'[','(','[',']','[',']',')',']'};
}
2.再创建一个栈
#include<stdio.h>
#include <string.h>
#define length 100char *top; //指针,指向栈顶的char push(char bracket) //压栈操作
{top = top+1;*(top) = bracket;
}void pop() //出栈操作,待会匹配的时候,调用这个函数把匹配的两个括号弹出
{top = top-2;
}int main(){char array[length] = {'[','(','[',']','[',']',')',']'}; char stack[length];
}
3.把核心函数补全:
#include<stdio.h>
#include <string.h>
#define length 30
char *top;
char push(char bracket)
{top = top+1;*(top) = bracket;
}
void pop()
{top = top-2;
}
int main(){
//先写一个数组char array[length] = {'[','(','[',']','[',']',')',']'}; //创建一个数组装括号序列 char stack[length]; //数组,用来做栈的空间 int stack_length = strlen(array); //计算数组里的括号个数,待会控制for轮次的时候用的 top = stack - 1; //先把top指向栈的-1层。可能有人会问,不是一开始要指向栈的0吗?因为待会压栈的时候正好 -1 + 1 = 0,指向0,正好可以往stack[0]里面赋值 for(int i = 0;i<stack_length;i++) //循环 { push(array[i]); //还记得刚刚的流程演示吗?无论如何,每一个步骤都先把数组里的括号压入栈里 if(array[i] == ']'){ //如果压入的是 ] 号, if(*(top-1) == '['){ //就在当前位置往下一个单位判断有没有 [ 号,如果有,就弹出栈 pop();}}if(array[i] == ')'){if(*(top-1) == '('){pop();}}if(array[i] == '}'){if(*(top-1) == '{'){pop();}}} if(top == stack-1){printf("括号匹配"); }else{printf("括号不匹配");}
}
///至此教程结束///
如果这篇教程帮到你,可以点赞支持一下,非常感谢 ( ̄▽ ̄)"















