infixtopostfix.h

来自「上传几个数据结构源代码」· C头文件 代码 · 共 100 行

H
100
字号
#include"SeqStack.h"
#include"Queue.h"
#include"string"
#include"iostream.h"
int isp(const char ch)
{
	int priority;
	switch(ch)
	{
	case'#':priority=0;break;
	case'(':priority=0;break;
	case'+':
	case'-':priority=5;break;
	case'*':
	case'/':priority=6;break;
	}
	return priority;
}
int icp(const char ch)
{
    int priority;
 	switch(ch)
	{
	case'(':priority=8;break;
	case'+':
	case'-':priority=5;break;
	case'*':
	case'/':priority=6;break;
	}
	return priority;
};
int InfixToPostfix(string& p,string* result)
{
 	int i=0;
	int j=0;
	int strlen=p.length();
	//获取操作数和操作副个数
	for(;i<strlen;i++)
	{	if(p[i]<='9'&&p[i]>='0')
		{	for(;p[i]<='9'&&p[i]>='0';i++);
			j++;
		}
	    else  j++; 
	}
	string* result=new string[j];
	SeqStack<string> mStack;
	string tmp="#";
	char ch;
	mStack.Push(tmp);
	for(i=0,j=0;i<strlen;i++)
	{	
		if(p[i]<='9'&&p[i]>='0')
		{
            tmp="";
			for(;p[i]<='9'&&p[i]>='0';i++)
			tmp+=p[i];
			result[j++]=tmp;
		}
		else if(p[i]==')')
		{  
			tmp=mStack.Top();ch=tmp[0];
			while(ch!='(')
			{
				result[j++]=tmp;mStack.Pop();tmp=mStack.Top();ch=tmp[0];
			}
			mStack.Pop();
		}
		else
		{
			tmp=mStack.Top();
            ch=tmp[0];
			if(icp(p[i])>=isp(ch))
			{
				tmp="";tmp+=p[i];mStack.Push(tmp);
			}
			else 
			{
				while(icp(p[i])<isp(ch))
				{
				result[j++]=tmp;
				mStack.Pop();tmp=mStack.Top();ch=tmp[0];
				}
                tmp="";tmp+=p[i];mStack.Push(tmp);
			}
		}
		tmp=mStack.Top();
		while(tmp!="#")
		{
			result[j++]=tmp;
			mStack.Pop();
			tmp=mStack.Top();
		}
	}
	return j-1;
}
int DoOperate(char a,char b,char op)
{
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?