データ構造--表式の求め方(スタックベース)

2294 ワード

ブログ前の感想:
表式の値を求めるのは難しいですが、特に各種表現の優先度は自分で設計しなければなりません.また、自分がどうやってこの優先度の比較関係をプログラムに持ち込んでいくかを見ます.ここでは自分で簡単なスタックを書くことができます.また、システムの持参した菵includeを呼び出すこともできます.
コードブロック:
#include 
#include 
#include 
#include                   //stack top(    ),push(   ),pop  (  )
using namespace std;


stack  optr;       //     
stack  optn;          //   


int zuobiao(char ch)                  //                
{

	int biao=0;
	switch(ch)
	{
	case'+':
		biao=0;break;
	case'-':
		biao=1;break;
	case'*':
		biao=2;break;
	case'/':
		biao=3;break;
	case'(':
		biao=4;break;
	case')':
		biao=5;break;
	case'$':
		biao=6;
	default:break;
	}
	return biao;
}


char quyou(char ch2,char ch1)                 //          
{
	const char youxian[7][7]=
	{
		{ '>','>','','>' },
		{ '>','>','','>' },
		{ '>','>','>','>','','>' },
		{ '>','>','>','>','','>' },
		{ '','>','>','>','0','>','>' },
		{ '='0'&&h<='9')               //      else,i  1,         ,  if,           if
		{	
			if(i==1)                   //             ,x             
			{
				int x=optn.top();
				optn.pop();
				optn.push(10*x+(h-'0'));
				i=1;                     // i=1        ,  h      
			}
			else                     //      
			{
				optn.push(h-'0');
				i++;
			}
			h=getchar();             //    
		}
		else                  //  h        
		{
			int a=0;int b=0;char w;i=0;
			switch(quyou(h,optr.top()))          //h           
			{
			case'':
				//h=getchar();
				//optn.push(h);
				w=optr.top();optr.pop();
				a=optn.top();optn.pop();
				b=optn.top();optn.pop();
				cal(a,w,b);
				optn.push(cal(a,w,b));       //         
			}
		}
		//optn.top();
	}
	return optn.top();                     //top       
	//cout<>n;	
	cout<
この実験は主にスタックの理解を深めるためである.