数据结构阶段二(2)
2021/7/6 23:36:23
本文主要是介绍数据结构阶段二(2),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这一次我采用了链栈来实现,基本思路和上一个版本一模一样,把数据类型换为了string,也是只支持纯数字
点击查看代码
#include<iostream> #include<string> using namespace std; // 链栈的存储结构 typedef struct StackNode { string date; struct StackNode* next; } StackNode, * LinkStack; // 链栈的初始化 int InitStack(LinkStack& S) { S = NULL; //将栈顶指针置空 return 1; } int Push(LinkStack& S, string e) { LinkStack p; p = new StackNode; if (!p) exit(0); p->date = e; p->next = S; S = p; return 0; } //出栈 int Pop(LinkStack& S, string& e) { LinkStack p; p = new StackNode; if (S == NULL) return 1; e = S->date; p = S; S = S->next; delete p; return 0; } int Linklength(LinkStack S) { int num = 0; LinkStack q = S; while (q) { num++; q = q->next; } return num; } string noX(string num1, string num2, string oper) { int num_1, num_2, mid1; string mid; num_1 = atoi(num1.c_str()); num_2 = atoi(num2.c_str()); //开始计算最优先的lisp子表达式 if (oper.compare("+") == 0) { mid1 = num_1 + num_2; mid = to_string(mid1); } else if (oper.compare("-") == 0) { mid1 = num_2 - num_1; mid = to_string(mid1); } else if (oper.compare("*") == 0) { mid1 = num_1 * num_2; mid = to_string(mid1); } else if (oper.compare("/") == 0) { mid1 = num_2 / num_1; mid = to_string(mid1); } else { printf("表达式有误(不识别的运算符)"); return false; } return mid; } int count(LinkStack &numStack, LinkStack& operStack, string &mid) { int length1 = Linklength(numStack); int length2 = Linklength(operStack); string num1, num2, oper; if (length1 <= 1 || length2 == 0) { cout << "error" << endl; } else { Pop(numStack, num1); Pop(numStack, num2); Pop(operStack, oper); if (num1.find("x") == string::npos && num2.find("x") == string::npos) { mid = noX(num1, num2, oper); } if (num1.find("x") != string::npos && num2.find("x") == string::npos) { } } } int main() { LinkStack numStack, operStack; InitStack(numStack); InitStack(operStack); string mid; char str[200]; gets_s(str); int length = strlen(str); for (int i = 0; i < length; i++) { if (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/') { string str(1, str[i]); Push(operStack, str); } else if (str[i] == '(') { continue; } else if (str[i] == ',') { continue; } else if (str[i] == ')') { count(numStack, operStack, mid); Push(numStack, mid); int length1 = Linklength(numStack); int length2 = Linklength(operStack); if (length1 <= 1 && length2 == 0) { cout << mid << endl; } } else if (str[i] >= '0' && str[i] <= '9') { string str1(1, str[i]); while (true) { if (str[i + 1] >= '0' && str[i + 1] <= '9') { string str2(1, str[i+1]); str1 = str1 + str2; i++; } else { break; } } Push(numStack, str1); } else if (str[i] == 'x') { string str(1, str[i]); Push(numStack, str); } else { break; } } }
这篇关于数据结构阶段二(2)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)