栈的经典三题:
1、逆波兰式计算(需要一个数字栈)
2、中缀表达式转逆波兰式(需要一个运算符栈)
3、中缀表达式计算(需要一个数字栈和一个运算符栈)
本题是上面的第二题,难度适中,需要用到一个运算符栈
代码中为了判断当前字符是否为字母,自己编写了一个isAlpha()函数,其实也可以直接调用头文件里的isalpha()
函数进行判断。
另外,编写了一个isLower(x,y)函数,用来判断两个运算符的优先性,如果x<y,返回true
编写了isEqual(x,y)函数,判断两个运算符优先级是否相等
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef char ElemType; //由于是运算符栈,此处用char型
typedef struct node
{
ElemType val;
struct node* next;
}SNode,*Stack;
void init(Stack &s)
{
s = (Stack)malloc(sizeof(SNode));
s->next = NULL;
}
bool isEmpty(Stack &s)
{
return (s->next == NULL);
}
void push(Stack &s