ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

Óõ¥Á´±íʵÏֵıí´ïʽµÄ¼ÆËã(Ò»)
2014-11-24 01:43:24 ¡¾´ó ÖРС¡¿ ä¯ÀÀ:532´Î
Tags£ºµ¥Á´±í ʵÏÖ ±í´ïʽ ¼ÆËã

³£¼ûµÄ·½·¨£º
£¨1£©²ÉÓúó׺±í´ïʽ¼ÆË㣻£¨2£©²ÉÓÃÁ½¸ö¶ÑջʵÏÖ¼ÆË㣻
£¨3£©Í¨¹ý±í´ïʽ½¨Á¢¶þ²æÊ÷£¬ÔÙͨ¹ýºóÐò±éÀú¼ÆËã¡£
ÈýÖÖ·½·¨µÄ¹²Í¬µã¾ÍÊǶÔÓÚÒÔ×Ö·û´®ÎªÔ­Ê¼ÐÎʽµÄ±í´ïʽ£¬ÒªÌáȡÿ¸ö±í´ïʽµÄÔªËØ£¬ÕâÀï°üÀ¨Êý¾ÝºÍÔËËã·û£¬ÎÒдµÄ´úÂëÀÒÔ
Ò»¸öµ¥Á´±í£¬°Ñ¸÷¸öÔªËØÌáÈ¡Á˳öÀ´£¬ÓÃÁ´±íÁ¬½ÓÆðÀ´£¬ÕâÑùÎÞÂÛ²ÉÓÃÄÄÖÖ·½Ê½½øÐмÆËãµÃÐÄÓ¦ÊÖ¡£ÊµÏÖ·½·¨£º¶¨ÒåµÄÁ´±í½áµã°üÀ¨Ò»Ï¼¸¸öÔªËØ£ºint etype;½áµãµÄÀàÐÍ£¬¼´ÊÇÊý¾Ý½áµã»¹ÊÇÔËËã·û½áµã£¬»¹ÓÐÒ»¸öunionÀàÐÍ£¬ÓÃÓÚ´æ·ÅÊý¾Ý»òÕßÔËËã·û£¬ÔÙ¼ÓÉÏÒ»¸öÁ´½ÓÖ¸Õëlink£¬ºËÐÄ´úÂëÈçÏ£º


Ê×ÏÈÊÇÀ༰Ïà¹Ø½á¹¹µÄ¶¨Ò壺
//////////////////////////////////////////////////
//ExpNode½á¹¹ ±í´ïʽԪËصĽáµã
//Õâ¸ö½áµãҪôÊÇÊý¾Ý´Ëʱetype=0,
//ҪôÊÇÔËËã·û,´Ëʱetyp=1;
//////////////////////////////////////////////////
struct ExpNode
{
int etype; //ÀàÐÍ,0:Êý¾Ý,1:ÔËËã·û
union content //ÄÚÈݵÄÁªºÏÌå
{
double data; //Êý¾Ý
char op; //ÔËËã·û
} info;
ExpNode* link; //Á´½ÓÖ¸Õë
ExpNode() //ĬÈϹ¹Ô캯Êý
{etype=0;info.data=0;link=NULL;};
};
///////////////////////////////////ExpNode½á¹¹½áÊø


//////////////////////////////////////////////////
//ExpressionÀà ±í´ïʽÀàµÄʵÏÖ
//////////////////////////////////////////////////
class Expression
{
private:
char* s; //±í´ïʽ×Ö·û´®
int n; //±í´ïʽµÄ³¤¶È(²»º¬¡¯\0¡äµÄ³¤¶È)
ExpNode* Exp; //±í´ïʽԪËØÁ´±íÍ·Ö¸Õë(´ø¸½¼ÓÍ·½áµãµÄÁ´±í)
public:
Expression() //ĬÈϹ¹Ô캯Êý
{s=NULL;n=0;};
Expression(char* e);//´ø²ÎÊýµÄ¹¹Ô캯Êý
~Expression() //Îö¹¹º¯Êý
{if(s!=NULL)delete [] s;};
void Analyzer(); //µ±Ç°±í´ïʽµÄ×Ö·û´®


int leftp(char o); //µÃµ½×óÓÅÏȼ¶
int rightp(char o); //µÃµ½ÓÒÓÅÏȼ¶


double Caculate1(); //ÀûÓÃÊý¾ÝÕ»ºÍ·ûºÅÕ»¼ÆË㵱ǰ±í´ïʽµÄÖµ
BinTreeNode*
CreExpBinTree();//ͨ¹ýµ±Ç°µÄ±í´ïʽÀ´´´½¨¶ÔÓ¦µÄ±í´ïʽ¶þ²æÊ÷
void Display(); //ÏÔʾExp[]Êý×éÀïµÄÄÚÈÝ
friend ostream&
operator<<( //ÓÑÔªÖØÔØ<<Êä³öÔËËã·û
ostream& os,Expression& E);
};
////////////////////////////ExpressionÀàµÄʵÏÖ½áÊø


