📄 jiangwei.txt
字号:
#include"stdafx.h"
#include"iostream.h"
#include"stdio.h"
#include"malloc.h"
typedef struct /*定义栈*/
{
char stack1[50];
int top1;
}stacktype;
void sort(char str[],stacktype *p) /*转换成逆波兰*/
{
char stack2[20];
int top2,i,j;
i=top2=0;
while(str[i]!='\0')
{
if(str[i]<='9'&&str[i]>='0')
p->stack1[++p->top1]=str[i];
else
if(str[i]=='+'||str[i]=='-')
{
if(top2==0)
stack2[++top2]=str[i];
else
{
while(top2>0&&stack2[top2]!='(')
p->stack1[++p->top1]=stack2[top2--];
stack2[++top2]=str[i];
}
}
else
if(str[i]=='(')
stack2[++top2]=str[i];
else
if(str[i]==')')
{
while(stack2[top2]!='(')
p->stack1[++p->top1]=stack2[top2--];
top2--;
}
else
if(str[i]=='*'||str[i]=='/')
{
j=top2;
while(j>0&&stack2[j]!='(')
{
if(stack2[j]=='*'||stack2[j]=='/')
{
top2--;
p->stack1[++p->top1]=stack2[j];
}
j--;
}
stack2[++top2]=str[i];
}
i++;
}
while(top2>0)
{
p->stack1[++p->top1]=stack2[top2--];
}
}
int out_stack(int s[],int *top) /*弹栈函数*/
{
return s[(*top)--];
}
void Alu(stacktype *p) /*计算逆波兰表达式*/
{
char ch;
int i,a,b,m;
int stack3[20];
int top3=0;
for(i=1;i<=p->top1;i++)
{
ch=p->stack1[i];
if(ch>='0'&&ch<='9') /*当ch是数据时入栈*/
stack3[++top3]=ch-'0';
else /*当ch不是数据时,栈中头两个出栈,计算后入栈*/
{
if(ch=='*')
{
b=out_stack(stack3,&top3);
a=out_stack(stack3,&top3);
m=a*b;
}
if(ch=='/')
{
b=out_stack(stack3,&top3);
a=out_stack(stack3,&top3);
m=a/b;
}
if(ch=='+')
{
b=out_stack(stack3,&top3);
a=out_stack(stack3,&top3);
m=a+b;
}
if(ch=='-')
{
b=out_stack(stack3,&top3);
a=out_stack(stack3,&top3);
m=a-b;
}
stack3[++top3]=m;
}
}
cout<<"结果是:"<<stack3[top3]<<endl;
}
void main()
{
char str[20];
stacktype *p;
p=(stacktype *)malloc(sizeof(stacktype));
p->top1=0;
gets(str);
sort(str,p);
Alu(p);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -