一.有效的括号
1.题目描述

2.思路分析
第一步,遍历字符串,把遇到每个左括号给入栈,若遇到相同类型的右括号,则立刻出栈。
第二步,如果遍历完后字符串,最后栈中的元素不为空,则返回false。否则返回true。
特别注意的是如果给定的字符串为空,也要返回true。
最后也要销毁栈的结构,释放内存
3.代码实现
其中的一些栈的常见函数已经给出
bool isValid(char * s){
ST st;
StackInit(&st);//初始化栈
while(*s)
{
if(*s=='{'||*s=='['||*s=='(')
{
//入栈 左括号
StackPush(&st,*s);
++s;
}
else
{
if(StackEmpty(&st))
{
StackDestroy(&st);
return false;
}
STDataType top=StackTop(&st);
//获取栈顶的元素
StackPop(&st);
//判断左括号和字符串中的右括号类型否相同
if((*s=='}'&&top!='{')
||(*s==']'&&top!='[')
||(*s==')'&&top!='('))
{
//不同,销毁栈并且返回false
StackDestroy(&st);
return false;
}
else
{
//相同,则继续遍历,直到遍历完为止
++s;
}
}
}
//用ret接受最后的栈是否为空
bool ret=StackEmpty(&st);
StackDestroy(&st);
//为空返回true
return ret;
}
该文章介绍了如何使用栈数据结构来判断一个字符串中的括号是否有效。通过遍历字符串,遇到左括号入栈,遇到右括号时检查栈顶的左括号是否匹配,不匹配则返回false。遍历结束后,栈为空则返回true,表示所有括号都已正确匹配。
3062

被折叠的 条评论
为什么被折叠?



