普通人在書寫計算式時會選擇中綴表達式,這樣符合人腦的認知習慣。可計算機處理時後綴表達式才能使處理速度更快,其緣由是利用堆棧結構減小計算機內存訪問。同時它也是一個很好鍛鍊棧這個數據結構的應用的問題。如下是用c語言實現中綴表達式到後綴表達式的轉換的代碼。本文僅討論轉換,不涉及計算。實際上若是瞭解了棧是如何在這上面應用,計算和前綴、中綴、後綴的相互計算和轉換便簡單了許多。對於三隻種表達方式的轉換,還有的作法是創建二叉樹,錄入數據,三種不一樣的遍歷方式就是三種表達方式。本文如有錯誤歡迎指出。數據結構
#include <stdio.h> int main(void) { int top=-1; char s[25],temp; //棧的大小根據須要更改,或者能夠用內存分配來解決 while((temp=getchar())!='\n') { if(temp>='A'&&temp<='Z'||temp>='a'&&temp<='z'||temp>='0'&&temp<='9'||temp=='.') //包含數字表達式和字母表達式,支持小數 printf("%c",temp); else { if(temp=='*'||temp=='/') { while(top>=0&&(s[top]=='*'||s[top]=='/')) //保證棧不會越界 printf("%c",s[top--]); s[++top]=temp; } else if(temp=='+'||temp=='-') { while(s[top]!='('&&top>=0) printf("%c",s[top--]); s[++top]=temp; } else if(temp=='(') s[++top]=temp; else if(temp==')') { while(s[top]!='(') printf("%c",s[top--]); top--; } } } while(top>=0) printf("%c",s[top--]); //餘下運算符出棧 return 0; }
在寫判斷條件時注意邏輯要清晰,肯定出入棧不會越界,並且全部元素都正確的出入棧,不要有出棧遺漏或者入棧重疊的狀況,肯定全部轉換條件都完整的進行了表達,注意某些特殊狀況,儘可能作到全面。code