数据结构中用栈实现表达式的计算
2012-07-20 00:00
429 查看
#include <stdio.h> #include <stdlib.h> #include <string.h> #define STACK_SIZE 64 typedef int datatype; typedef struct _seq_stack_ { datatype data[STACK_SIZE]; int top; int size; }seqstack; seqstack *creat_stack(void) { seqstack *p = (seqstack *)malloc(sizeof(seqstack)); memset(p,0,sizeof(seqstack)); p->top = -1; p->size = STACK_SIZE; return p; } void annul_stack(seqstack *stack) { if(stack == NULL) return ; free(stack); } int full_stack(seqstack *stack) { if(NULL == stack) return -1; return (stack->top >= stack->size - 1); } int empty_stack(seqstack *stack) { if(NULL == stack) return -1; return (stack->top < 0); } int push_stack(seqstack *stack, datatype value) { if(NULL == stack) return -1; if(full_stack(stack)) return 1; stack->data[++ stack->top] = value; return 0; } datatype pop_stack(seqstack *stack) { if(NULL == stack) return 0; if(empty_stack(stack)) return 0; return stack->data[stack->top --]; } datatype get_top(seqstack *stack) { if(NULL == stack) return 0; return stack->data[stack->top]; } int priority(char opt) { switch(opt) { case '+': case '-': return 1; case '*': case '/': return 2; default: return 0; } } datatype comput_data(datatype opd1,datatype opd2,char opt) { switch(opt) { case '+': return opd1 + opd2; case '-': return opd1 - opd2; case '*': return opd1 * opd2; case '/': return opd1 / opd2; default: return 0; } } void proc_data(seqstack *operand, seqstack*operator, char opt) { datatype opd1,opd2,result; while(!empty_stack(operator) && priority(opt) <= priority(get_top(operator))) { opd2 = pop_stack(operand); opd1 = pop_stack(operand); result = comput_data(opd1,opd2,pop_stack(operator)); printf("the result is : %d\n",result); push_stack(operand,result); } push_stack(operator,opt); } int main() { char expr[STACK_SIZE] = {0}; datatype result = 0, sum = 0; datatype opd1 = 0, opd2 = 0; char *p = expr; seqstack *operand = creat_stack(); seqstack *operator = creat_stack(); gets(expr); puts(expr); while(*p != '\0') { if(*p >= '0' && *p <= '9') { sum = 0; while(*p >= '0' && *p <= '9') sum = sum * 10 + *p ++ - '0'; push_stack(operand,sum); } else proc_data(operand,operator,*p ++); } puts("-----------------------"); while(!empty_stack(operator)) { opd2 = pop_stack(operand); opd1 = pop_stack(operand); result = comput_data(opd1,opd2,pop_stack(operator)); push_stack(operand,result); } printf("the result is : %d\n",get_top(operand)); return 0; }
相关文章推荐
- 数据结构中用C#实现“表达式计算”
- 【数据结构】用栈实现的简单计算器(先转换为后缀表达式、可以计算带括号的)
- 【数据结构】用栈实现对后缀表达式的计算
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 栈实现表达式计算【数据结构】
- 数据结构习作之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (技术含量少许)
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (转载)
- 数据结构实现中缀表达式到后缀表达式,再到计算出结果的代码
- 数据结构中用C#实现"表达式计算"
- 数据结构—中缀表达式转后缀表达式算法及实现—栈的应用—计算表达式(C++代码实现)(1)
- [转载]数据结构中用C#实现"表达式计算"
- 用C++程序实现复杂表达式的计算问题
- 使用XtraReport的CalculatedFiled(计算字段)实现RDLC报表中表达式
- Python3实现逆波兰表达式计算
- JAVA实现一个简单的代数运算语言编译器(四)-- 表达式计算
- 借用栈实现表达式的转换与计算
- 利用API 实现字符串表达式的计算
- 数据结构Java实现——①栈-->栈的应用三、算术表达式求值
- java实现计算字符串表达式
- java实现中缀表达式转后缀表达式并且计算