#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
struct wq
{
char name;
struct wq * link;
};
int all = 0; // the number of all
// jin zhan
void push( wq* me ,char x );
// get the last *
wq* set( wq* me );
// get the last char
char setc(wq* me);
// display all number
void dis( wq* me );
//chose display
void chose( wq* me, char x );
// to pan duan you xian ji
int num( wq* me );
int numg( char gg );
void main()
{
char str[30];
wq * me = new wq;
me->link = NULL;
cout<<"输入表达式:\n"<<endl;
gets( str );
for(int i = 0; i < 30 && str[i] != '\0'; i++)
{
chose( me, str[i]);
}
dis(me);
cout<<endl;
getchar();
}
// jin zhan
void push( wq* me ,char x )
{
me = new wq;
me -> name = x;
me -> link = NULL;
all++;
}
// get the last *
wq* set( wq* me )
{if( all != 0)
{
for (int i = 1; i < all ; i++)
{
me = me -> link;
}
}
return me;
}
// get the last char
char setc(wq* me)
{
if( all != 0)
{
for(int i= 1; i<all;i++)
me = me ->link;
}
return me->name;
}
// display all number
void dis( wq* me )
{
wq* you;
do{
you = set(me);
cout<< you -> name;
free( you );
all-- ;}while(all);
}
//chose display
void chose( wq* me, char x )
{
wq* you = me;
int how = num( me );
int to = numg( x );
if( to ){
if(to < how && x != ')') // < or ==
{
while( to < num(you) )
{
you = set( me );
cout<<you->name;
if(all != 0 )
{
free(you);
all--;
}
}
}
else if( x == ')')
{
while( num( me ) != 44)
{
you = set( me );
cout<<you->name;
if( all != 0)
{
free(you);
all--;
}
}
}
else if( to > how )
push( me , x);
else
cout<<x;
}
else cout<<x;
}
// to pan duan you xian ji
int num( wq* me )
{
switch ( setc(me) )
{
case '$':
return 33;
break;
case '*':
case '/':
return 22;
break;
case '+':
case '-':
return 11;
break;
case '(':
return 44;
break;
default: return 0;
}
}
int numg(char gg)
{
switch ( gg )
{
case '$':
return 33;
break;
case '*':
case '/':
return 22;
break;
case '+':
case '-':
return 11;
break;
case '(':
return 44;
break;
default: return 0;
};
}