ͨ¹ý¼òµ¥µÄ´Ê·¨·ÖÎö£¬ÌáÈ¡±í´ïʽ×Ö·û´®ÖÐÔªËØ£¬²¢½¨Á¢Á´±í£º
//////////////////////////////////////////////////
//Analyzer()¹«ÓгÉÔ±º¯Êý
//´Ê·¨·ÖÎöÆ÷,ÌáÈ¡±í´ïʽÖÐÔËËã·ûºÍÊý¾Ý·ÅÈëExpÁ´±í
//////////////////////////////////////////////////
void Expression::Analyzer()
{
double val=0; //´æ·ÅÌáÈ¡µÄÊý¾ÝÔªËصÄÖµ
int f=0; //±ê¼ÇÊÇÕûÊý»¹ÊÇСÊý²¿·Ö0:ÕûÊý,1:СÊý
int e=-1; //¼ÆËãСÊý²¿·ÖʱÓõ½µÄÖ¸Êý
int count=0; //±í´ïʽԪËظöÊý¼ÆÊýÆ÷
ExpNode* rear=Exp; //±í´ïʽ½áµãÁ´±íβָÕë
ExpNode* ptr; //н¨½áµãµÄÖ¸Õë


for(int i=0;i {
if(isdigit(s[i])) //Èç¹ûÊÇÊý×Ö
{
if(f==0) //Èç¹ûÊÇÕûÊý²¿·Ö
val=val*10+(int(s[i])-48);
else //Èç¹ûÊÇСÊý²¿·Ö
{
val=val+
(int(s[i])-48)*pow(10,e);
e¨C; //Ö¸Êý¼õ1¼ÌÐøÏ´ÎÔËËã
};
if(!isdigit(s[i+1])
&&s[i+1]!=¡¯.') //Èç¹ûµ±Ç°µÄ×Ö·ûµÄϸö×Ö·ûÊÇÔËËã·û
{
ptr=new ExpNode; //н¨Ò»¸öÊý¾Ý½áµã
ptr->etype=0;
ptr->info.data=val;
val=0;
rear->link=ptr; //еÄβ½áµã
rear=ptr;
};
}
else if(s[i]==¡¯.') //Èç¹ûÓöµ½ÊǵÄСÊýµã¡¯.¡¯
f=1;
else //Èç¹ûÊÇÔËËã·û(°üÀ¨À¨ºÅ)
{
f=0;
ptr=new ExpNode; //н¨Ò»¸öÔËËã·û½áµã
ptr->etype=1;
ptr->info.op=s[i];
rear->link=ptr;
rear=ptr;
};
};
};
////////////////////////////////Analyzer()º¯Êý½áÊø


ͨ¹ýÁ½¸ö¶ÑÕ»À´ÊµÏÖ¶ÔÒѾ­½¨Á¢ºÃµÄµ¥Á´±í±í´ïʽ½øÐмÆË㣺


//////////////////////////////////////////////////
//Caculate1()¹«ÓгÉÔ±º¯Êý
//ÀûÓÃÊý¾Ý¶ÑÕ»ºÍ·ûºÅ¶ÑÕ»À´ÊµÏÖ±í´ïʽµÄ¼ÆËã
//ËùÓеļÆË㶼ÊÇ»ùÓÚÒѾ­´´½¨ºÃµÄ±í´ïʽÁ´±íExp
//////////////////////////////////////////////////
double Expression::Caculate1()
{
ExpNode* ptr=Exp->link; //±í´ïʽ½áµãÓαêÖ¸Õë
LinkedStack Opstk; //ÔËËã·ûÕ»
LinkedStack Datastk; //²Ù×÷Êý¶ÑÕ»
Opstk.Push(¡®#¡¯);


while(ptr!=NULL) //±éÀú±í´ïʽµÄÿ¸öÔªËØ
{
if(ptr->etype==0) //Èç¹û´Ó±í´ïʽÁ´±íÖÐÈ¡³öµÄÊÇÊý¾Ý
{
Datastk.Push(
ptr->info.data); //ËÍÈë²Ù×÷Êý¶ÑÕ»
ptr=ptr->link; //ȡϸö±í´ïʽ½áµã
}
else //Èç¹ûÈ¡³öµÄÊÇÔËËã·û
{
char lop;
Opstk.getTop(lop); //´Ó¶ÑÕ»¶¥²¿È¡³ö×óÔËËã·û
char rop=ptr->info.op;//´Ó±í´ïʽÖÐÈ¡³öµ±Ç°µÄÔËËã·û
if(leftp(lop)

Ê×Ò³ ÉÏÒ»Ò³ 1 2 ÏÂÒ»Ò³ βҳ 1/2/2
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
ÉÏһƪ£ººÜÈÙÐҲμÓÁË»ªÎªµÄÃæÊÔ£¬ÏÖÔÚ·Ö.. ÏÂһƪ£º²»Ê¹Óÿ⺯Êý£¬±àдstrcpyº¯Êý

×îÐÂÎÄÕÂ

ÈÈÃÅÎÄÕÂ

Hot ÎÄÕÂ

Python

C ÓïÑÔ

C++»ù´¡

´óÊý¾Ý»ù´¡

linux±à³Ì»ù´¡

C/C++ÃæÊÔÌâÄ¿