C语言表达式求值
答案:1 悬赏:20
解决时间 2021-03-05 22:04
- 提问者网友:情歌越听越心酸
- 2021-03-05 14:22
C语言表达式求值
最佳答案
- 二级知识专家网友:从此江山别
- 2021-03-05 14:55
//基本的堆栈思想,写一个简单的,你看自己能完善一下吧
#include
#include
typedef struct
{
int * base;
int * top;
int size;
} stack_i;
void initStack_I(stack_i * int_sta)
{
int_sta->base = (int *)malloc(sizeof(int) * 100);
int_sta->top = int_sta->base;
int_sta->size = 100;
}
void deleteStack_I(stack_i * int_sta)
{
free(int_sta->base);
}
void push_I(stack_i * int_sta, int i)
{
if(int_sta->top - int_sta->base >= int_sta->size)
{
return;
}
*(int_sta->top++) = i;
}
void pop_I(stack_i * int_sta, int * i)
{
if(int_sta->top == int_sta->base)
{
return;
}
*i = *(--int_sta->top);
}
int main(void)
{
int i;
int temp, temp1;
int sum = 0;
char c; //当前字符
char lastc = 0; //上一个字符
stack_i IS;
initStack_I(&IS);
scanf("%d", &i); //接收第一个数字
push_I(&IS, i); //压栈
while(1)
{
scanf("%c", &c); //接收第一个字符
if(c == '
')//换行符就退出
{
break;
}
switch(c)
{
case '+':
if(lastc == '+')//上次也是一个加号的话
{
pop_I(&IS, &temp); //弹出上一个数字
pop_I(&IS, &temp1); //弹出上一个数字
sum = temp + temp1; //加法计算
push_I(&IS, sum); //新的结果压栈
}
scanf("%d", &i);//接收一个数字进来
push_I(&IS, i); //压栈
lastc = c;
break;
case '*':
scanf("%d", &i);//接收一个数字进来
pop_I(&IS, &temp); //弹出上一个数字
sum = i * temp; //乘法计算
push_I(&IS, sum); //新的结果压栈
break;
}
}
temp1 = 0;
pop_I(&IS, &temp);
pop_I(&IS, &temp1);
sum = temp + temp1;
printf("%d
", sum);
deleteStack_I(&IS);
return 0;
}
#include
#include
typedef struct
{
int * base;
int * top;
int size;
} stack_i;
void initStack_I(stack_i * int_sta)
{
int_sta->base = (int *)malloc(sizeof(int) * 100);
int_sta->top = int_sta->base;
int_sta->size = 100;
}
void deleteStack_I(stack_i * int_sta)
{
free(int_sta->base);
}
void push_I(stack_i * int_sta, int i)
{
if(int_sta->top - int_sta->base >= int_sta->size)
{
return;
}
*(int_sta->top++) = i;
}
void pop_I(stack_i * int_sta, int * i)
{
if(int_sta->top == int_sta->base)
{
return;
}
*i = *(--int_sta->top);
}
int main(void)
{
int i;
int temp, temp1;
int sum = 0;
char c; //当前字符
char lastc = 0; //上一个字符
stack_i IS;
initStack_I(&IS);
scanf("%d", &i); //接收第一个数字
push_I(&IS, i); //压栈
while(1)
{
scanf("%c", &c); //接收第一个字符
if(c == '
')//换行符就退出
{
break;
}
switch(c)
{
case '+':
if(lastc == '+')//上次也是一个加号的话
{
pop_I(&IS, &temp); //弹出上一个数字
pop_I(&IS, &temp1); //弹出上一个数字
sum = temp + temp1; //加法计算
push_I(&IS, sum); //新的结果压栈
}
scanf("%d", &i);//接收一个数字进来
push_I(&IS, i); //压栈
lastc = c;
break;
case '*':
scanf("%d", &i);//接收一个数字进来
pop_I(&IS, &temp); //弹出上一个数字
sum = i * temp; //乘法计算
push_I(&IS, sum); //新的结果压栈
break;
}
}
temp1 = 0;
pop_I(&IS, &temp);
pop_I(&IS, &temp1);
sum = temp + temp1;
printf("%d
", sum);
deleteStack_I(&IS);
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