(Ñγǹ¤Ñ§ÔºÊý¾Ý½á¹¹¿Î³ÌÉè¼Æ)Õ»µÄÓ¦Óñí´ïʽÇóÖµ ÏÂÔØ±¾ÎÄ

¿ªÊ¼ ÓÅÏȼ¶±È½ÏËã·¨ Operate Ëã·¨ ½¨Á¢Õ» ´æ·Å²Ù×÷×Ö·û ´æ·ÅÊý¾Ý ¼ÆËã ±í´ïʽÊÇ·ñºÏ·¨ Êä³ö´íÎóÌáʾ Êä³ö±í´ïÊÇÖµ ½áÊø ͼ1 ϵͳÁ÷³Ìͼ

3Éè¼ÆÊµ¼ù 3.1»ù±¾·ÖÎö

ÔÚ¼ÆËã»úÖУ¬ËãÊõ±í´ïʽµÄ¼ÆËãÍùÍùÊÇͨ¹ýʹÓÃÕ»À´ÊµÏֵġ£ËùÒÔ£¬±¾±í´ïʽÇóÖµ³ÌÐòµÄ×îÖ÷ÒªµÄÊý¾Ý½á¹¹¾ÍÊÇÕ»¡£¿ÉÒÔʹÓÃÕ»À´´æ´¢ÊäÈë±í´ïʽµÄ²Ù×÷·ûºÍ²Ù×÷Êý¡£

ÊäÈëµÄ±í´ïʽÊÇÓɲÙ×÷ÊýºÍÔËËã·ûÒÔ¼°¸Ä±äÔËËã´ÎÐòµÄÔ²À¨ºÅÁ¬½Ó¶ø³ÉµÄʽ×Ó¡£

±í´ïʽÇóÖµÊǸ߼¶ÓïÑÔ±àÒëÖеÄÒ»¸ö»ù±¾ÎÊÌ⣬ÊÇÕ»µÄµäÐÍÓ¦ÓÃʵÀý¡£ÈκÎÒ»¸ö±í´ïʽ¶¼ÊÇÓɲÙ×÷Êý(operand)¡¢ÔËËã·û(operator)ºÍ½çÏÞ·û(delimiter)×é³ÉµÄ¡£²Ù×÷Êý¼È¿ÉÒÔÊdz£Êý£¬Ò²¿ÉÒÔÊDZ»ËµÃ÷Ϊ±äÁ¿»ò³£Á¿µÄ±êʶ·û£»ÔËËã·û¿ÉÒÔ·ÖΪËãÊõÔËËã·û¡¢¹ØÏµÔËËã·ûºÍÂß¼­ÔËËã·ûÈýÀࣻ»ù±¾½çÏÞ·ûÓÐ×óÓÒÀ¨ºÅºÍ±í´ïʽ½áÊø·ûµÈ¡£

3.2ÖÐ׺±í´ïʽÇóÖµ

ÖÐ׺±í´ïʽ£ºÃ¿¸ö¶þÄ¿ÔËËã·ûÔÚÁ½¸öÔËËãÁ¿µÄÖм䣬¼ÙÉè²Ù×÷ÊýÊÇÕûÐͳ£Êý£¬ÔËËã·ûÖ»º¬¼Ó¡¢¼õ¡¢³Ë¡¢³ýµÈËÄÖÖÔËËã·û£¬½çÏÞ·ûÓÐ×óÓÒÀ¨ºÅºÍ±í´ïʽÆðʼ¡¢½áÊø·û¡°££¡±£¬È磺££(7+15)*(23-28/4)££¡£Òª¶ÔÒ»¸ö¼òµ¥µÄËãÊõ±í´ïʽÇóÖµ£¬Ê×ÏÈÒªÁ˽âËãÊõËÄÔòÔËËãµÄ¹æÔò£¬¼´£º (1) ´Ó×óµ½ÓÒ£»

(2) Ïȳ˳ý£¬ºó¼Ó¼õ£» (3) ÏÈÀ¨ºÅÄÚ£¬ºóÀ¨ºÅÍâ¡£

