//头文件
#ifndef _Three19_H
typedef struct Node *PtrToNode;
typedef PtrToNode Stack;
typedef PtrToNode Position;
Stack CreateStack();
int PopTop(Stack s);
void Push(Stack s,char c);
struct Node{
int c;
Position next;
};
#endif
/*简单版,+ - * / 一位数 */
#include <stdio.h>
#include <stdlib.h>#include "three19.h"
Stack CreateStack()
{
Stack s;
s=(Stack)malloc(sizeof(struct Node));
if(s==NULL)
{
printf("error");
return NULL;
}
s->next=NULL;
return s;
}
int PopTop(Stack s)
{
Position p;
int ch;
if(s->next==NULL)
{
printf("error");
return NULL;
}
else
{
p=s->next;
ch=p->c;
s->next=s->next->next;
free(p);
}
return ch;
}
void Push(Stack s,char c)
{
Position p;
p=(Position)malloc(sizeof(struct Node));
if(p==NULL)
{
printf("error");
return ;
}
else
{
p->c=c;
p->next=s->next;
s->next=p;
}
}
main()
{
int i;
int op2;
char ch;
Stack s=CreateStack();
while((ch=getchar())!='#')
{
if(ch=='+'||ch=='-'||ch=='*'||ch=='/')
{
switch(ch)
{
case '+':
Push(s,PopTop(s)+PopTop(s));
break;
case '-':
op2=(PopTop(s)-'0');
Push(s,PopTop(s)-op2);
break;
case '*':
Push(s,PopTop(s)*PopTop(s));
break;
case '/':
op2=PopTop(s);
if(op2!=0)
Push(s,PopTop(s)/op2);
else
printf("error");
break;
}
}
else
{
i=ch-'0';
Push(s,i);
}
}
printf("%d",PopTop(s));
}