您的位置:首页 > 其它

中缀表达式转后缀表达式

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: