看到《資料結構:思想與實現》這本書裡5.3的程式(給出的程式是有問題的),**敲到vs中,發現右閉括號不能起到作用,例如:輸入(3+5)*7,輸出則是38,右閉括號沒有起到作用。自己調了很久,終於修改對了,下面是正確的**:
#include using namespace std;
class calc
; struct node
};node *root;
node *create(char * &s);
type gettoken (char * &s, int &value);
int result (node *t);
public:
void preorder(node* &t);
calc (char *s)
int result()
};calc::node *calc::create(char * &s)
}return root;
}calc::type calc::gettoken(char *&s, int &data)
return data;
}if (*s == '\0') return eol;
type =*s; ++s;//程式到這一步,就說明這個字元既不是數字也不是空字元,而且下次的掃瞄的是s指向的字串中的下乙個字元。
switch(type)
}//根結點一定是運算子,且是最後乙個加入計算的運算子
int calc::result(node *t)
num1=result(t->lchild);
cout<
cout<
cout<
}int main()
{
calc exp("(3+5)*7/(8-4)");
cout修改的地方是當掃瞄到「)」時,給出乙個標誌位flag記錄此時的type,當下乙個符號比括號裡的表示式的運算子高階時,進行建立新的根結點而不是將這個結點作為原來根結點的子結點。
顯示結果如下:
中綴表示式轉二叉樹
關於中綴表示式轉二叉樹,其實很簡單,只要記住這幾句話就夠了 就這麼簡單 這樣說可能還有人聽不懂 舉個栗子 a b c d e fa b c d e f a b c d e f從左到右遍歷表示式,找到最後計算的字元 分成3部分 a b c d e f 分為左子樹,根,右子樹 再繼續把每個拆分成三部分,...
中綴表示式生成二叉樹
中綴表示式生成二叉樹,大概應該有遞規,迭代,和編譯原理中的自頂向下的 分析法等。遞規,迭代的思路每次讀出乙個數字,乙個運算子,比較當前運算子和之前符號的優先順序,進行相關的操作。自頂向下的 分析法,做了下,實在忘記的差不多了,先占個位。以後完成。tree.c include head.h struc...
利用二叉樹實現中綴表示式的計算
之前按照資料結構的課本 李忠月版 實現了利用兩個棧來進行中綴表示式的計算,下面這段 可以實現利用二叉樹來進行中綴表示式的計算,計算過程中不適用棧,僅利用二叉樹的後序遍歷思想。include include define init size 10 define incrementsize 10 typ...