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;idata) 
	{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