一、括号的匹配问题
这玩意太简单了没什么讲头,就是括号一个一个进栈,匹配就出,以此类推
二、括号匹配问题代码
int isMatched(char left, char right)
{
if (left == '('&& right == ')')
return 1;
else if (left =='[' && right == ']')
return 1;
else if (left =='{' && right == '}')
return 1;
else
return 0;
}
int isFarenthesesBalanced(char exp[])
{
char s[maxSize];
int top = -1;
for (int i = 0; exp[i] != '\0'; ++i)
{
if (exp[i] =='(' || exp[i] == '[' || exp[i] == '{')
s[++top] = exp[i];
if (exp[i] ==')' || exp[i] == ' ]' || exp[i] == '} ')
{
if (top==-1)
return 0;
char left= s[top--];
if (isMatched(left, exp[i]) == 0)
return 0;
}
if (top == -1)
{
return 0;
}
return 1;
}
三、栈的计算问题
简化为:
F(m) = mF(m/3)
=m
(m/3^1)*
F(m/3^2)……………………
这个过程为什么要用栈?
我们每次要把展开的因子压入栈中就能实现这个过程,递归函数实际上就是用栈来实现的,没办法题目会这样搞人
int calF(int m)
{
int cum = 1;//累×的初值
int s[maxSize], top = -1;
while (m != 0)
{
s[++top]==m;
m /= 3;
// m = m/ 3;
}
while (top != -1)
{
cum *= s[top--];
}
return cum;
}