首页 > 代码库 > 栈的操作实现逆波兰表达式的计算
栈的操作实现逆波兰表达式的计算
代码如下:
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #define STACK_INIT_SIZE 20 #define STACKINCREMENT 10 #define MAXBUFFER 10 typedef double ElemType; typedef struct { ElemType *base; ElemType *top; int StackSize; }sqStack; void InitStack(sqStack *s){ s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); if( !s->base ){ exit(0); } s->top = s->base; s->StackSize = STACK_INIT_SIZE; } void push(sqStack *s,ElemType e) { if( s->top - s->base >= s->StackSize){ s->base = (ElemType *)realloc(s->base,(s->StackSize+STACKINCREMENT)*sizeof(ElemType)); if( !s->base ){ exit(0); } } *(s->top) = e; s->top++; } void pop(sqStack *s,ElemType *e){ if( s->top == s->base){ return; } *e = *--(s->top); } int Stacklen(sqStack s){ return (s.top-s.base); } int main() { sqStack s; char c; double d,e; char str[MAXBUFFER]; int i=0; InitStack( &s ); printf("请按逆波兰表达式输入待计算数据,数据与计算符之间用空格隔开,以#作为结束标志:\n"); scanf("%c",&c); while( c!=‘#‘ ) { while( isdigit(c) || c==‘.‘ ) { str[i++] = c; str[i] = ‘\0‘; if ( i>=10 ) { printf("出错,输入的单个数据过大!\n"); return -1; } scanf("%c",&c); if ( c==‘ ‘ ){ d = atof(str); push(&s,d); i=0; break; } } switch( c ) { case ‘+‘: pop(&s,&e); pop(&s,&d); push(&s,d+e); break; case ‘-‘: pop(&s,&e); pop(&s,&d); push(&s,d-e); break; case ‘*‘: pop(&s,&e); pop(&s,&d); push(&s,d*e); break; case ‘/‘: pop(&s,&e); pop(&s,&d); if ( e!=0 ){ push(&s,d/e); } else{ printf("\n出错,除数为零\n"); return -1; } break; } scanf("%c",&c); } pop(&s,&d); printf("最后的结果为:%f\n",d); return 0; }
栈的操作实现逆波兰表达式的计算
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。