中缀表达式转 后缀表达式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct STACKnode* link;
struct STACKnode{
char item ;
link next;
};
static link head ;
link NEW(char item, link next){
link x = (link) malloc(sizeof *x);
x->item = item;
x->next = next;
return x;
}
void STACKinit(int maxN){
head = NULL;
}
int STACKempty(){
return head == NULL;
}
void STACKpush(char item){
head = NEW(item,head);
}
char STACKpop(){
char item = head->item;
link t = head->next;
free(head);
head = t;
return item;
}
main(int agrc,char*agrv[]){
char *a = agrv[1];
int i , n = strlen(a);
STACKinit(n);
for(i = 0 ; i < n; i ++){
if(a[i]==')')
printf("%c ",STACKpop());
if(a[i]=='*' || a[i]=='+')
STACKpush(a[i]);
if(a[i]>='0' && a[i]<='9')
printf("%c ",a[i]);
}
printf("\n");
}
运行结果
-------------------------------------------------------------------------------------------------------------------
后缀表达式求值
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct STACKnode* link;
struct STACKnode{
int item ;
link next;
};
static link head ;
link NEW(int item, link next){
link x = (link) malloc(sizeof *x);
x->item = item;
x->next = next;
return x;
}
void STACKinit(int maxN){
head = NULL;
}
int STACKempty(){
return head == NULL;
}
void STACKpush(int item){
head = NEW(item,head);
}
int STACKpop(){
int item = head->item;
link t = head->next;
free(head);
head = t;
return item;
}
main(int agrc,char*agrv[]){
char *a = agrv[1];
int i , n = strlen(a);
STACKinit(n);
for(i = 0 ; i < n; i ++){
if(a[i]=='+')
STACKpush(STACKpop()+STACKpop());
if(a[i]=='*')
STACKpush(STACKpop()*STACKpop());
if(a[i]>='0' && a[i]<='9')
STACKpush(a[i] - '0');
}
printf("%d \n",STACKpop());
}
运行结果