求字尾表示式 可用於浮點型)

2021-04-13 02:01:47 字數 2817 閱讀 1481

#include

#include

#include

typedef struct stack_num

stack_num_node,*stack_num_link;

typedef struct stack_char

stack_char_node,*stack_char_link;

int isemptystacknum(stack_num_link s);

int isemptystackchar(stack_char_link s);

void pushnum(stack_num_link *ss,double e);

void pushchar(stack_char_link *ss,char e);

void popnum(stack_num_link *ss,double *e);

void popchar(stack_char_link *ss,char *e);

char gettopchar(stack_char_link s);

int isnum(char e);

int comparepriority(char e1,char e2);

void changechar(char *p);

double computer(double e1,double e2,char ch);

char input(char *p);

double changedouble(char *p);

void initstackchar(stack_char_link *ss);

void initstacknum(stack_num_link  *ss);

void printchar(char *p,stack_num_link s);

void main()

void changechar(char *p)

/* end if crrent_word is a number*/

else if((current_word=='-'||current_word=='+')&&previous_word=='(')

else if(current_word=='(')

pushchar(&char_top,current_word);

} /*end if current_word is ( */

else if(current_word==')')

dowhile(stack_word!='('&&!isemptystackchar(char_top));

}/* end else if current=) */

else

/* end if i>0 */

stack_word=gettopchar(char_top);

if(stack_word=='(')

else

else

pushchar(&char_top,current_word);

}}/* end if top_word!=( */

}/* end if current_word==+*-/) */

}/* end while */

change_str[j]='/0';

printchar(change_str,num_top);

printf("/n/n%s/n/n",change_str);

}void printchar(char *p,stack_num_link s)

printf("/n/n/n");

for(;*p;p++)

else

}else

}popnum(&top2,&result);

printf("/nthe result is %lf",result);

}double computer(double e1,double e2,char ch)

return result;

}double changedouble(char *p)

else if(*q=='+')

while((*q)&&(*q!='.'))

if(*q=='.')

}if(flag)

return num;

}int comparepriority(char e1,char e2),,

,};char s[4]="+-*/";

for(i=0;i<4;i++)

return a[m][n];

}char input(char *p)

while(strlen(p)>250);

strcat(p,")");

}int isnum(char e)

return 0;

}char gettopchar(stack_char_link s)

void popchar(stack_char_link *ss,char *e)

else

}void popnum(stack_num_link *ss,double *e)

else

}void pushnum(stack_num_link *ss,double e)

else

}void pushchar(stack_char_link *ss,char e)

else

}int isemptystackchar(stack_char_link s)

int isemptystacknum(stack_num_link s)

void initstackchar(stack_char_link *ss)

void initstacknum(stack_num_link *ss)

中綴表示式轉字尾表示式 求字尾表示式值

中綴表示式轉字尾表示式 佇列q和棧s q存放字尾表示式結果 s存放操作符 設棧頂元素top 當前讀取元素a 演算法如果s是空棧 a入棧非空棧 a不是操作符,a插入佇列q 如果a為 a入棧 否則,如果a為 把棧內操作符出棧依次插入佇列q,直至遇到得 元素出棧為止 否則,如果a優先順序大於top,a入棧...

求字尾表示式的值

上篇文章介紹了 中綴表示式 轉 字尾表示式 這篇文章接著分享 計算字尾表示式的值 需求 求字尾表示式的值 輸入 字尾表示式 輸出 運算結果 from test05 stack.stack import stack import re defafter opt ret expr 運算元範圍 expr ...

中綴表示式轉字尾表示式 求表示式的值

中綴轉字尾需要遵守以下規則 1 運算元 直接輸出 2 直接入棧 3 將 以前的直接輸出,並將 出棧 不輸出 4 運算子 將優先順序不小於該運算子的操作符出棧,最後將該運算子入棧 5 最後將棧中的元素依次彈出 6 優先順序 大於 大於 class intosuf if op i equals if o...