中綴表示式轉化為字尾表示式

2021-10-20 10:44:04 字數 1702 閱讀 5902

具體操作如下:

1》遇到數字,直接將其輸出。

2》遇到運算子,且棧頂元素優先順序低於當前運算子優先順序,則我們將其放入到棧中,遇到左括號時我們也將其放入棧中。

3》遇到運算子,且棧頂元素優先順序高於或等於當前運算子優先順序,則彈出棧中元素,直至棧空或棧頂元素優先順序低於當前運算子優先順序。再將遇到的運算子壓入棧中。

4》只有在遇到" ) "時彈出" ( ",其他情況不彈出" ( "," ( "只彈出並不輸出。

5》如果遇到乙個右括號,則將棧元素彈出,將彈出的操作符輸出直到遇到左括號為止。

6》如果我們讀到了輸入的末尾,則將棧中所有元素依次彈出。

#include //#include "ty.h"

#include "stack.h"

int express_len = 0;

stack.h(去除main函式即可):

int operator[100];

void operator_init()

char *scan(char *a, int start) 

} else//運算子

else if (a[start] == '+' || a[start] == '-')//加減情況

else*/ result[cnt++] = a[start];

} else else if (a[start - 1] <= '9' && a[start - 1] >= '0') else

}} else }}

}}

result[cnt] = '\0';

express_len += cnt;

return result;

}

int8_t is_num(char *a)

#include #include "ty.h"

#include "stack.h"

int express_len = 0;

int operator[100];

void operator_init()

char *scan(char *a, int start)

} else//運算子

else if (a[start] == '+' || a[start] == '-')//加減情況

else*/ result[cnt++] = a[start];

} else else if (a[start - 1] <= '9' && a[start - 1] >= '0') else

}} else }}

}}

result[cnt] = '\0';

express_len += cnt;

return result;

}int8_t is_num(char *a)

int main()

else

stack_push(&s, tmp);

}else

stack_pop(&s);}}

i = i + express_len - 1;

}while(stack_size(&s)>0)

}

中綴表示式轉化為字尾表示式

注意 中綴表示式需要空格隔開運算元或者操作符 關鍵有 判斷是否操作符,操作符優先順序 public class profixexpression 計算排好的字尾操作計算式 param prostr return public static intprofixcalculate string pros...

中綴表示式轉化為字尾表示式

中綴表示式轉化為字尾表示式有兩種方法,一種是利用棧,一種是把表示式轉化為樹再進一步求解,今天我們來深入了解一下這兩種方法 給出下面乙個例子 我們把中綴表示式 9 3 1 3 10 2 轉化為字尾表示式 1.首先初始化乙個空棧,用來對符號進出棧使用 2.第乙個字元是數字9,輸出9,將後面的符號 進棧 ...

中綴表示式轉化為字尾表示式

中綴表示式轉化為字尾表示式 例如 1 2 3 4 7 5 123 4 75 1 遇到數字輸出,否則進棧。2 遇到有右括號匹配棧裡的左括號,輸出棧裡的內容 3 遇到比自己比棧裡的運算子優先順序高,入棧 4 遇到比自己比棧裡的運算子優先順序低,將棧裡的運算子出棧 include include incl...