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