1. 程式人生 > >20172324 2018-2019-1《程式設計與資料結構》實驗2報告

20172324 2018-2019-1《程式設計與資料結構》實驗2報告

20172324 2018-2019-1《程式設計與資料結構》實驗2報告

課程:《程式設計與資料結構》
班級: 1723
姓名: 曾程
學號:20172324
實驗教師:王志強
實驗日期:2018年9月30日
必修/選修: 必修

一、實驗內容

連結串列練習

  • 實驗一:參考教材p212,完成鏈樹LinkedBinaryTree的實現(getRight,contains,toString,preorder,postorder

    1. 用JUnit或自己編寫驅動類對自己實現的LinkedBinaryTree進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
  • 實驗二:基於LinkedBinaryTree,實現基於(中序,先序)序列構造唯一一棵二㕚樹的功能
    1. 比如給出中序HDIBEMJNAFCKGL和後序ABDHIEJMNCFGKL,構造出附圖中的樹

    2. 用JUnit或自己編寫驅動類對自己實現的功能進行測試,提交測試程式碼執行截圖,要全屏,包含自己的學號資訊

  • 實驗三:自己設計並實現一顆決策樹

  • 實驗四:輸入中綴表示式,使用樹將中綴表示式轉換為字尾表示式,並輸出字尾表示式和計算結果
    1. 如果沒有用樹,則為0分
    2. 提交測試程式碼執行截圖,要全屏,包含自己的學號資訊
  • 實驗五:完成PP11.3

二、實驗過程及結果

  • 實驗1結果截圖:

    • LinkedBinaryTree中有給出getLeft的方法,所以根據所給的getLeft補寫出getRight方法
    • 書上說:contains方法留作程式設計專案,它可以使用find方法判定目標元素是否存在於樹中
    • LinkedBinaryTree要補寫preorder,postorder,LinkedBinaryTree中給出了inorder的方法,根據inorder寫出preorder和postorder
  • 實驗2結果截圖:

    • 前序是:根左右的順序,中序是左根右的順序。首先找root,前序的第一個是root;觀察前序,除根之外的必在左右子樹;觀察中序,root左側的為左子樹,右側的為右子樹;在左子樹和右子 樹中根據前序再判斷誰是根;同樣道理,以此類推
  • 實驗3結果截圖:

  • 實驗4結果截圖:

  • 實驗5結果截圖:

  • 實驗6分析:

    三、實驗過程中遇到的問題和解決過程

  • 問題一:實驗四的思考過程

  • 問題一解決方案:根據上學期學習的字尾表示式的特點,我們可以知道,只要是運算子的就都是根結點。我們這裡需要使用一個棧來儲存字元。遍歷字尾表示式,每當遇到是非運算子的字元,就將它入棧,當遇到是運算子,就將棧中前兩個結點出棧,和運算子組成一棵子樹,然後入棧。遍歷完成後,棧中剩下的唯一的一個結點就是該字尾表示式的二叉樹的根結點。但是做著做著發現好像和書上提供的程式碼是一樣的,Java實驗肯定不會只是書上的程式碼,然後仔細分析了題目發現和書上不一樣的地方在書上是直接輸入字尾表示式,實驗要求的是利用樹將中綴轉字尾之後再用字尾表示式計算。大概想法就變成了將表示式的每一個元素進行拿出,按照數字、加減運算子、乘除運算子分成三種情況,用兩個棧或者連結串列進行儲存加減和構成樹的結點。

四、其他(感悟、思考等)

五、參考資料