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

📄 evaluate.cpp

📁 数据结构算法vc++6.0程序集教材之part2---链式存储的表,堆栈,队列
💻 CPP
字号:
//计算后缀表达式值的文件Evaluate.cpp
const int SM=40;
#include"linearStack2.cpp"
float Evaluate(char* str)
//计算由str字符串所表示的后缀表达式的值,
//表达式要以'@'字符结束.
{LinStack S;//创建对象S
 S.InitStack(SM);//初始化栈
 istrstream ins(str);//把str定义为输入字符串流对象ins
 char ch;            //用于输入字符
 float x;   //用于输入浮点数
 ins>>ch;   //从ins流对象(即str字符串)中顺序读入一个字符
 while(ch!='@')
  {//扫描每一个字符并进行相应处理
   switch(ch)
    {case '+':x=S.Pop()+S.Pop();break;
     case '-':x=S.Pop();   // Pop(S)弹出减数
	      x=S.Pop()-x; //Pop(S)弹出的是被减数
	      break;
     case '*':x=S.Pop()*S.Pop();break;
     case '/':x=S.Pop();   // Pop(S)弹出除数
	      if(x!=0.0)
	       x=S.Pop()/x;//Pop(S)弹出的是被除数
	      else { //除数为0时终止运行
		cerr<<"除数为0!"<<endl;exit(1);}
	        break;
     default://读入的必为一个浮点数的最高位数字
     ins.putback(ch); //把它重新回送到输入流中
     ins>>x;} //从字符串输入流中读入一个浮点数
   //把读入的一个浮点数或进行相应运算的结果压入到S栈中
   S.Push(x);
   ins>>ch; //输入下一个字符,以便进行下一轮循环处理
  }
  if(!S.StackEmpty())
   {//若栈中仅有一个元素,则它是后缀表达式的值,否则为出错
    x=S.Pop();
    if(S.StackEmpty()) return x;
    else {cerr<<"表达式出错!"<<endl;exit(1);}
   }
  else {//若最后栈为空,则终止运行
    cerr<<"栈为空!"<<endl;exit(1);}
return x;}

⌨️ 快捷键说明

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