⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 运算符栈运算.txt

📁 利用栈
💻 TXT
字号:
#include"iostream"
#include"sstream"
#include"string"
using namespace std;

int bijiao[8][8]={3,3,1,1,1,1,3,3,
                  3,3,1,1,1,1,3,3,
                  3,3,3,3,3,1,3,3,
                  3,3,3,3,3,1,3,3,
                  3,3,3,3,3,1,3,3,
                  1,1,1,1,1,1,2,2,
                  3,3,3,3,3,0,3,3,
                  1,1,1,1,1,1,0,2};
                  
                  
                  
struct zhanshu
{
double shu;
zhanshu * next;
zhanshu()
 {
 shu=0;
 next=NULL; 
 
 }
 
};
//--------------------------------------------


struct zhanfu
{
char fu;
zhanfu * next;

zhanfu()
{
fu='#';
next=NULL;

}


};

zhanshu *jinzhanshu(zhanshu* &top,double a)
{ cout<<"shu运行";
 zhanshu* jiedian;
 jiedian=new zhanshu;
 jiedian->shu=a;
 jiedian->next=top;
 top=jiedian;
 return top;




}

zhanshu * chuzhanshu(zhanshu * &top,double &a)
{ zhanshu * temp;
 temp=top;
 a=top->shu;
 top=top->next;
 delete temp;
 return top;

}
//------------------------------------------------

zhanfu * jinzhanfu(zhanfu * &top,char a)
{ cout<<"fu运行";
  zhanfu * jiedian;
  jiedian=new zhanfu;
  jiedian->fu=a;
  jiedian->next=top;
  top=jiedian;
  return top;
  

}

zhanfu * chuzhanfu(zhanfu * &top,char &a)
{
  zhanfu * temp;
  temp=top;
  a=top->fu;
  top=top->next;
  delete temp;
  return top;

}
//----------------------------------------------

 int panduanzifu(zhanfu *  &b,char &a)
 {
  int m,n;
  char e;
  e=b->fu;
 switch (a)
{
 case '+':
     m= 0;
    break;
 case '-':
     m= 1;
    break;
 case '*':
     m= 2;
    break;
 case '/':
     m= 3;
    break;
 case '%':
     m= 4;
    break;
 case '(':
     m= 5;
    break;
 case ')':
     m= 6;
    break;
 case '#':
     m= 7;
    break;

}
	 
   switch (e)
{
 case '+':
      n= 0;
    break;
 case '-':
      n= 1;
    break;
 case '*':
       n= 2;
    break;
 case '/':
      n= 3;
    break;
 case '%':
     n= 4;
  case '(':
      n= 5;
    break;
 case ')':
     n= 6;
    break;
 case '#':
     n= 7;
    break;

 
}
 
 
 return bijiao[n][m] ; 
 }

  //---------------------------------------- 
  double yunsuan (zhanfu* & a,zhanshu * & b )
  {
    char c;
    double d,e;
    chuzhanfu(a,c);
    chuzhanshu(b,d);
    chuzhanshu(b,e);
    
    
    switch (c)
{
 case '+':
      return d+e;
      
 case '-':
      return e-d;
     
 case '*':
      return d*e;
      
 case '/':
      return e/d;
     
 
      
}
  
  
  
  
  
  }
  
  
  
                 
main()
{


char a[100];
cout<<"请输入表达式";
cin>>a;


zhanshu* topshu=NULL;

zhanfu * topfu=NULL;

jinzhanfu(topfu,'#'); //----------------------压入#


//---------------------------------------------------


for(static int i=0;a[i]!='\0';)
 {
 if (a[i]>47)
 {
 string * s;
 s=new string;

 for(int j=i;a[j]>47 && a[j]!='#';j++)
  {
  *s=*s+a[j];
  i++;
  }

  double shu;
  stringstream shuchu(*s);
  shuchu>>shu;
 
  jinzhanshu(topshu,shu) ;     //-------------------把字符转换成数
   
 }
else 
if (a[i]<48)
{  
	if (panduanzifu(topfu,a[i])==1)  //--------------第二个变量与第一个变量比较 第二个变量比第一个变量优先级低
	{jinzhanfu(topfu,a[i]) ;i++;}
  else
	  if (panduanzifu(topfu,a[i])==3)  //----------第二个变量比第一个变量优先级高
  jinzhanshu(topshu,yunsuan(topfu,topshu)); 
	  
  else
	  if (panduanzifu(topfu,a[i])==2 && a[i]!=')')
	  {i++;}                         //---------------第二个变量比第一个变量优先级相同
  else
	  if (panduanzifu(topfu,a[i])==2 && a[i]==')')
	  {   char h;
	      
		  chuzhanfu(topfu,h);    //---------------'('出栈
		
		  i++;
	  }    
  
 } 
 
  } 

cout<<topshu->shu ;




}










⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -