作业帮 > 综合 > 作业

栈和队列问题算法假设一个人算术表达式包含圆括弧、中括弧和花括弧三种类型的括弧,编写一个判别表达式中括弧是否正确匹配的算法

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/16 13:08:37
栈和队列问题算法
假设一个人算术表达式包含圆括弧、中括弧和花括弧三种类型的括弧,编写一个判别表达式中括弧是否正确匹配的算法.
栈和队列问题算法假设一个人算术表达式包含圆括弧、中括弧和花括弧三种类型的括弧,编写一个判别表达式中括弧是否正确匹配的算法
算法不好, 也没做很多的测试, 很可能有BUG, 你再测试测试
其实更好的办法是做一个栈
#include
int main (int argc, char **argv)
{
char ch;//存储一个字符
char arrch[256];//存储多个字符
int num = -1;//指向arrch的最后一个字符
while ((ch = getchar ()) != '\n')
{
//如果输入的字符是(、[、{ 压入数组中
if (ch == '(')
arrch[++num] = ch;
if (ch == '[')
arrch[++num] = ch;
if (ch == '{')
arrch[++num] = ch;
//如果是)、]、}先判断num是否小于0, 如果小于0则肯定是错误的
//如果不小于0再看最后一个字符是否和刚输入的对应,如果不对应也是错的
//如果对应则num向前移一位
if (ch == ']')
{
if (num < 0 || arrch[num] != '[')
{
printf ("Error");
return 1;
}
--num;
}
if (ch == ')')
{
if (num < 0 || arrch[num] != '(')
{
printf ("Error");
return 1;
}
--num;
}
if (ch == '}')
{
if (num < 0 || arrch[num] != '{')
{
printf ("Error");
return 1;
}
--num;
}
}
//num不为-1则表明有不对应的括号
if (num == -1)
{
printf ("OK!");
}
else
{
printf ("Error");
}
getchar ();
return 0;
}