www.pudn.com > XG.rar > XG.C
#include#include #define MAX 10 #define null 0 #define LEN sizeof(struct sqstack) struct sqstack { char data; char sign; struct sqstack *next; }; char b[MAX]; int H[2][8]={{7,7,11,11,3,11,10,2},{5,5,9,9,13,3,13,2}}; char K[8]={'+','-','*','/','(',')','i','#'}; int sum=0; /* struct sqstack *init(struct sqstack *p)*/ /*{*/ /* p=(struct sqstack *)malloc(LEN);*/ /* p->data='#';*/ /* p->sign='0';*/ /* p->next=null;*/ /* return(p);*/ /* }*/ struct sqstack *Instack(struct sqstack *a) {struct sqstack *p; struct sqstack *q; int M,N;int j=0;int t;int i;int r;char *ip; p=(struct sqstack *)malloc(LEN); p->data='#'; p->sign='0'; p->next=null; a=p;q=p;ip=&b[0]; for(i=0;i data) {M=t;printf("%c",K[t]);break;} for(t=0;t<8;t++) if(K[t]==*ip) {N=t;printf("%c",K[t]);break;} r=H[0][M]-H[1][N]; printf("%d",r); if(r<=0) { if(r==0 && a->data=='#') { printf("\n success!"); return(a); } else if(r==0 && a->data=='(' && a->sign=='0') { printf("\n error"); return(a); } else if(r==0 && a->data=='(' && a->sign=='1') { p=a; a=a->next; free(p); } else if(r<0) { p=(struct sqstack*)malloc(LEN); p->data=*ip; p->sign='0'; p->next=a; if(p->data=='i') a->sign='1'; a=p; ip++; } } else if(r>0) do { p=a; a=a->next; if(p->data=='i' && p->sign=='0') free(p); else if (p->data=='i' && p->sign=='1') { printf("\n error"); return(a); } else if (p->data==')' && q->sign=='0') free(p); else if (p->data==')' && q->sign=='1') { printf("\n error"); return(a); } else if (p->data!='i' && p->data!=')' && p->sign=='1') free(p); else if (p->data!='i' && p->data!=')' && p->sign=='0') { printf("\n error"); return(a); } for(t=0;t<8;t++) if(K[t]==a->data) {M=t;printf("%c",K[t]);break;} for(t=0;t<8;t++) if(K[t]==*ip) {N=t;printf("%c",K[t]);break;} r=H[0][M]-H[1][N]; printf("%d",r); } while(r>0); } } main() {struct sqstack *a; /* struct sqstack *p;*/ int i,j; char x,d; i=0; printf("Please input string and sign:"); scanf("%c",&x); while( x!='#' && i