/*
1.首先先將中綴表示式轉換為字尾表示式
2.然後我們要分情況;
如果為數字字串就直接入棧;
如果是左括號入棧就直接入棧
如果是右括號則將棧中左括號之前的所有字元出棧;
如果是數字字串則需要考慮運算子的優先順序
最後將棧最後乙個賦為0,字串結束
*//************************************/
#include#include#define newp (stype *)malloc(sizeof(stype)) //定義乙個申請棧位址的巨集
typedef struct _stack stype; //建立棧型別
int tance(char x) //探測優先順序
int main()
else if (c=='(') //如果是左括號,直接進棧
else if (c==')') //如果是右括號,匹配左括號,把兩者之間的棧內符號全部彈出
s=top;
top=top->next;
free(s);
} else //否則肯定是+-*/了
else //否則就把棧頂的符號一直彈出,直到彈到可以壓進去,然後壓進去(也就是說等於也不能壓進去)
s=newp;
s->dat=c;
s->next=top;
top=s;
}} c=getchar(); //讀取下乙個字元
} while (top->dat!='@') //讀完和還不算完,還要把棧內剩餘的所有符號挨個彈出
return 0; //字尾表示式輸出完畢
}
中綴表示式轉字尾表示式並計算求值C C
1.遇到運算元,直接輸出 2.棧為空時,遇到運算子,入棧 3.遇到左括號,將其入棧 4.遇到右括號,執行出棧操作,並將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出 5.遇到其他運算子 時,彈出所有優先順序大於或等於該運算子的棧頂元素,然後將該運算子入棧 6.最終將棧中的元素依次出棧,輸出。經過...
字尾表示式求值
字尾表示式求值過程中不需要考慮運算子的優先順序,只需要對該表示式中的每乙個元素進行判斷,若為運算元則將其儲存在乙個陣列裡 入棧 若為運算子則取出前面的兩個運算元 彈棧 並運算,並將運算結果放回該陣列 入棧 最終陣列的最後乙個元素 棧頂元素 即為該表示式的運算結果.如 字尾表示式 23 等價於中綴表示...
字尾表示式求值
題目描述 為了便於處理表示式,常常將普通表示式 稱為中綴表示 轉換為字尾sqstack 順序棧的初始化 status initstack sqstack s 順序棧的入棧 status push sqstack s,selemtype e 演算法3.3 順序棧的出棧 status pop sqsta...