括号匹配算法实现

来源:百度知道 编辑:UC知道 时间:2024/06/27 05:58:53
问题:假设一个算术表达式中包含圆括号,方括号和花括号三中类型的括号,编写一个判断表达式中括号是否正确配对的程序。
分析:在本题中可以使用一个堆栈来解决这个问题。
本题使用一个栈来解决这个问题,将‘(’,‘[’,‘{’入栈,当遇到‘}’,‘]’,)‘时,检查当前的栈顶元素是否为对应‘(’,‘[’,‘{’,如果是,则出栈,否则不匹配,当整个算术表达式检查完毕时栈为空,表达括号匹配,否则不匹配。
只用C语言

#include <stdio.h>
int Match(char *str)
{
char stack[1000];
int top;
top=-1;
while (*str)
{
if (*str=='(' || *str=='[' || *str=='{') char[++top]=*str;
else
{
if (top<0 || stack[top]+1!=*str) return 0;
top--;
}
str++;
}
if (top>=0) return 0;
return 1;
}

main()
{
char *str1="{{{[[[]]]}}}()()(())";
char *str2="((())";
if (Match(str1)) puts("string 1 matches");
else puts("string 1 not match");
if (Match(str2)) puts("string 2 matches");
else puts("string 2 not match");
}