📄 exper.c
字号:
#include<stdio.h>
#include<stdlib.h>
typedef char Elemtype;
typedef int Elemtype1;
typedef struct stack
{
Elemtype data;
struct stack *top;
}Stack;
typedef struct stack1
{
Elemtype1 data;
struct stack1 *top;
}Stack1;
void initstack(Stack *s)
{
s->top=NULL;
}
void initstack1(Stack1 *s)
{
s->top=NULL;
}
void push(Stack *s,Elemtype x)
{
Stack *p;
p=(Stack *)malloc(sizeof(Stack));
p->data=x;
p->top=s->top;
s->top=p;
}
void push1(Stack1 *s,Elemtype1 x)
{
Stack1 *p;
p=(Stack1 *)malloc(sizeof(Stack1));
p->data=x;
p->top=s->top;
s->top=p;
}
void pop(Stack *s,Elemtype *x)
{
Stack *p;
p=s->top;
*x=p->data;
s->top=p->top;
free(p);
}
void pop1(Stack1 *s,Elemtype1 *x)
{
Stack1 *p;
p=s->top;
*x=p->data;
s->top=p->top;
free(p);
}
void gettop(Stack *s,Elemtype *x)
{
*x=s->top->data;
}
int Isempty1(Stack1 *s)
{
return s->top==NULL;
}
int Isempty(Stack *s)
{
return s->top==NULL;
}
int Int(char ch)
{
if(ch<='9'&&ch>='0')
return(1);
else
return(0);
}
char compair(Stack *singer,Elemtype Outstack)
{
Elemtype Instack;
gettop(singer,&Instack);
switch(Instack)
{
case '+': if(Outstack=='+'||Outstack=='-'||Outstack==')'||Outstack=='#')
return('>');
else
return('<');
break;
case '-': if(Outstack=='+'||Outstack=='-'||Outstack==')'||Outstack=='#')
return('>');
else
return('<');
break;
case '*': if(Outstack=='(')
return('<');
else
return('>');
break;
case '/': if(Outstack=='(')
return('<');
else
return('>');
break;
case '(': if(Outstack==')')
return('=');
else if(Outstack=='#')
return('.');
else
return('<');
break;
case '#': if(Outstack=='#')
return('*');
else if(Outstack=='('||Outstack==')')
return('.');
else
return('<');
break;
}
}
void operate(Elemtype1 *sum,Elemtype siger,Elemtype1 r)
{
switch(siger)
{
case '+' : *sum+=r;
break;
case '-' : *sum-=r;
break;
case '*' : *sum*=r;
break;
case '/' : if(r==0){
printf("\nerror!\n");
exit(-1);
}
else
*sum/=r;
break;
}
}
void Oprandtype(Stack *singer,Stack1 *sdata)
{
Elemtype c,ch;
Elemtype1 c1,c2;
int flag=0;
c=getchar();
push(singer,c);
c=getchar();
while(c!='\n'&&flag!=1)
{
if(Int(c))
{
c1=c-'0';
push1(sdata,c1);
printf("%c",c);
c=getchar();
}
else
switch(compair(singer,c))
{
case '<': push(singer,c);
c=getchar();
break;
case '=': pop(singer,&c);
c=getchar();
break;
case '>': if(Isempty1(sdata)){
printf("\nerror!\n");
flag=1;
break;
}
pop(singer,&ch);
printf("%c",ch);
pop1(sdata,&c1);
if(Isempty1(sdata)){
printf("\nerror!\n");
flag=1;
break;
}
pop1(sdata,&c2);
operate(&c2,ch,c1);
push1(sdata,c2);
break;
case '*': if(Isempty1(sdata))
printf("\nerror!\n");
else{
pop1(sdata,&c1);
printf("\nthe result is %d\n",c1);
c=getchar();
}
break;
case '.': printf("\nerror!\n");
flag=1;
break;
}
}
}
int main()
{
Stack Singer;
Stack1 Sdata;
initstack(&Singer);
initstack1(&Sdata);
Oprandtype(&Singer,&Sdata);
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -