一、前言
??普通人在書寫計算式時會選擇中綴運算式,這樣符合人腦的認知習慣,可計算機處理時后綴運算式才能使處理速度更快,其原因是利用堆疊結構減少計算機記憶體訪問,同時它也是一個很好鍛煉堆疊這個資料結構的應用的問題,以下是用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;
}
三、分析
1.轉換規則
- 遇到數字字符直接輸出或經過轉換成數字后輸出
- 遇到‘(’字符直接進堆疊
- 遇到‘)’字符,將‘(’字符前的運算子依次出堆疊并輸出,‘(’字符只出堆疊,不輸出
- 遇到運算子時,將優先級比此運算子小或等于的運算子依次出堆疊,再將其入堆疊
- 讀取完整個串后,將堆疊中所有運算子出堆疊
2.注意事項
在寫判斷條件時注意邏輯要清晰,確定出入堆疊不會越界,而且所有元素都正確的出入堆疊,不要有出堆疊遺漏或者入堆疊重疊的情況,確定所有轉換條件都完整的進行了表達,注意某些特殊情況,盡量做到全面,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/98375.html
標籤:其他
