括号匹配
//括号的匹配
int matching()
{
Stack s;
InitStack(s);
int flag = 1;
char ch[10] = "[(]]#";
//读入
//cin >> ch;
int i = 0;
while (ch[i] != '#' && flag != 0)//假设字符串以#结尾
{
if (ch [i] == '(' || ch[i] == '[')
{
PushbackStack(s, ch[i]);//入栈
}
if (ch[i] == ')' || ch[i] == ']')
{
if (IsEmpty(s))
{
flag = 0;
break;
}
//判断是否匹配并将栈顶元素出栈
ElemType tmp = StackTop(s);
flag = ISMatch(tmp, ch[i]);
}
i++;
//读入下一个字符
//cin >> ch;
}
//如果栈空且flag=1,则匹配成功
if (IsEmpty(s) && flag == 1)
return OK;
return ERROR;
}
int ISMatch(char tmp,char ch)
{
if ((tmp == '(' && ch == ')') || (tmp == '[' && ch == ']'))
return OK;
else
return ERROR;
}
表达式求值
原理:
图片来自《数据结构》严蔚敏 李冬梅 吴伟民 编著
【算法描述】
//优先级比较>——1,';
else if (flag == 0)
return '=';
else if (flag == -1)
return '> ch;
PushbackStack(OPTR, ch);
cin >> ch;
while (ch!='#'||Stac服务器托管网kTop(OPTR)!='#')
{
if (isdigit(ch))
{
PushbackStack(OPND, ch-48);//将字符转为数字,如果是ch,结果为-1
cin >> ch;
}
else
{
//PushbackStack(OPTR, ch);
//获取栈顶元素并比较
char c1 = StackTop(OPTR);
char c = PriorityComparison(c1, ch);
switch (c)
{
case'>':
//弹出两个数字
//int b = Popback(OPND);
//int a = Popback(OPND);
c1=Popback(OPTR);//符号出栈
PushbackStack(OPND, calculating(Popback(OPND),
c1, Popback(OPND)));//计算结果并入栈
break;
case'> ch;
服务器托管网 break;
case'=':
//弹出栈顶的‘(’
Popback(OPTR);
cin >> ch;
break;
}
}
}
return (int)StackTop(OPND);
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 技术栈 SpringBoot+Mybatis+Thymeleaf+Bootstrap+Shiro …