ÔËËã·ûºÍ½çÏÞ·û¿Éͳ³ÆÎªËã·û£¬ËüÃǹ¹³ÉµÄ¼¯ºÏÃüÃûΪOPS¡£¸ù¾ÝÉÏÊöÈýÌõÔËËã¹æÔò£¬ÔÚÔËËã¹ý³ÌÖУ¬ÈÎÒâÁ½¸öǰºóÏà¼Ì³öÏÖµÄËã·û¦È1ºÍ¦È2Ö®¼äµÄÓÅÏȹØÏµ±ØÎªÏÂÃæÈýÖÖ¹ØÏµÖ®Ò»£º ¦È1<¦È2£¬¦È1µÄÓÅÏÈȨµÍÓÚ¦È2¡£ ¦È1=¦È2£¬¦È1µÄÓÅÏÈȨµÈÓÚ¦È2¡£ ¦È1>¦È2£¬¦È1µÄÓÅÏÈȨ¸ßÓÚ¦È2¡£

ʵÏÖËã·ûÓÅÏÈË㷨ʱÐèҪʹÓÃÁ½¸ö¹¤×÷Õ»£ºÒ»¸ö³Æ×÷operator£¬ÓÃÒÔ´æ·ÅÔËËã·û£»ÁíÒ»¸ö³Æ×÷operand£¬ÓÃÒÔ´æ·Å²Ù×÷Êý»òÔËËãµÄÖмä½á¹û¡£Ëã·¨µÄ»ù±¾¹ý³ÌÈçÏ£º

Ê×Ïȳõʼ»¯²Ù×÷ÊýÕ»operandºÍÔËËã·ûÕ»operator£¬²¢½«±í´ïʽÆðʼ·û¡°££¡±Ñ¹ÈëÔËËã·ûÕ»£»

ÒÀ´Î¶ÁÈë±í´ïʽÖеÄÿ¸ö×Ö·û£¬ÈôÊDzÙ×÷ÊýÔòÖ±½Ó½øÈë²Ù×÷ÊýÕ»operand£¬ÈôÊÇÔËËã·û£¬ÔòÓëÔËËã·ûÕ»operatorµÄÕ»¶¥ÔËËã·û½øÐÐÓÅÏÈȨ±È½Ï£¬²¢×öÈçÏ´¦Àí£º

(1) ÈôÕ»¶¥ÔËËã·ûµÄÓÅÏȼ¶µÍÓÚ¸Õ¶ÁÈëµÄÔËËã·û£¬ÔòÈøնÁÈëµÄÔËËã·û½øoperatorÕ»£»

(2) ÈôÕ»¶¥ÔËËã·ûµÄÓÅÏȼ¶¸ßÓÚ¸Õ¶ÁÈëµÄÔËËã·û£¬Ôò½«Õ»¶¥ÔËËã·ûÍËÕ»£¬ËÍÈë¦È£¬Í¬Ê±½«²Ù×÷ÊýÕ»operandÍËÕ»Á½´Î£¬µÃµ½Á½¸ö²Ù×÷Êýa¡¢b£¬¶Ôa¡¢b½øÐЦÈÔËËãºó£¬½«ÔËËã½á¹û×÷ΪÖмä½á¹ûÍÆÈëoperandÕ»£»

(3) ÈôÕ»¶¥ÔËËã·ûµÄÓÅÏȼ¶Óë¸Õ¶ÁÈëµÄÔËËã·ûµÄÓÅÏȼ¶Ïàͬ£¬ËµÃ÷×óÓÒÀ¨ºÅÏàÓö£¬Ö»Ð轫ջ¶¥ÔËËã·û£¨×óÀ¨ºÅ£©ÍËÕ»¼´¿É¡£operatorÕ»µÄÕ»¶¥ÔªËغ͵±Ç°¶ÁÈëµÄ×Ö·û¾ùΪ¡°#¡±Ê±£¬ËµÃ÷±í´ïʽÆðʼ·û¡°#¡±Óë±í´ïʽ½áÊø·û¡°#¡±ÏàÓö£¬Õû¸ö±í´ïʽÇó½â½áÊø¡£ int ExpEvaluation()

