具體操作如下:
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...