1 #include<stdio.h>
2 #include<stdlib.h>
3 #define N 1010
4 //字符栈的操作
5 typedef struct
6 {
7 char *base;
8 char *top;
9 }SqStack;
10 int InitStack(SqStack &S)
11 {
12 S.base=(char *)malloc(N*sizeof(char));
13 if(!S.base) exit(1);
14 S.top=S.base;
15 return 1;
16 }
17 int StackEmpty(SqStack &S)
18 {
19 if(S.top==S.base)
20 return 1;
21 return 0;
22 }
23 int GetTop(SqStack S,char &e)
24 {
25 if(S.top==S.base) return 0;
26 e=*(S.top-1);
27 return 1;
28 }
29 int Push(SqStack &S,char e)
30 {
31 *S.top++=e;
32 return 1;
33 }
34 int Pop(SqStack &S,char &e)
35 {
36 if(S.top==S.base) return 0;
37 e=*--S.top;
38 return 1;
39 }
40 //转化的操作过程
41 static int i;
42 int Pass(char *s,char c)
43 {
44 s[i]=c;
45 i++;
46 return 1;
47 }
48 int level(char c,int k)
49 {
50 switch(c)
51 {
52 case '=': return 1;
53 case ')': return k?2:5;
54 case '+':
55 case '-': return 3;
56 case '*':
57 case '/': return 4;
58 case '(': return k?5:2;
59 default : return 0;
60 }
61 }
62 int Precede(char c1,char c2)
63 {
64 int k=(c1=='('&&c2=='=')||(c1=='='&&c2==')')||(c1==')'&&c2=='(');
65 if(!k)
66 {
67 if(level(c1,0)<level(c2,1)||c1=='='&&c2=='=') return 0;
68 return 1;
69 }
70 return 0;
71 }
72 int Converse(char *s)
73 {
74 SqStack OPTR;
75 char ch,x,c=getchar();
76 InitStack(OPTR); Push(OPTR,'=');
77 while(!StackEmpty(OPTR))
78 {
79 if(!level(c,1))
80 Pass(s,c);
81 else
82 switch(c)
83 {
84 case '(': Push(OPTR,c);break;
85 case ')': Pop(OPTR,ch);while(ch!='('){Pass(s,ch);Pop(OPTR,ch);}break;
86 default :
87 while(GetTop(OPTR,ch)&&Precede(ch,c))
88 {
89 Pass(s,ch);Pop(OPTR,ch);
90 }
91 if(c!='=')
92 Push(OPTR,c);
93 break;
94 }
95 if(c!='=')
96 {
97 x=c;c=getchar();
98 if(!level(x,1)&&level(c,1))
99 Pass(s,' ');
100 }
101 else
102 Pop(OPTR,ch);
103 }
104 s[i]='\0';
105 return 1;
106 }
107 //主函数
108 int main()
109 {
110 char s[1010];
111 int j,n;
112 scanf("%d",&n);
113 while(n--){
114 getchar();
115 i=0;
116 Converse(s);
117 for(j=0;s[j];++j){
118 putchar(s[j]);
119 if(level(s[j],0)) putchar(' ');
120 }
121 printf("=\n");
122 }
123 //system("pause");
124 return 0;
125 }