zoukankan      html  css  js  c++  java
  • 学生练习:中缀表达式求值

    #include<iostream>
    #define MAXSIZE 20
    #define OK 1
    #define ERROR 0
    using namespace std;
    typedef struct stack {
    	char *elem;
    	int top;
    } Sqstack;
    void initstack(Sqstack &S)
    {
    	S.elem=new char[MAXSIZE];
    	S.top=-1;
    }
    int push(Sqstack &S,char e)
    {
    	if(S.top==MAXSIZE-1)
    		return ERROR;
    	S.elem[++S.top]=e;
    	return OK;
    }
    int pop(Sqstack &S,char &e)
    {
    	if(S.top==-1)
    		return ERROR;
    	e=S.elem[S.top--];
    	return OK;
    }
    char Getop(Sqstack S)
    {
    	return S.elem[S.top];
    }
    char precede(char ch1,char ch2)
    {
    	if(ch1=='#'&&(ch2=='+'||ch2=='*'))
    		return '<';
    	if(ch2=='#'&&(ch1=='*'||ch1=='+'))
    		return '>';
    	if(ch1=='('&&(ch2=='+'||ch2=='*'))//改为<
    		return '<';
    	if(ch2=='('&&(ch1=='+'||ch1=='*'))
    		return '<';
    	if(ch2==')'&&(ch1=='+'||ch1=='*'))
    		return '>';
    	if(ch1==')'&&(ch2=='+'||ch2=='*'))//这里是== 
    		return '<';
    	if(ch1=='+'&&ch2=='*')
    		return '<';
    	if(ch1=='*'&&ch2=='+')
    		return '>';
    	if(ch1=='+'&&ch2=='+')
    		return '>';
    	if(ch1=='*'&&ch2=='*')
    		return '>';
    	if(ch1=='('&&ch2==')')
    		return '=';
    	if(ch1=='#'&&ch2=='(')
    		return '<';
    }
    int In(char ch)
    {
    	if(ch=='*'||ch=='+'||ch=='('||ch==')'||ch=='#')//
    		return 1;
    	else
    		return 0;
    }
    char operate(char ch1,char ch2,char ch3)
    {
    	char res;
    	switch(ch2) {
    		case '+':
    			res=(ch1-'0')+(ch3-'0')+'0';
    			break;
    		case '*':
    			res=(ch1-'0')*(ch3-'0')+'0';
    			break;
    	}
    	return res;
    }
    char fun(Sqstack &num,Sqstack &poster)
    {
    	initstack(num);
    	initstack(poster);
    	push(poster,'#');
    	char ch;
    	char theta;
    	char ch1,ch2;
    	char ch3;
    	cout<<"请输入:";
    	cin>>ch;
    	while(ch!='#'||Getop(poster)!='#') {
    		if(!In(ch)) {
    			push(num,ch);
    			cin>>ch;
    		} else
    			switch(precede(Getop(poster),ch)) {
    				case '<':
    					push(poster,ch);
    					cin>>ch;
    					break;
    				case '>': 
    					pop(poster,theta);
    					pop(num,ch1);
    					pop(num,ch2);
    					push(num,operate(ch1,theta,ch2));
    					break;
    				case '=':
    					pop(poster,ch3);
    					cin>>ch;
    					break;
    			}
    	}
    	return Getop(num);
    }
    int main()
    {
    	Sqstack num,poster;
    	char sub;
    	sub=fun(num,poster);
    	cout<<"表达式的值为:";
    	cout<<sub-'0';
    	cout<<endl;
    	system("pause");
    	return 0;
    }
    

      

  • 相关阅读:
    Django REST framework+Vue 打造生鲜超市(十二)
    pymsql
    (四)Jmeter系列之---http接口请求脚本优化
    (三)Jmeter系列之---实现一个简单的http接口请求
    2021每天一个知识点(二月)
    (二)Jmeter系列之---Jmeter工具介绍
    (一)Jmeter系列之---性能测试+工具介绍
    Linux磁盘的分区操作
    Python格式化处理json数据的方式
    (17)-Python3之--文件操作
  • 原文地址:https://www.cnblogs.com/ewitt/p/14626109.html
Copyright © 2011-2022 走看看