{ /*¶ÁÈëÒ»¸ö¼òµ¥ËãÊõ±í´ïʽ²¢¼ÆËãÆäÖµ¡£*/

InitStack(&operand); InitStack(&operator); PushStack(&operator, ¡¯££¡¯); printf(¡å\\n\\n Please input an expression (Ending with ££) :¡å);

ch=getchar(); /*¶ÁÈë±í´ïʽÖеÄÒ»¸ö×Ö·û*/ while(ch!=¡®££¡¯||GetTop(operator)!=¡®££¡¯)

{ if(!In(ch, OPS)) /*ÅжÏchÊÇ·ñÔËËã·û*/

{ a=GetNumber(&ch); /* ÓÃchÖð¸ö¶ÁÈë²Ù×÷ÊýµÄ¸÷λÊýÂ룬²¢×ª»¯ÎªÊ®½øÖÆÊýa */

PushStack(&operand,a);} else

switch(Compare(GetTop(operator),ch)) { case ¡ä<¡ä: PushStack(&operator, ch); ch=getchar(); break;

case ¡ä=¡ä: PopStack(&operator,&x); ch=getchar(); break; case ¡ä>¡ä: PopStack(&operator, &op); PopStack(&operand, &b);

PopStack(&operand, &a); v=Execute(a,op,b);

PushStack(&operand,v); break;

} }

v=GetTop(operand); return(v); }

ΪÁË´¦Àí·½±ã£¬±àÒë³ÌÐò³£°ÑÖÐ׺±í´ïʽÊ×ÏÈת»»³ÉµÈ¼ÛµÄºó׺±í´ïʽ£¬ºó׺±í´ïʽµÄÔËËã·ûÔÚÔËËã¶ÔÏóÖ®ºó¡£ÔÚºó׺±í´ïʽÖУ¬²»ÔÙÒýÈëÀ¨ºÅ£¬ËùÓеļÆËã°´ÔËËã·û³öÏÖµÄ˳Ðò£¬Ñϸñ´Ó×óÏòÓÒ½øÐУ¬¶ø²»ÓÃÔÙ¿¼ÂÇÔËËã¹æÔòºÍ¼¶±ð¡£ÖÐ׺±í´ïʽ¡°£¨a+b*c£©-d/e¡±µÄºó׺±í´ïʽΪ£º¡°abc*+de/-¡±¡£

3.3ºó׺±í´ïʽÇóÖµ

¼ÆËãÒ»¸öºó׺±í´ïʽ£¬Ëã·¨ÉϱȼÆËãÒ»¸öÖÐ׺±í´ïʽ¼òµ¥µÄ¶à¡£ÕâÊÇÒòΪ±í´ïʽÖм´ÎÞÀ¨ºÅÓÖÎÞÓÅÏȼ¶µÄÔ¼Êø¡£¾ßÌå×ö·¨£ºÖ»Ê¹ÓÃÒ»¸ö¶ÔÏóÕ»£¬µ±´Ó×óÏòÓÒɨÃè±í´ïʽʱ£¬Ã¿Óöµ½Ò»¸ö²Ù×÷Êý¾ÍËÍÈëÕ»Öб£´æ£¬Ã¿Óöµ½Ò»¸öÔËËã·û¾Í´ÓÕ»ÖÐÈ¡³öÁ½¸ö²Ù×÷Êý½øÐе±Ç°µÄ¼ÆË㣬Ȼºó°Ñ½á¹ûÔÙÈëÕ»£¬Ö±µ½Õû¸ö±í´ïʽ½áÊø£¬ÕâʱËÍÈëÕ»¶¥µÄÖµ¾ÍÊǽá¹û¡£

