ZBLOG

#include using namespace std; #define MAXSIZE 100 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef struct { char *base; char *top; int stacksize; }SqStack; Status InitStack(SqStack &S) {//初始化栈 S.base=...

你可以修改代码如下:

#include<iostream>
using namespace std;
#define  MAXSIZE  100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct {
    char *base;
    char *top;
    int stacksize;
} SqStack;

Status InitStack(SqStack &S) { //初始化栈
    S.base = new char[MAXSIZE];
    if (!S.base) exit(OVERFLOW);
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return OK;
}

Status Push(SqStack &S, char e) { //入栈
    if (S.top - S.base == MAXSIZE)
        return ERROR;
    *S.top++ = e;
    return OK;
}

Status Pop(SqStack &S) { //出栈
    if (S.top == S.base) return ERROR;
	S.top--;
	return OK;    
}

char GetTop(SqStack S) { //取栈顶元素
	if (S.top == S.base) return ERROR;  
	return *(S.top - 1);   
}

char Precede(char a, char b) { //比较运算符a和b的优先级
	if ((a == '(' && b == ')') || (a == '=' && b == '=')) {
		return '=';
	}
	else if (a == '(' || a == '=' || b == '(' || (a == '+' || a == '-') && (b == '*' || b == '/')) {
		return '<';
	}
	else {
		return '>';
	}
}

void InfixToSuffix(char s[]) { //将中缀表达式转化为后缀表达式并输出 
	SqStack OPTR; //操作符栈

	InitStack(OPTR); //初始化操作符栈

	int i = 0;
	int j = 0;
	char t[100];

	while (s[i] != '\0') {
		if (isdigit(s[i])) {
			t[j++] = s[i++];
		}
		else {
			char e;
			switch (Precede(GetTop(OPTR), s[i])) {
				case '<':
					Push(OPTR, s[i++]);
					break;
				case '=':
					Pop(OPTR);
					i++;
					break;
				case '>':
					e = GetTop(OPTR);
                    Pop(OPTR);
                    t[j++] = e;
			}
		}
    }

	while (OPTR.top != OPTR.base) {
		char e;
        Pop(OPTR);
        t[j++] = e;
    }
    
    t[j] = '\0';

	cout << "后缀表达式为:" << t << endl; //输出后缀表达式
}

int main() {
	char infixExpression[MAXSIZE];
	cout << "请输入中缀表达式:";
	cin >> infixExpression;

	InfixToSuffix(infixExpression);

	return 0;
}

这样,你就可以将中缀表达式转化为后缀表达式并输出了。注意在 Pop 函数中需要将栈顶元素赋值给 e,然后再进行出栈操作。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9654

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?