Infix to posfix 自己写stack,没有()

#include<iostream>
#include<string>
using namespace std;

template<typename Type>
struct Node
{
	Type data;
	Node<Type>*next;
};

template<typename Type>
class Stack
{
private:
	Node<Type>*head;
public:
	//构造函数
	Stack()
	{
		head = new Node<Type>;
		head->next = NULL;
	}
	//析构函数	 
	~Stack()
	{
		delete head;
	}
	//判空
	bool isEmpty()
	{
		if (head->next == NULL)
			return true;
		return false;
	}

	//入栈
	void push(Type item)
	{
		Node<Type>*p = new Node<Type>;
		p->data = item;
		p->next = head;
		head = p;
	}

	//出栈	 
	void pop()
	{
		if (isEmpty())
			return;
		else
		{
			Node<Type>*p = head;
			head = p->next;
			delete p;
		}
	}

	//取栈顶
	char top()
	{
		return head->data;
	}
};

//优先级判断
char compare(char opt, char si)
{
	if ((opt == '+' || opt == '-') && (si == '*' || si == '/'))
		return '<';
	else if (opt == '#')
		return '<';
	return '>';
}

//判断是否为运算符
bool isOp(char c)
{
	if (c == '+' || c == '-' || c == '*' || c == '/')
		return true;
	return false;
}

int main()
{
	Stack<char>op;
	Stack<char>num;
	op.push('#');
	num.push('#');

	string s;
	cin >> s;

	for (int i = 0; i<s.size(); i++)
	{
		if (!isOp(s[i]))
			num.push(s[i]);
		else
		{
			char c = compare(op.top(), s[i]);
			if (c == '<')
				op.push(s[i]);
			else
			{
				num.push(op.top());
				op.pop();
				op.push(s[i]);
			}
		}
	}

	while (op.top() != '#')
	{
		num.push(op.top());
		op.pop();
	}

	string s1 = "";

	while (num.top() != '#')
	{
		s1 = s1 + num.top();
		num.pop();
	}

	for (int i = 0; i<s1.size() / 2; i++)
	{
		char temp = s1[i];
		s1[i] = s1[s1.size() - 1 - i];
		s1[s1.size() - 1 - i] = temp;
	}

	cout << s1 << endl;

	return 0;
}

  

原文地址:https://www.cnblogs.com/KennyRom/p/5940652.html