堆疊實現中綴表示式轉字尾表示式及計算表示式的值

2021-06-28 10:13:45 字數 1316 閱讀 8089

算術表示式有字首表示法、中綴表示法和字尾表示法等形式。算術表示式我們的普通表示式,字尾表示式不包含括號,

運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行,例如: 中綴表示式( 3 + 4 ) × 5 - 6,其字尾表示式為34+5*6-

輸入格式說明:

輸入在一行內給出不超過30個字元的字首表示式,包含+、-、*、\, (, )以及運算數,不同物件(運算數、運算符號)之間以空格分隔。

**實現如下:

#include #include #include //符號的結構體,並儲存其符號的優先順序

typedef struct nodeoperatoropt;

//儲存符號的棧

typedef struct nodeoperatorstack;

//建立乙個新棧

operatorstack *creat()

//返回為1,則為空,返回不為1,則不為空

int isempty(operatorstack *head)

//壓入棧

void push(operatorstack *head, operatoropt m_operat)

//獲得棧頂元素的值

operatoropt topelement(operatorstack *head)

//彈出棧

void pop(operatorstack *head)

}//棧的輸出

void output(operatorstack *head)

}int main()

if (isempty(expression)) //如果棧為空,則把此元素壓入棧中

push(expression, m_operate);

else if (top_stack_element.oper == '(')//如果棧頂元素為(,則把運算子直接壓入棧中

push(expression, m_operate);

else

else

push(expression, m_operate);//新的操作符比棧頂元素的優先順序高,壓入棧中

}top_stack_element = topelement(expression);//獲取棧頂元素

} else if(*str == ')')

pop(expression);

}else if (*str != ' ')

str ++;

} output(expression);

return 0;

}

中綴表示式轉字尾表示式

using system using system.collections.generic using system.text namespace 中綴表示式轉字尾表示式 class convert public void run top break case case while top 1 st...

中綴表示式轉字尾表示式

將乙個普通的中綴表示式轉換為字尾表示式的一般演算法是 首先需要分配2個棧,乙個作為臨時儲存運算子的棧s1 含乙個結束符號 乙個作為輸入字尾表示式的棧s2 空棧 s1棧可先放入優先順序最低的運算子 注意,中綴式應以此最低優先順序的運算子結束。可指定其他字元,不一定非 不可。從中綴式的左端開始取字元,逐...

中綴表示式轉字尾表示式

演算法 1.設定乙個運算子棧 初始時可以將棧頂運算子置為 2.按順序掃瞄中綴表示式,當輸入為運算元時就將其輸出到字尾表示式中 3.當輸入為運算子時,則比較輸入運算子和棧頂運算子的優先順序。若輸入運算子的優先順序高於棧頂運算子的優先順序,則將輸入運算子入棧 否則,棧頂運算子的優先順序高於或等於輸入運算...