回 帖 发 新 帖 刷新版面

主题:[讨论]请高手近来修改一下,谢谢

#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,其他地方要怎么修改

回复列表 (共2个回复)

沙发

top 改为 s->top;
A[i];改为s->A[i];
应该就可以了.

板凳

当输入空格时运行会出现错误,请高手指点一下

我来回复

您尚未登录,请登录后再回复。点此登录或注册