多项式括号匹配:
#include#include #define STACK_MAX_SIZE 10 //创建栈结构体 typedef struct charStack{ int top; int data[STACK_MAX_SIZE]; }*stackPtr; //输出栈 void outputStack(stackPtr paraStack){ for(int i=0;i<=paraStack->top;i++){ printf("%d ",paraStack->data[i]); } printf("rn"); } //初始化栈 stackPtr initStack(){ stackPtr tempStack=(stackPtr)malloc(sizeof(stackPtr)); tempStack->top=-1; return tempStack; } //入栈 void push(stackPtr stack,int paraValue){ //检查空间 if (stack->top >= STACK_MAX_SIZE - 1) { printf("Cannot push element: stack full.rn"); return; } //update top stack->top++; //添加元素 stack->data[stack->top]=paraValue; } //出栈 int pop(stackPtr stack){ // 空间检查 if (stack->top < 0) { printf("Cannot pop element: stack empty.rn"); return ' '; } //update top stack->top--; //返回栈顶 return stack->data[stack->top+1]; } bool bracketMatch(char *paraString, char paraLength){ //初始化创建栈底 stackPtr tempStack= initStack(); push(tempStack, '#'); char tempChar,tempPopedChar; //start for(int i=0;i 运行结果:
多项式加法:
#include#include #include #include #include using namespace std; stack num; stack op; void eval() { auto b = num.top(); num.pop(); auto a = num.top(); num.pop(); auto c = op.top(); op.pop(); int x; if (c == '+') x = a + b; else if (c == '-') x = a - b; else if (c == '*') x = a * b; else x = a / b; num.push(x); } int main() { unordered_map pr{{'+', 1}, {'-', 1}, {'*', 2}, {'/', 2}}; string str; cin >> str; for (int i = 0; i < str.size(); i ++ ) { auto c = str[i]; if (isdigit(c)) { int x = 0, j = i; while (j < str.size() && isdigit(str[j])) x = x * 10 + str[j ++ ] - '0'; i = j - 1; num.push(x); } else if (c == '(') op.push(c); else if (c == ')') { while (op.top() != '(') eval(); op.pop(); } else { while (op.size() && op.top() != '(' && pr[op.top()] >= pr[c]) eval(); op.push(c); } } while (op.size()) eval(); cout << num.top() << endl; return 0; } 运行结果:
总结:
括号匹配还好,表达式运算确实难到我了,没办法,又分析了一下大佬的代码,总结如下:
当自己在写代码时,总是想到哪里就写到哪里,其实说白了,还是自己的思维逻辑不是很清晰很明了,自己在以后必须多加强自己的思维逻辑训练,不能让自己的思维总是“旋转跳跃”。



