?? 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 + -