中綴式轉換為逆波蘭表示式

2021-07-29 13:22:39 字數 2548 閱讀 9566

搗騰了一天,總算有個雛形了,先發上來吧,已知的bug:1.直接輸入回車會溢位,2.表示式不完整會溢位,3.多餘的)會造成未知的結果,但是如果是在式子的最後是沒有問題的,4.中文的字元會報錯。

目前已知的就這麼多了吧

下面上**:

#include #include #include struct __stack

;typedef struct __stack* p_list;

// cdecl.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

bool priority(const char a, const char b)

void beempty(p_list head) //釋放空間,不需要人為呼叫

}

void frist_time(p_list &head) //首次建立頭節點時使用

void creat_list(p_list &node) //建立其餘節點時使用

double calc(p_list head) //用於計算最後的結果,其中判斷運算模式可以自行按照需要修改

else

creat_list(temp);

temp->number = h_temp->number;

} else

else if (h_temp->symbol == '-')

else if (h_temp->symbol == '*')

else if (h_temp->symbol == '/')

else

}} sum = stuck->number;

stuck->next = null;

beempty(stuck);

beempty(head);

return sum;

}p_list scan_list() //輸入中綴表示式

else

creat_list(pl_temp);

pl_temp->symbol = c_temp;

pl_temp->number = (double)0xcccccccccccccccc;

}} else

else

creat_list(pl_temp);

pl_temp->number = atoi(str_temp);

pl_temp->symbol = 0;

} }return t_head;

}void print_list(const p_list head) //列印鍊錶

}p_list m_bracket(p_list p_temp,p_list &temp, char *stuck_symbol, int i, bool(*p_function)(const char a, const char b))

//遇到括號時呼叫的函式

if (p_temp->symbol == 0)

if (t_i == 0 || p_function(stuck_symbol[t_i - 1], p_temp->symbol))

else

++t_i;

temp_stuck_symbol[t_i] = p_temp->symbol;

++t_i;

} }for (--t_i; t_i >= 0; --t_i)

p_temp = p_temp->next;

return p_temp;

}p_list excange(p_list head,bool (*p_function)(const char a, const char b)) //中綴轉換字尾主函式,函式指標為優先順序判斷函式,此函式需要使用者按照需求自定義

else

if (p_temp->symbol == 0)

else

creat_list(temp);

temp->number = p_temp->number;

temp->symbol = 0;

continue;

} if (i == 0 || p_function(stuck_symbol[i-1], p_temp->symbol))

else

++i;

stuck_symbol[i] = p_temp->symbol;

++i;

} }for (--i; i >= 0; --i) //清空符號棧

beempty(head);

return t_head;

}int main(void)

大概的思路如圖:

(資料出處:排程場演算法)

遇到括號時,當作輸入了乙個新的中綴表示式處理即可,此時符號棧偏移到之前原本佔未使用的部分,並且重新定義指標,讓括號處理函式誤認為這個是乙個新的符號棧

這樣最後總轉換函式出棧是沒有問題的

以上提到的bug會盡快修復更新,謝謝!

字首 波蘭式 中綴 字尾表示式 逆波蘭式

中綴表示式 中綴表示式就是常見的運算表示式,如 3 4 5 6 字尾表示式 字尾表示式又稱逆波蘭表示式,與字首表示式相似,只是運算子位於運算元之後 比如 3 4 5 6 與字首表示式類似,只是順序是從左至右 從左至右掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它...

將表示式轉換為逆波蘭表示式

給定乙個表示式字串陣列,返回該表示式的逆波蘭表示式 即去掉括號 樣例對於 3 4 5 的表示式 該表示式可表示為 3 4 5 返回 3 4 5 該表示式可表示為 3 4 5 class solution else if expression i else if expression i operat...

中綴表示式轉逆波蘭表示式

op icp064 21isp015 36思路假設表示式為string ex a b c d 將表示式處理為 a b c d 以 做末尾標識,初始時 棧s 中放入乙個 int i 0 icp表示表示式當前掃瞄項的字元的優先順序,isp表示棧頂操作符的優先順序 優先順序表如上 當 棧非空 或 當前掃瞄...