中缀表达式转后缀表达式
2015-05-04 22:03
148 查看
template <class T>
class stack
{
public:
stack(int len = 50)
{
elem = new T[len];
m_top = -1;
}
void Push(const T &val)
{
elem[++m_top] = val;
}
bool isEmpty()
{
return m_top == -1;
}
T& Pop()
{
return elem[m_top--];
}
T& getTop()
{
return elem[m_top];
}
private:
T *elem;
int m_top;
};
int getPriority(char ch)
{
if(ch == '+' || ch == '-')
return 1;
if(ch == '*' || ch == '/')
return 2;
return 0;
}
char* InfixtoSuffixS(char* exp,int len) //中缀转后缀
{
int x = 0;
char *tmpExp = new char[len];
memset(tmpExp,'\0',len);
stack<char> opStack(len);
for(int i = 0;i<len;i++)
{
switch(exp[i])
{
case'(':
opStack.Push(exp[i]);
break;
case ')':
while(opStack.getTop() != '(')
tmpExp[x++] = opStack.Pop();
opStack.Pop();
break;
case '+':case '-': case '*':case '/':
while(!opStack.isEmpty() && opStack.getTop() !='(' &&
getPriority(opStack.getTop()) <= getPriority(exp[i]))
tmpExp[x++] = opStack.Pop();
opStack.Push(exp[i]);
break;
default:
tmpExp[x++] = exp[i];
break;
}
}
while(!opStack.isEmpty())
{
char tmp = opStack.Pop();
if(tmp != '(')
tmpExp[x++] = tmp;
}
return tmpExp;
}
class stack
{
public:
stack(int len = 50)
{
elem = new T[len];
m_top = -1;
}
void Push(const T &val)
{
elem[++m_top] = val;
}
bool isEmpty()
{
return m_top == -1;
}
T& Pop()
{
return elem[m_top--];
}
T& getTop()
{
return elem[m_top];
}
private:
T *elem;
int m_top;
};
int getPriority(char ch)
{
if(ch == '+' || ch == '-')
return 1;
if(ch == '*' || ch == '/')
return 2;
return 0;
}
char* InfixtoSuffixS(char* exp,int len) //中缀转后缀
{
int x = 0;
char *tmpExp = new char[len];
memset(tmpExp,'\0',len);
stack<char> opStack(len);
for(int i = 0;i<len;i++)
{
switch(exp[i])
{
case'(':
opStack.Push(exp[i]);
break;
case ')':
while(opStack.getTop() != '(')
tmpExp[x++] = opStack.Pop();
opStack.Pop();
break;
case '+':case '-': case '*':case '/':
while(!opStack.isEmpty() && opStack.getTop() !='(' &&
getPriority(opStack.getTop()) <= getPriority(exp[i]))
tmpExp[x++] = opStack.Pop();
opStack.Push(exp[i]);
break;
default:
tmpExp[x++] = exp[i];
break;
}
}
while(!opStack.isEmpty())
{
char tmp = opStack.Pop();
if(tmp != '(')
tmpExp[x++] = tmp;
}
return tmpExp;
}
相关文章推荐
- 中缀表达式转换成后缀表达式
- 将中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式及逆波兰式计算
- 后缀表达式与中缀表达式求值
- 中缀表达式转后缀表达式
- 如何把中缀表达式变成后缀表达式
- 中缀表达式转后缀表达式和前缀表达式
- 栈的应用(一)——中缀表达式转后缀表达式
- 课程设计 栈之 后缀表达式求值 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式变成等价的后缀表达式的算法
- NYOJ 257 中缀表达式表示成后缀表达式
- 编写一个程序将后缀表达式转换成中缀表达式
- 中缀表达式转为后缀表达式
- 关于中缀表达式转后缀表达式 然后求值问题的实现
- 中缀表达式与后缀表达式的转化与计算
- 数据结构与算法分析 c++11 练习3.22 中缀表达式转后缀表达式,后缀表达式计算, 多项式计算
- 《数据结构实战》中缀表达式转后缀表达式----栈的应用
- 栈的应用--后缀表达式和中缀表达式的实现
- 简单计算器实现-中缀表达式转后缀表达式求值