','>','','', '>','>"/> ','>','','', '>','>"/>
首页 【原创精品】数据结构实验程序(c语言) 栈的应用(普通计算器)

【原创精品】数据结构实验程序(c语言) 栈的应用(普通计算器)

举报
开通vip

【原创精品】数据结构实验程序(c语言) 栈的应用(普通计算器)【原创精品】数据结构实验程序(c语言) 栈的应用(普通计算器) #include"stdio.h" #include"stdlib.h" #include"string.h" #include"math.h" #define STACK_INIT_SIZE 50 #define STACK_INCREMENT 10 char OptrSet[8]={'+','-','*','/','(',')','^','#'}; char prior[8][8]={ '>','>','','', '>','>...

【原创精品】数据结构实验程序(c语言) 栈的应用(普通计算器)
【原创精品】数据结构实验程序(c语言) 栈的应用(普通计算器) #include"stdio.h" #include"stdlib.h" #include"string.h" #include"math.h" #define STACK_INIT_SIZE 50 #define STACK_INCREMENT 10 char OptrSet[8]={'+','-','*','/','(',')','^','#'}; char prior[8][8]={ '>','>','<','<','<','>','<','>', '>','>','<','<','<','>','<','>', '>','>','>','>','<','>','<','>', '>','>','>','>','<','>','<','>', '<','<','<','<','<','=','<',' ', '>','>','>','>',' ','>','>','>', '>','>','>','>','<','>','>','>', '<','<','<','<','<',' ','<','=' }; typedef struct{ char *top; char *base; int size; }OptrStack; typedef struct{ float *top; float *base; int size; }OpndStack; char GetTop_Optr(OptrStack S){ if(S.base!=S.top) return *(S.top-1); else{ printf("ERROR!\n"); return -1; } } float GetTop_Opnd(OpndStack S){ if(S.base!=S.top) return *(S.top-1); else{ printf("ERROR!\n"); return -1; } } void Push_Optr(OptrStack *S,char e){ if(S->top-S->base>=S->size){ S->base=(char *)realloc(S->base,(S->size+STACK_INCREMENT)*sizeof(char)); S->top=S->base+S->size; S->size+=STACK_INCREMENT; } *(S->top)=e; S->top++; return; } void Push_Opnd(OpndStack *S,float e){ if(S->top-S->base>=S->size){ S->base=(float *)realloc(S->base,(S->size+STACK_INCREMENT)*sizeof(float)); S->top=S->base+S->size; S->size+=STACK_INCREMENT; } *(S->top)=e; S->top++; return; } char Pop_Optr(OptrStack *S){ if(S->base==S->top) return -1; S->top--; return *(S->top); } float Pop_Opnd(OpndStack *S){ if(S->base==S->top) return -1; S->top--; return *(S->top); } int LocateOptr(char c){ int i; for(i=0;i<8;i++){ if(c==OptrSet[i]) return i; } return -1; } int In(char c){ int i,find=0; for(i=0;i<8;i++){ if(c==OptrSet[i]) find=1; } return find; } char Precede(char op1,char op2){ return prior[LocateOptr(op1)][LocateOptr(op2)]; } float Operate(float a, char theta, float b){ switch(theta){ case '+':return a+b; case '-':return a-b; case '*':return a*b; case '/':return a/b; case '^':return pow(a,b); default:return 0; } } int main(){ OptrStack *pOptr,Optr; OpndStack *pOpnd,Opnd; char *c,exp[50],x=0,theta=0,temp[10]="\0",cat[2]; int i=0; float a=0,b=0,data; Optr.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char)); Optr.top=Optr.base; Optr.size=STACK_INIT_SIZE; Opnd.base=(float *)malloc(STACK_INIT_SIZE*sizeof(float)); Opnd.top=Opnd.base; Opnd.size=STACK_INIT_SIZE; pOptr=&Optr; pOpnd=&Opnd; Push_Optr(pOptr,'#'); //initialization scanf("%c",&x); while(x!='#'){ exp[i]=x; scanf("%c",&x); i++; } exp[i]='#'; //input expression c=exp; while(*c!='#'||GetTop_Optr(Optr)!='#'){ if(!In(*c)){ cat[0]=*c; cat[1]='\0'; strcat(temp,cat); c++; if(In(*c)){ data=(float)atof(temp); strcpy(temp,"\0"); Push_Opnd(pOpnd,data); } } else switch(Precede(GetTop_Optr(Optr),*c)){ case '<':Push_Optr(pOptr,*c); c++; break; case '=':Pop_Optr(pOptr); c++; break; case '>':theta=Pop_Optr(pOptr); b=Pop_Opnd(pOpnd); a=Pop_Opnd(pOpnd); Push_Opnd(pOpnd,Operate(a,theta,b)); break; } } printf("ÔËËã?á?û?º%f\n",GetTop_Opnd(Opnd)); }
本文档为【【原创精品】数据结构实验程序&#40;c语言&#41; 栈的应用&#40;普通计算器&#41;】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_044822
暂无简介~
格式:doc
大小:20KB
软件:Word
页数:0
分类:高中语文
上传时间:2017-09-02
浏览量:18