中缀表达式转化为后缀表达式
#include<iostream> #include<string> #include<cstring> using namespace std; typedef struct StackNode* LStack; struct StackNode { char data; LStack next; }; void InitStack(LStack &s) { s = NULL; } void Creat(LStack &s, char a) { LStack p = new StackNode; p->data = a; p->next = s; s = p; } void Pop(LStack &s) { LStack q; q = s; s = s->next; delete q; } char GetTop(LStack &s) { if (s == NULL) return NULL; return s->data; } int f(char s)//优先级 { int p; if (s == '*' || s == '/') p = 2; else if (s == '+' || s == '-') p = 1; return p; } int main() { string s; while (cin >> s && s != "=") { LStack q; InitStack(q);//中间结果 LStack p;//运算符 InitStack(p); for (int i = 0; i < s.size(); i++) { if (s[i] >= '0'&&s[i] <= '9') { Creat(q, s[i]); } else { if (s[i] == '(') Creat(p, s[i]); else if (s[i] == ')') { while (GetTop(p) != '(') { Creat(q, GetTop(p)); Pop(p); } Pop(p); } else { if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') { while (1) { int pp = f(s[i]);//得到优先级 if (GetTop(p) == '(' || p == NULL) { Creat(p, s[i]); break; } else { int qq = f(GetTop(p)); if (qq <pp) { Creat(p, s[i]); break; } else if (pp <=qq) { Creat(q, GetTop(p)); Pop(p); } } } } else if (s[i] == '=') { while (p) { Creat(q, GetTop(p)); Pop(p); } } } } } char t[1000]; int count = 0; for (int i = 0;; i++) { t[i] = GetTop(q); Pop(q); count++; if (q == NULL) break; } for (int i = count - 1; i > 0; i--) { cout << t[i]; } cout << t[0] << endl; } return 0; }
错误原因:
1、没有考虑到运算符栈空的时候,运算符怎么push
2、当s[i]是运算符的时候,而且和p栈顶元素的优先级一样的话,怎么处理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码