问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用栈对算术表达式求值:3*(7-2),写出栈的操作顺序和过程

发布网友 发布时间:2022-05-10 18:41

我来回答

3个回答

热心网友 时间:2023-10-22 11:01

#include "StdAfx.h"
#include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
#define OVERFLOW 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
char *base;
char *top;
int stacksize;
}SqStack_T;
typedef struct
{
float *base;
float *top;
int stacksize;
}SqStack_N;
void InitStack_T(SqStack_T *S)
{
(*S).base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
if(!(*S).base) exit(OVERFLOW);
(*S).top=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
}
void InitStack_N(SqStack_N *S)
{
(*S).base=(float *)malloc(STACK_INIT_SIZE*sizeof(float));
if(!(*S).base) exit(OVERFLOW);
(*S).top=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
}
char GetTop_T(SqStack_T *S)
{
char e;
if((*S).top==(*S).base)
return ERROR;
e=*((*S).top-1);
return e;
}
float GetTop_N(SqStack_N *S)
{
float e;
if((*S).top==(*S).base)
return ERROR;
e=*((*S).top-1);
return e;
}
char Push_T(SqStack_T *S,char e)
{
if((*S).top-(*S).base>=(*S).stacksize)
{
(*S).base=(char*)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(char));
if(!(*S).base) exit(OVERFLOW);
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACKINCREMENT;
}
*((*S).top)++=e;
return OK;
}
float Push_N(SqStack_N *S,float e)
{
if((*S).top-(*S).base>=(*S).stacksize)
{
(*S).base=(float*)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(float));
if(!(*S).base) exit(OVERFLOW);
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACKINCREMENT;
}
*((*S).top)++=e;
return OK;
}
char Pop_T(SqStack_T *S)
{
char e;
if((*S).top==(*S).base)
return ERROR;
e=*(--(*S).top);
return e;
}
float Pop_N(SqStack_N *S)
{
float e;
if((*S).top==(*S).base)
return ERROR;
e=*(--(*S).top);
return e;
}
char m[10]="+-*/()#";
char n[10][10]={">><<<>>",">><<<>>",">>>><>>",">>>><>>","<<<<<= ",">>>> >>","<<<<< ="};
char Precede(char a,char b)
{
int i=0,j=0;
while(m[i]!=a)
i++;
while(m[j]!=b)
j++;
return(n[i][j]);
}
float Operate(float a,char theta,float b)
{
float r;
switch(theta)
{
case'+':
r=a+b;
break;
case'-':
r=a-b;
break;
case'*':
r=a*b;
break;
case'/':
if(b!=0)r=a/b;
else printf("输入错误!");
break;
}
return r;
}
void main()
{
SqStack_T OPTR;
SqStack_N OPND;
float a,b,i;
char theta,c,x;
InitStack_T(&OPTR);
Push_T(&OPTR,'#');
InitStack_N(&OPND);
printf("请输入表达式并以'#'结尾:\n");
c=getchar();
if(c==35||(c>=40&&c<=43)||c==45||(c>=47&&c<=57))
{
while(c!='#'||GetTop_T(&OPTR)!='#')
{
if(c>=48&&c<=57)
{
i=(float)c-48;
Push_N(&OPND,i);
c=getchar();
}
else
{
switch(Precede(GetTop_T(&OPTR),c))
{
case'<': //栈顶元素优质权低
Push_T(&OPTR,c);
c=getchar();
break;
case'=': //脱括号并接受下一个字符
x=Pop_T(&OPTR);
c=getchar();
break;
case'>': //退栈并将运算结果入栈
theta=Pop_T(&OPTR);
b=Pop_N(&OPND);
a=Pop_N(&OPND);
Push_N(&OPND,Operate(a,theta,b));
break;
}
}
}
printf("结果是%f\n",GetTop_N(&OPND));
c=getchar();
c=getchar();
}
else
printf("输入错误!\n");
}

这个不止3*(7-2)了啦~~~

热心网友 时间:2023-10-22 11:01

定义:运算符栈s,操作数栈c
读3+,+压入栈s,3压入栈c;
读5*7,*压入栈s,5压入栈c,7压入栈c;
读-,*运算顺序高于+-,取栈c中的7和5,取栈s中的*,计算5*7=35,35压入栈c,-压入栈s;
读4,压入栈c,读取完;
取栈c中的4和35,取栈s中的-,计算35-4=31,取栈c中的3,取栈s中的+,计算3+31=34

热心网友 时间:2023-10-22 11:02

我写过,如果是大整数,比如说输入的数有几百位,那个代码我写了500多近600行!你才15分!!!!
老大,别说别人看见不会给你写,我写好的我都懒得去题堆里给你找代码!
呵呵.....

太大发布过去,给我个你的邮箱!我给你发邮箱里!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
弱弱的问一句R9 270X显卡怎么样~ 能带得起我的AMD 240CPU么?_百度知 ... i54570cpu华硕z87a主板要配多少的内存条和显卡 i5 3570k配R9 270X显卡,用什么主板和电源? 很容易上火是什么原因 口干舌燥五心烦热失眠多梦夜不能寐请问是什么原因,吃什么能有效... 想问看大家对老妻少夫的问题有何看法? ...战记第十三章第6关打法 山海战记13-6攻略-手游攻略-游戏鸟手游网 ...战记第十七章第1关打法 山海战记17-1攻略-手游攻略-游戏鸟手游网 ...山海战记9-6图文攻略-手游攻略-游戏鸟手游网 ...战记第十二章第2关打法 山海战记12-2攻略-手游攻略-游戏鸟手游网 杨耐梅的个性特点 笑傲江湖中,令狐冲是怎样激怒梅庄老大的 三星手机用qq影音看视频时屏幕变黑怎么办 C语言中栈和队列实现表达式求值的实例 实现算术表达式求值程序(栈的运用) 梅山七怪在各部封神榜里都出现吗? 奥斯卡历年来经典电影有哪些? 写老师的作文 700字 怎么判断水痘 数据结构栈的表达式求值应用,改代码 在大学里面,如何看待学习这件事? 数据结构c语言版,栈实现表达式求值 如今当代年轻人的“躺平”,究竟暴露了什么危机呢? 栈的应用 表达式求值 要超好的写《我最敬爱的老师》 《上海滩》华姐为什么是现在这样子? 梅老大,浩哥哪个电视剧里的 天罚梅老大和君莫邪是什么关系 win8怎么设置锁屏 什么叫躺平的一代 2014/07/14德国vs阿根廷哪一队能够拿到冠军啊 我写的用栈实现表达式求值程序,不知道哪出问题了。希望有高人帮忙指点一下。。。 不知道是不是长水痘的征兆,请大家帮忙判断一下。 死神斩魂刀 栈的应用:表达式求值。急急急 手机看视频会黑屏 表达式求值 栈实现 c++ 支持加减乘除运算 帮我判断是不是水痘 上海皇帝中杜月笙的初恋女友最后嫁给了谁? 武汉晃晃的目录 我将于09.20号去九寨沟,该穿什么衣服?现在那里是什么温度? 要穿薄棉袄吗? 7一16度应该也可以穿薄棉衣吧? 14度穿棉袄会热吗? 天都华庭的全拼音怎么写 怎么清洁电动牙刷刷头? 子穿棉衣是什么意思? 黄山徽江建筑材料有限公司怎么样? DDR3L是什么意思 黄山区黄山青年旅行社有限公司怎么样? 临汾市天都华庭物业管理服务有限公司怎么样?