利用栈 做一个简单的计算器系统
来源:互联网 发布:穿越火线交易软件 编辑:程序博客网 时间:2024/05/25 05:36
#include <stdio.h>#include <stdlib.h>#define OK 1000001#define ERROR 1000002struct 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(p == NULL) { 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("result is %d\n",Pop(&num)); return 0;}
阅读全文
0 0
- 利用栈 做一个简单的计算器系统
- 利用java做一个简单的计算器
- 利用java做一个简单的计算器
- 利用java做一个简单的计算器
- 做一个简单的计算器
- swift做一个简单的计算器
- 用arduino做一个简单的计算器
- 用javascript做一个简单的计算器
- 做一个iOS的简单计算器
- 做一个iOS的简单计算器(二)
- O-C-11-利用类方法做一个简单的计算器
- 利用javascript写一个简单的计算器
- 利用jdbc做的一个简单系统(接上一篇)
- 利用栈做的中缀计算器雏形
- 学习到的做一个简单的计算器
- Stuts2 使用DispatchAction做一个简单的计算器
- Stuts2 使用DispatchAction做一个简单的计算器
- Stuts2 使用DispatchAction做一个简单的计算器
- 大数据学习1——大数据概述
- solr6简单搭建 solr7可以
- SpringBoot项目以jar包的方式导出
- 会飞的小鸟
- 2017年11月30日 15:20:35 小记
- 利用栈 做一个简单的计算器系统
- LeetCode--Construct Binary Tree from Inorder and Postorder Traversal
- 机器学习之集体智慧编程(1):推荐物品
- python中列表和字典排序
- eclipse快捷汇总
- 解决psycopg2的安装问题
- iOS11 前端适配遇到的坑
- leetcode 686. Repeated String Match
- 问题记录