#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...