棧的應用 中綴變字尾

2021-07-03 04:18:30 字數 1384 閱讀 9827

中綴表示式

運算符號在數字中間

字尾表示式

運算符號在數字之後

計算機計算計算的是字尾表示式

中綴變字尾舉例

5 + 3  ->  5 3 +

1 + 2 * 3  -> 1 2 3 * +

9 + (3 - 1) * 5 -> 9 3 1 - 5 * +

中綴變字尾演算法

···遍歷中綴表示式中的數字和符號

·········對於數字:直接輸出

·········對於符號:

······················左括號:進棧

······················符號    :與棧頂符號進行優先順序比較

································棧頂符號優先順序低,進棧

································棧頂符號優先順序不低,將棧頂符號彈出並輸出之後在進棧

······················右括號:找到棧頂符號彈出並輸出,直到找到匹配的左括號

···遍歷結束,將棧中所有符號彈出並輸出

偽**void transform (需要遍歷的陣列)

建立棧;

int i;

while (判斷是否迴圈到最後了)

if (如果是數字)

if (如果是左符號)

if (如果是符號)

if (右括號)

else

報錯**

#include

#include "linkstack.h"

int isnumber(char c)

int isoperator(char c)

int isleft(char c)

int isright(char c)

int priority(char c)

if( (c == '*') || (c == '/') )

return ret;

}void output(char c)

}void transform(const char* exp)

else if( isoperator(exp[i]) )

linkstack_push(stack, (void*)(int)exp[i]);

} else if( isleft(exp[i]) )

else if( isright(exp[i]) )

linkstack_pop(stack);

}else

i++;

}while( (linkstack_size(stack) > 0) && (exp[i] == '\0') )

linkstack_destroy(stack);

}int main()

中綴變字尾

time limit ms 1000 memory limit kb 10000 submission 149 accepted 27 accepted 中綴表示式是乙個通用的算術或邏輯公式表示方法,操作符是以中綴形式處於運算元的中間 例 3 4 中綴表示式是人們常用的算術表示方法。字尾表示式不包含...

棧應用 中綴轉字尾 字尾計算

中綴表示式 infix expression 即 平時生活中大家對於算式的書寫格式 eg 6 5 2 3 8 3 字尾表示式 post expression 即 把數字和運算子分開,把運算子的優先順序運算內涵到字尾式的數字和運算子的順序 中 故其 優點就是,沒有必要知道任何優先的規則 乙個運算子只對...

中綴變字尾(nyoj)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 輸入第一行輸入乙個整數n,共有n組測試資料 n 10 每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式的中綴式,每個表示式都是以 結束。這個表示式裡只包含 與小括號這幾種符號。其中小括號可以巢狀使用。資料保證...