主题:[讨论]请高手近来修改一下,谢谢
#define MAXSIZE 64
typedef int datatype;
#include<stdio.h>
typedef struct
{
datatype data[MAXSIZE];
int top;
}seqstack;
seqstack s;
char in[20],out[20];
///////////////////////////////////////////////////////////
void setnull()
{
s.top=-1;
}
bool empty()
{
if(s.top>=0)
return false;
else
return true;
}
///////////////////////////////////////////////////////////
void push(int x)
{
if(s.top==MAXSIZE-1)
printf("上溢!");
else
{
s.top++;
s.data[s.top]=x;
}
}
///////////////////////////////////////////////////////////
datatype pop()
{
if(empty())
{
printf("下溢!");return NULL;
}
else
{
s.top--;
return(s.data[s.top+1]);
}
}
///////////////////////////////////////////////////////////
datatype top()
{
if(empty())
return NULL;
else
return(s.data[s.top]);
}
///////////////////////////////////////////////////////////
bool yx(char c1,char c2)
{
if((c1=='*' && c2!='/')||(c1=='/' && c2!='*')||(c1=='+' && c2=='(')||(c1=='-' && c2=='('))
return true;
else
return false;
}
///////////////////////////////////////////////////////////
void input()
{
scanf("%s",&in);
}
void change()
{
setnull();
int i=0,j=0,k=0;
while(in[i]!=0)
{
if(in[i]>47)
{
out[j]=in[i];
j++;
}
else
{
if(empty())
push(in[i]);
else
{
if(in[i]=='(')
{
push(in[i]);
}
else if(in[i]==')')
{
while(top()!='(')
{
out[j]=pop();
j++;
}
pop();
}
else
{
while(!yx(in[i],top()) && !empty())
{
out[j]=pop();
j++;
}
push(in[i]);
}
}
}
i++;
}
while (!empty())
{
out[j]=pop();
j++;
}
}
///////////////////////////////////////////////////////////
int count()
{
int i=0,a,b;
setnull();
while(out[i]!=0)
{
if(out[i]>47)
{
push(out[i]-48);
}
else
{
if(out[i]=='+')
{
b=pop();
a=pop();
a=a+b;
push(a);
}
if(out[i]=='-')
{
b=pop();
a=pop();
a=a-b;
push(a);
}
if(out[i]=='*')
{
b=pop();
a=pop();
a=a*b;
push(a);
}
if(out[i]=='/')
{
b=pop();
a=pop();
a=a/b;
push(a);
}
}
i++;
}
return pop();
}
void main()
{
printf("请输入中缀表达式:\n");
input();
change();
printf("\n后缀表达式为:\n%s",out);
printf("\n\n结果:%s=%d\n\n",in,count());
}
如果要把seqstack s改为seqstack *s,其他地方要怎么修改
typedef int datatype;
#include<stdio.h>
typedef struct
{
datatype data[MAXSIZE];
int top;
}seqstack;
seqstack s;
char in[20],out[20];
///////////////////////////////////////////////////////////
void setnull()
{
s.top=-1;
}
bool empty()
{
if(s.top>=0)
return false;
else
return true;
}
///////////////////////////////////////////////////////////
void push(int x)
{
if(s.top==MAXSIZE-1)
printf("上溢!");
else
{
s.top++;
s.data[s.top]=x;
}
}
///////////////////////////////////////////////////////////
datatype pop()
{
if(empty())
{
printf("下溢!");return NULL;
}
else
{
s.top--;
return(s.data[s.top+1]);
}
}
///////////////////////////////////////////////////////////
datatype top()
{
if(empty())
return NULL;
else
return(s.data[s.top]);
}
///////////////////////////////////////////////////////////
bool yx(char c1,char c2)
{
if((c1=='*' && c2!='/')||(c1=='/' && c2!='*')||(c1=='+' && c2=='(')||(c1=='-' && c2=='('))
return true;
else
return false;
}
///////////////////////////////////////////////////////////
void input()
{
scanf("%s",&in);
}
void change()
{
setnull();
int i=0,j=0,k=0;
while(in[i]!=0)
{
if(in[i]>47)
{
out[j]=in[i];
j++;
}
else
{
if(empty())
push(in[i]);
else
{
if(in[i]=='(')
{
push(in[i]);
}
else if(in[i]==')')
{
while(top()!='(')
{
out[j]=pop();
j++;
}
pop();
}
else
{
while(!yx(in[i],top()) && !empty())
{
out[j]=pop();
j++;
}
push(in[i]);
}
}
}
i++;
}
while (!empty())
{
out[j]=pop();
j++;
}
}
///////////////////////////////////////////////////////////
int count()
{
int i=0,a,b;
setnull();
while(out[i]!=0)
{
if(out[i]>47)
{
push(out[i]-48);
}
else
{
if(out[i]=='+')
{
b=pop();
a=pop();
a=a+b;
push(a);
}
if(out[i]=='-')
{
b=pop();
a=pop();
a=a-b;
push(a);
}
if(out[i]=='*')
{
b=pop();
a=pop();
a=a*b;
push(a);
}
if(out[i]=='/')
{
b=pop();
a=pop();
a=a/b;
push(a);
}
}
i++;
}
return pop();
}
void main()
{
printf("请输入中缀表达式:\n");
input();
change();
printf("\n后缀表达式为:\n%s",out);
printf("\n\n结果:%s=%d\n\n",in,count());
}
如果要把seqstack s改为seqstack *s,其他地方要怎么修改