用栈实现简单的四则运算
来源:互联网 发布:初学者怎么买笛子知乎 编辑:程序博客网 时间:2024/05/16 13:00
#include<stdio.h>#include<stdlib.h>#define OK 10000#define ERROR 10001struct node{int data;struct node *next;};typedef struct node Node;struct stack{Node *top;int count;};typedef struct stack Stack; int InitStack(Stack *S){S->top = NULL;S->count = 0; return OK;}int EmptyStack(Stack *S){return (S->count == 0) ? OK : ERROR;}int Push(Stack *S,int e){ Node *p = (Node *)malloc(sizeof(Node)); if(NULL == p) { return ERROR; } p->data = e; p->next = S->top; S->top = p; S->count++; return OK;}int GetTop(Stack *S){ if(NULL == S->top) { return ERROR; } return (S->top->data);}int Priority(char s){switch(s){case'(':return 3;case'*':case'/':return 2;case'+':case'-':return 1;default:return 0;}}int Pop(Stack *S){int e;if(NULL == S->top){ return ERROR; } Node *p = S->top; e = p->data; S->top = p->next; free(p); S->count--;return e;}int main(){Stack num, opt;char str[100] ={0};int i = 0,tmp = 0,j;if (InitStack(&num) !=OK || InitStack(&opt) !=OK){printf("Init Failure!\n");exit(1);}printf("Please Input Operator:\n");scanf("%s",str);while(str[i] !='\0' || EmptyStack(&opt) !=OK){if (str[i] >= '0' && str[i] <='9'){tmp = tmp * 10 + str[i] - '0';i++;if (str[i] < '0' || str[i] >'9'){Push(&num,tmp);tmp = 0;}}else{if ((EmptyStack(&opt) ==OK) || (GetTop(&opt)=='(' && str[i] !=')')|| //进栈不运算(Priority(str[i])>Priority(GetTop(&opt)))){Push(&opt,str[i]);i++;continue;}if (GetTop(&opt)=='(' && str[i] ==')') //出栈不运算{Pop(&opt);i++;continue;}if ((str[i]=='\0' && EmptyStack(&opt) !=OK) || (str[i]==')' && GetTop(&opt) !='(')|| //出栈运算(Priority(str[i])<=Priority(GetTop(&opt)))){switch(Pop(&opt)){case '+':Push(&num,Pop(&num)+Pop(&num));break;case '-':j = Pop(&num);Push(&num,Pop(&num)-j);break;case '*':Push(&num,Pop(&num)*Pop(&num));break;case '/':j = Pop(&num);Push(&num,Pop(&num)/j);break;}continue;}}}printf("The result is :%d\n",Pop(&num));return 0;}
优先级高于栈顶才能进栈
遇到右括号,栈顶出来,左右括号消失
优先级小于等于栈顶,栈顶出栈
阅读全文
0 0
- 用栈实现简单的四则运算
- 栈实现简单的四则运算表达式
- 用java实现简单四则运算的算法
- 用c++简单实现四则运算
- 用栈实现四则运算
- 数据结构之简单四则运算表达式求值8-(栈的实现)
- 栈实现简单计算器的四则运算(STL)
- 用switch-case语句实现两个数的简单四则运算
- 用栈实现整型数据的四则运算
- 栈的应用--简单四则运算
- 很简单的C++实现四则运算
- 【TDD】实现简单的四则运算V2.0
- Linux实现四则运算的简单方法
- 简单工厂模式实现粗略的四则运算
- c#实现简单四则运算
- Java实现简单四则运算
- java 四则运算 栈的实现
- java 四则运算 栈的实现
- jupyter另存为py文件时:nbconvert failed: 'utf8' codec can't decode byte 0xc0 in position 96: invalid start
- MR-Job
- 获取+导入JDK各版本源码的方法
- HDU 2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包基础题)
- AttributeError: module 'networkx' has no attribute 'draw_graphviz'解决方案
- 用栈实现简单的四则运算
- MySQL ODBC驱动安装和配置数据源
- C++ 指针、引用、const
- LeetCode #567 Permutation in String
- 初学32的看过来
- HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数
- D Floor problem(FZU 2104)
- [JavaScript/基础入门二/每天一点点]
- Java的异常处理