20172324 2018-2019-1 《程序设计与数据结构》第八周学习总结

Posted amberr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20172324 2018-2019-1 《程序设计与数据结构》第八周学习总结相关的知识,希望对你有一定的参考价值。

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 《程序设计与数据结构》第八周学习总结的主要内容,如果未能解决你的问题,请参考以下文章

20172324 2018-2019-1 《程序设计与数据结构》第一周学习总结

20172324 2018-2019-1 《程序设计与数据结构》第二周学习总结

20172324 2018-2019-1 《程序设计与数据结构》第八周学习总结

20172324《Java程序设计》第二周学习总结

20172324 2017-2018-2《程序设计与数据结构》实验4报告

20172324《程序设计与数据结构》第一周学习总结