栈实际上就只有一个核心的理念---先进后出(即符合先进后出的特征的场景都适合栈结构)
目录
什么是栈
栈栈,线性表的一种特殊的存储结构。与学习过的线性表的不同之处在于栈只能从表的固定一端对数据进行插入和删除操作,另一端是封死的。
应用场景举例
题目:写一个程序判断括号是否匹配正确?
例如{()}、{[([])]}都是符合要求的,而([)]就是不符合要求的;
核心思想:
将左括号依次压入进栈,当遇到右括号时,与栈顶的左括号匹配,若匹配成功,则弹出栈;这样可以看出,先压入栈的左括号后出栈,即先进后出;采用栈结构
若最后栈不空,即代表符合规范;反之则不符合规范。
代码展示:
#include <stdio.h>
#include<string.h>
// 判断左右括号是否匹配 例如 ( 匹配 )
bool Ismatch(char l, char r)
{
if ((l == '(' && r == ')') || (l == '{' && r == '}') || (l == '[' && r == ']'))
{
return true;
}
else
{
return false;
}
}
// 判断输入的括号序列是否符合规范
bool IsTrue(char a[101])
{
char s[101];
int top = 0;
int n = strlen(a);
// 依次进栈,先进后出
for(int i = 0; i < n; i++)
{
if (Ismatch(s[top], a[i]))
{
top--;
}
else{
s[++top] = a[i];
}
}
//最后判断栈是否为空
if (top == 0){
return true;
}
else{
return false;
}
}
int main(){
char a[101];
gets(a);
bool res = IsTrue(a);
printf("%d", res);
return 0;
}