📄 后缀表达式求值.c
字号:
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
typedef struct node list;
typedef list *link;
link operand=NULL;
link push(link stack,int value)
{
link newnode;
newnode=(link)malloc(sizeof(list));
if(!newnode)
{
printf("\n分配失败");
return NULL;
}
newnode->data=value;
newnode->next=stack;
stack=newnode;
return stack;
}
link pop(link stack,int *value)
{
link top;
if(stack!=NULL)
{
top=stack;
stack=stack->next;
*value=top->data;
free(top);
return stack;
}
else
*value=-1;
return NULL;
}
int empty(link stack)
{
if(stack=NULL)
return 1;
else
return 0;
}
int is_operator(char oper)
{
switch (oper)
{
case '+':
case '-':
case '*':
case '/': return 1;
default : return 0;
}
}
int two_result(int oper,int oper1,int oper2)
{
switch (oper)
{
case '+': return (oper1+oper2);
case '-': return (oper1-oper2);
case '*': return (oper1*oper2);
case '/': return (oper1/oper2);
}
}
void main()
{
char expression[50];
int position=0;
int oper1=0;
int oper2=0;
int result;
printf("\n请输入后缀表达式:");
gets(expression);
while(expression[position]!='\0' && expression[position]!='\n')
{
if(is_operator(expression[position]))
{
operand=pop(operand,&oper1);
operand=pop(operand,&oper2);
operand=push(operand,two_result(expression[position],oper2,oper1));
}
else
{
operand=push(operand,expression[position]-48);
}
position++;
}
operand=pop(operand,&result);
printf("此后缀表达式[%s]的结果是%d\n",expression,result);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -