1. 程式人生 > >20172324 2018-2019-1 《程序設計與數據結構》第八周學習總結

20172324 2018-2019-1 《程序設計與數據結構》第八周學習總結

第八周 一個 插入元素 使用 說明 程序設計 插入 add fin

20172324 2018-2019-1 《程序設計與數據結構》第八周學習總結

教材學習內容總結

  • 具有兩個附加屬性的二叉樹:
    1. 是一顆完全樹
    2. 對每一結點,它小於或等於其左孩子和右孩子(最小堆)
    3. 最大堆的結點大於或等於它的左右孩子
    4. 最小堆將其最小元素存儲在該二叉樹的根處,其根的兩個孩子同樣也是最小堆
操作 說明
addElement 將給定元素添加到該堆中
removeMin 刪除堆的最小元素
findMin 返回一個指向堆中的最小元素的引用
  • addElement操作
    • 要求插入元素是可比較的
    • 維持該堆的完全性屬性和有序屬性,插入的元素位置只存在一個正確的位置,要不然在h層左邊的下一個空位置,要不然在h+1層左邊的第一個位置。
    • 添加之後進行排序(過程名叫篩選)
    • 在堆實現中,會對最末一片葉子進行跟蹤記錄。
  • removeMin操作
    • 對於最小堆來說,Min就是根的位置的元素
    • 維持該堆的完全性,能替換根的合法元素只有一個就是最末一片葉子上存儲的元素。
    • 刪除之後進行排序(過程名叫篩選)
  • findMin操作:
    • 最小堆中的最小元素存儲在根中,所以只需要返回存儲在根中的元素。

使用堆:優先級隊列

  • 兩個規則:
    • 具有更高優先級的項排在前面。(不是FIFO)
    • 具有相同優先級的項按先進先出的規則排列。(FIFO)
  • 解決方案:
    • 使用隊列列表
    • 使用最小堆。
//要先解決對相同優先級的進行先進先出的排序 
//創建一個PriorityQueueNode對象,存儲將被放置在隊列中的元素,該元素的優先級,以及元素放進隊列的順序
public PrioritizedObject(T element, int priority)
  {
this.element = element;//元素
this.priority = priority;//優先級
arrivalOrder = nextOrder;//放入隊列的順序
nextOrder++;
  }
  //再解決優先級相同時的比較
  //為PriorityQueueNode類定義一個CompareTo方法,來完成優先級相同時的比較
  public int compareTo(PrioritizedObject obj)
  {
int result;

if (priority > obj.getPriority())
    result = 1;
else if (priority < obj.getPriority())
    result = -1;
else if (arrivalOrder > obj.getArrivalOrder())
    result = 1;
else
    result = -1;

return result;
  }

20172324 2018-2019-1 《程序設計與數據結構》第八周學習總結