栈与队列应用:计算前缀表达式的值
Posted zhenglijie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈与队列应用:计算前缀表达式的值相关的知识,希望对你有一定的参考价值。
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。 输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、/以及运算数,不同对象(运算数、运算符号)之间以空格分隔。 输出前缀表达式的运算结果,保留小数点后1位,或错误信息ERROR。 输入格式:+ + 2 * 3 - 7 4 / 8 4 输出格式:13.0 #include<stdio.h> #include<stdlib.h> #include<ctype.h> //isdit函数 #include<math.h> //fabs函数 求绝对值 #define MAXSIZE 100 typedef double ElemType; typedef struct { ElemType *base; ElemType *top; int StackSize; }sqStack; void InitStack(sqStack *s) { s->base = (ElemType *)malloc(sizeof(ElemType) * MAXSIZE); if(!s->base) { exit(0); } s->top = s->base; s->StackSize = MAXSIZE; } void Push(sqStack *s, ElemType e) { if(s->top - s->base == s->StackSize) { exit(0); } *(s->top) = e; s->top++; } void Pop(sqStack *s, ElemType *e) { if(s->top == s->base) { return; } *e = *--(s->top); } int main(void) { sqStack sq; char sl[30]; char c; double d,e; int i,len,k; int sum; char str1[10]; //缓冲区 char str2[10]; int count = 0; int tem; int flag = 0; InitStack(&sq); //初始化 gets(sl); for(i=0; sl[i]; i++); //测量长度 len = i; tem = len; i = 1; while(tem) { c = sl[len-i]; while( isdigit(c) || c==‘.‘) //缓冲区 { str1[count++] = c; str1[count] = ‘