利用栈进行四则混合运算

#include
using namespace std;
#include
#define size2 10
#define size1 100
typedef int iii;
typedef struct
{
 char *base;
 char *top;
 int size;
}stack2;
typedef struct
{
 iii * base;
 iii* top;
 int size;
}stack;
void InitStack(stack2 &s)//初始化栈
{
 s.base=(char*)malloc (size1*sizeof(char));
 if(!s.base)
 {
  printf("超出界限\n");
  return;
 }
 else
 {
  s.top=s.base;
  s.size=size1;
 }
}
void InitStack(stack &s)//初始化栈
{
 s.base=(iii *)malloc (size1*sizeof(iii));
 if(!s.base)
 {
  printf("超出界限\n");
  return;
 }
 else
 {
  s.top=s.base;
  s.size=size1;
 }
}
void Insert(stack2 &s ,char a)//插入元素
{
 if(s.top-s.base>=s.size)
 {
  s.base=(char *)realloc (s.base,(s.size+size1)*sizeof (char));
  if(!s.base)
  {
   printf("超出界限\n");
   return ;
  }
 }
 *s.top++=a;
}
void Insert2( stack &s,int a)
{
 if(s.top-s.base>=s.size)
 {
  s.base=(iii *)realloc (s.base,(s.size+size1)*sizeof (iii));
  if(!s.base)
  {
   printf("超出界限\n");
   return ;
  }
 }
 *s.top++=a;
}
char Pop(stack2 &s )//删除栈顶元素,并返回栈顶元素
{
 if(s.top==s.base)
 {
  printf("栈为空\n");
  return 'erro';
 }
 else
 {
  *--s.top;
  return * s.top;
 }
}
int Pop2(stack &s)
{
  if(s.top==s.base)
 {
  printf("栈为空\n");
  return 'erro';//没意义
 }
 else
 {
  *--s.top;
  return * s.top;
 }
}
void View(stack &s)
{
 for(int i=1;i<=(s.top-s.base);i++)
 {
  char k;
  k=*(s.top-i);
  cout<  }
}
char GetPop(stack2 &s)
{
 if(s.top==s.base)
 {
  printf("栈为空\n");
  return-1;
 }
 else
  return *(s.top-1);
}
int GetPop2(stack &s)
{
  if(s.top==s.base)
 {
  printf("栈为空\n");
  return-1;
 }
 else
  return *(s.top-1);
}
char Compare(char q,char r)//比较优先级
{
 int j[2];
 char str[2];
 char table[7][7]={
  {'>','>','<','<','<','>','>'},
  {'>','>','<','<','<','>','>'},
  {'>','>','>','>','<','>','>'},
  {'>','>','>','>','<','>','>'},
  {'<','<','<','<','<','=','e'},
  {'>','>','>','>','e','>','>'},
  {'<','<','<','<','<','e','='}
 };
 str[0]=q;
 str[1]=r;
 for(int i=0;i<2;i++)
 {
  switch(str[i])
  {
  case '+':j[i]=0;break;
  case '-':j[i]=1;break;
  case '*':j[i]=2;break;
  case '/':j[i]=3;break;
  case '(':j[i]=4;break;
  case ')':j[i]=5;break;
  case '#':j[i]=6;break;
  }
 }
 return table[j[0]][j[1]];
}
int  Operate (int a,char b,int c)
{
 switch(b)
 {
 case '+':
   return a+c;
 case '-':
  return a-c;
 case '*':
  return a*c;
 case '/':
  return a/c;
 }
}
bool Decide(char c)
{
 if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#')
 return true;
 else
 return false;
}
int main()
{
 stack2 a;
 stack b;//a存储符号,b存储数字
 InitStack(a);
 Insert(a,'#');
 InitStack(b);
 char c;
 c=getchar();
 int temp=0;
 while (c!='#'||GetPop(a)!='#')
 {
  if(!Decide(c))
  {
   temp=(temp*10+c-'0');//可支持数位数字
   c=getchar();
  }
  else if(Decide(c))
  {
   if(temp!=0)
   {
      Insert2(b,temp);
   }
   temp=0;
   switch(Compare(GetPop(a),c))
   {
   case '<':
    //栈顶元素优先权低
  

你可能感兴趣的:(数据结构与算法)