ÏÂÃæÊǺó׺±í´ïʽÇóÖµµÄËã·¨£¬ÔÚÏÂÃæµÄËã·¨ÖмÙÉ裬ÿ¸ö±í´ïʽÊǺϺõÓï·¨µÄ£¬²¢ÇÒ¼ÙÉèºó׺±í´ïʽÒѱ»´æÈëÒ»¸ö×ã¹»´óµÄ×Ö·ûÊý×éAÖУ¬ÇÒÒÔ¡®#¡¯Îª½áÊø×Ö·û£¬ÎªÁ˼ò»¯ÎÊÌ⣬ÏÞ¶¨ÔËËãÊýµÄλÊý½öΪһ

λÇÒºöÂÔÁËÊý×Ö×Ö·û´®ÓëÏà¶ÔÓ¦µÄÊý¾ÝÖ®¼äµÄת»»ÎÊÌâ¡£

double calcul_exp(char *A) /*±¾º¯Êý·µ»ØÓɺó׺±í´ïʽA±íʾµÄ±í´ïʽÔËËã½á¹û*/

{ SeqStarck s;

ch=*A++ ; InitStack(s); while(ch!= ¡¯#¡¯ )

{ if(ch!=ÔËËã·û) PushStack(s, ch); else

{ PopStack(s, &a);

PopStack(s, &b); /*È¡³öÁ½¸öÔËËãÁ¿*/ switch(ch)

{ case ch==¡¯+¡¯£º c=a+b; break ; case ch==¡¯-¡¯£º c=a-b; break ; case ch==¡¯*¡¯£º c=a*b; break ; case ch==¡¯/ ¡¯£º c=a/b; break ; case ch==¡¯%¡¯£ºc=a%b; break ; }

PushStack (s, c) ; } ch=*A++ ; }

PopStack(s, result) ; return result ; }

3.4ÖÐ׺±í´ïʽת»»³Éºó׺±í´ïʽ

½«ÖÐ׺±í´ïʽת»¯Îªºó׺±í´ïʽºÍǰÊö¶ÔÖÐ׺±í´ïʽÇóÖµµÄ·½·¨ÍêÈ«ÀàËÆ£¬µ«Ö»ÐèÒªÔËËã·ûÕ»£¬Óöµ½ÔËËã¶ÔÏóʱֱ½Ó·Åºó׺±í´ïʽµÄ´æ´¢Çø£¬¼ÙÉèÖÐ׺±í´ïʽ±¾ÉíºÏ·¨ÇÒÔÚ×Ö·ûÊý×éAÖУ¬×ª»»ºóµÄºó׺±í´ïʽ´æ´¢ÔÚ×Ö·ûÊý×éBÖС£¾ßÌå×ö·¨£ºÓöµ½ÔËËã¶ÔÏó˳ÐòÏò´æ´¢ºó׺±í´ïʽµÄBÊý×éÖдæ·Å£¬Óöµ½ÔËËã·ûʱÀàËÆÓÚÖÐ׺±í´ïʽÇóֵʱ¶ÔÔËËã·ûµÄ´¦Àí¹ý³Ì£¬µ«ÔËËã·û³öÕ»ºó²»ÊǽøÐÐÏàÓ¦µÄÔËË㣬¶øÊǽ«ÆäËÍÈëBÖдæ·Å¡£¶ÁÕß²»ÄÑд³öËã·¨£¬Ôڴ˲»ÔÚ׸Êö¡£ ³ÌÐòµÄÕûÌåËã·¨·ÖÁ½²½£º

µÚÒ»²½£¬´Ó¡±input.txt¡±ÎļþÖжÁÈ¡ÖÐ׺±í´ïʽ£¬²¢Ó¦ÓÃÔËËã·ûÕ»OpHolder°ÑÖÐ׺±í´ïʽת»»Îªºó׺±í´ïʽ£¬½«Êä³ö½á¹û´æ·ÅÔÚÒ»¸ötempÎļþÖС£

µÚ¶þ²½£¬´ÓtempÎļþÖжÁÈ¡ÖÐ׺±í´ïʽ£¬²¢Ó¦ÓòÙ×÷Õ»Operands