数据结构设计~《表达式求值》!

来源:百度知道 编辑:UC知道 时间:2024/04/29 04:49:57
[问题描述] 当用户输入一个合法的算术表达式后,能够返回正确的结果。能够计算的运算符包括:加、减、乘、除、括号;能够计算的操作数要求在实数范围内;对于异常表达式能给出错误提示。
[设计步骤]
1首先置操作数栈为空栈,表达式起始符#为运算符栈的栈底元素;
2依次扫描表达式中每个字符,若是操作数则进OPND栈;若是运算符,则和OPTR栈的栈顶运算符比较优先权后作相应操作,直至整个表达式求值完毕。
3先做一个适合个位的+-*/运算, 其次就要考虑到对n位和小数点的运算。
[测试数据]
(1)请输入您所求的表达式
3*(7-2)+5
多项式的结果是: 20
(2)请输入您所求的表达式
3.154*(12+18)-23
多项式的结果是: 71.62
---------------------------------------
如果满意了给加分!!!!!!

#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10

typedef struct {
char *base;
char *top;
int stacksize;
} stack; //字符栈

int InitStack(stack *s) { //初始化栈
s->base = (char *)malloc(STACK_INIT_SIZE * sizeof(char));
if (!s->base) {
exit(1);
} else {
s->top = s->base;
s->stacksize = STACK_INIT_SIZE;
}
}

char GetTop(stack *s) { //用e返回栈顶元素
if (s->base == s->top) {
printf("栈已空\n");
} else {
return(*(s->top - 1));
}
}

void Pop(stack *s, char *e) { //返回栈顶元素,注意此处e的值需要改变,因该使用指针
if (s->base == s->top) {
printf("栈已空\n");
} else {
*e = *--s->top;
}
}

int Push(stack *s, char e) { //将e入栈
if (s->top - s->base >= s->stacksize) {
s->base = (char *)rea