20172325 2018-2019-2 《Java程序设计》第八周学习总结

时间:2022-09-08 19:22:24

20172325 2018-2019-2 《Java程序设计》第八周学习总结

教材学习内容总结

一、堆

1.什么是堆?

  • 具有两个附加属性的一个二叉树。
  • 堆分为小顶堆和大顶堆。
    最小堆:对每一结点,它小于或等于其左孩子和右孩子。
    20172325 2018-2019-2 《Java程序设计》第八周学习总结
    最大堆:对每一结点,它大于或等于其左孩子和右孩子。
    20172325 2018-2019-2 《Java程序设计》第八周学习总结
  • 两个附加属性如下:
    (1)它是一棵完全二叉树,即该树是平衡的,且底层所有叶子都位于树的左边。
    (2)对每个结点,它(小顶堆/大顶堆)或等于其左孩子和右孩子。
  • 最小堆将其最小元素存储在该二叉树的根处,且其根的两个孩子同样也是最小堆。

2.操作

  • addElement:将给定元素添加到该堆中
  • removeMin:删除堆的最小元素
  • findMin:返回一个指向堆中最小元素的引用

addElement操作:
(1)该方法将给定的元素添加到堆中的恰当位置处,且维持该队的完全性属性和有序属性。
(2)因为一个堆就是一颗完全树,所以对于插入的新结点而言,只存在一个正确的位置,且要么是h层左边下层的下一个空位置,要么是h+1层左边的第1个位置(如果h层是满的话)

removeMin操作:
(1)该方法将删除最小堆中的最小元素并返回它。
(2)由于最小元素是存储在最小堆的根处,所以我们需要返回存储在根处的元素并用堆中的另一个元素替换它。
(3)要维持该树的完全性,那么只有一个能替换根的合法元素,且它是存储在树中最末一片叶子上的元素。

findMin操作
(1)该方法将返回一个指向该最小堆中最小元素的引用。
(2)由于该元素总是被存储在该树的根处,所以实现这一方法只需通过返回存储在根处的元素即可。

二、优先级队列

  • 优先队列是允许至少下列两种操作的数据结构
    (1)insert(插入),它的作用是显而易见的;
    (2)deleteMin(删除最小者),它的工作是找出、返回并删除优先队列中最小的元素。

三、用链表实现堆

addElement操作:

  • 在恰当的位置添加一个新元素
  • 对堆进行重排序以维持其排序属性
  • 将lastNode指针重新设定指向新的最末结点

removeMin操作:

  • 用存储在最末结点处的元素替换存储在根处的元素
  • 对堆进行重排序
  • 返回原始的根元素

findMin操作:

  • 该方法仅仅返回一个指向存储在堆根处元素的引用,因此复杂度为O(1)。

四、用数组实现堆

addElement操作:

  • 在恰当的位置添加一个新元素
  • 对堆进行重排序以维持其排序属性
  • 将count递增1.

removeMin操作:

  • 用存储在最末结点处的元素替换存储在根处的元素
  • 对堆进行重排序
  • 返回原始的根元素

findMin操作:

  • 返回指向存储在堆的根处或数组0位置处的元素。

教材学习中的问题和解决过程

  • 问题1:堆、栈、堆栈,傻傻分不清楚。
  • 问题1解决方案:

堆、栈、堆栈,都是java中的储存结构。堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。堆栈其实堆栈本身就是栈,只是换了个抽象的名字。

堆、栈区别总结:

堆:在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。
20172325 2018-2019-2 《Java程序设计》第八周学习总结

栈:是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性,在编译的时候可以指定需要的Stack的大小。
20172325 2018-2019-2 《Java程序设计》第八周学习总结

  • 1.堆栈空间分配

①栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
②堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

  • 2.堆栈缓存方式

①栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
②堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

  • 3.堆栈数据结构区别

①堆(数据结构):堆可以被看成是一棵树,如:堆排序。
②栈(数据结构):一种先进后出的数据结构。

代码调试中的问题和解决过程

  • 问题1:在运行程序是显示没有Romefist()方法,如下图
    20172325 2018-2019-2 《Java程序设计》第八周学习总结

  • 问题1解决方案:首先,我检查了我的方法,发现在ListADT里面没有写入方法;之后,我补上了Romefist()方法,但是我发现这个问题并没有解决,也就是说我的这不仅仅是方法的问题,之后我问了赵晓海同学,他说是接口出现了问题,我采用了无序接口,然而我并没有听懂,最后我的解决方法是将这两个文件类复制了以后,删掉!删掉!删掉!然后关机,然后重启,然后打开IDEA,然后重新新建文件,然后粘贴,然后就没有然后了,呵!

代码托管

20172325 2018-2019-2 《Java程序设计》第八周学习总结

(statistics.sh脚本的运行结果截图)

上周考试错题总结

结对及互评

点评过的同学博客和代码

  • 本周结对学习情况
    • 20172306
    • 结对学习内容
      • 第十一章内容
      • 讨论教材问题
      • 解决代码问题

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 20/20
第二周 941/8481 1/2 18/20
第三周 653/9134 1/3 22/20
第四周 1728/4385 2/5 8/28
第五周 933/5318 1/6 18/20
第六周 1082/5877 1/7 20/18
第七周 932/6721 1/8 18/18
第八周 1023/8438 2/10 24/20

参考资料

20172325 2018-2019-2 《Java程序设计》第八周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第八周学习总结

    1.本周学习总结 1.1思维导图 2.书面作业 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 总结:判断List中是否存在指定元素,需要用到equals方法,若存在就用remove进 ...

  2. 20172325 2017-2018-2 《Java程序设计》第九周学习总结

    20172325 2017-2018-2 <Java程序设计>第九周学习总结 教材学习内容总结 异常 1.学习了异常的基本概念: 2.区分异常与错误: 一个异常是指一个定义非正常情况或错误 ...

  3. 20172325 2018-2019-2 《Java程序设计》第九周学习总结

    20172325 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 图的定义 图是由顶点集(VertexSet)和边集(EdgeSet)组成,针对图G,顶点集和 ...

  4. 20172325 2018-2019-1 《Java程序设计》第二周学习总结

    20172325 2018-2019-1 <Java程序设计>第二周学习总结 教材学习内容总结 3.1集合 集合是一种聚集.组织了其他对象的对象.集合可以分为两大类:线性集合和非线性集合. ...

  5. 20172325《Java程序设计》第一周学习总结

    20172325<Java程序设计>第一周学习总结 教材学习内容总结 第一章 1.1软件质量 软件工程是一门关于高质量软件开发的技术和理论的学科. 高质量软件的特征 1.2 数据结构 软件 ...

  6. 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结

    <面向对象程序设计Java>第八周学习总结   项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...

  7. 201871010106-丁宣元 《面向对象程序设计(java&rpar;》第八周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第八周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...

  8. 学号 20175212 《Java程序设计》第九周学习总结

    学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...

  9. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  10. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

随机推荐

  1. C&num;设计模式&lpar;18&rpar;——中介者模式(Mediator Pattern)

    一.引言 在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室.QQ群和短信平台,这些都是中介者模式在现实生活中的应用,下面就具体分享下我对中介者模式的理解. 二. 中介者模式的介绍 2.1 ...

  2. Hya&period;io – 基于 Web 的数字音频工作站

    Hya.io 是基于 Web 的音频应用程序,通过 Web MIDI ,音频合成器,音序以及大量的插件来支持硬件 MIDI .您可以添加插件到工作区,将其连接到路由音频,进行播放和实验. HYA 支持 ...

  3. WebAPI通过multipart&sol;form-data方式同时上传文件以及数据(含HttpClient上传Demo)

    简单的Demo,用于了解WebAPI如何同时接收文件及数据,同时提供HttpClient模拟如何同时上传文件和数据的Demo,下面是HttpClient上传的Demo界面 1.HttpClient部分 ...

  4. ionic-cordova 支付宝支付插件cordova-plugin-alipay-v2使用篇

    支付宝WS_APP_PAY_SDK_BASE_2.0 <APP支付> 支付宝的cordova插件其实在github上已经有很多了,但是都已经是以前的版本了.在2016年11月的时候支付宝进 ...

  5. LightGBM介绍及参数调优

    1.LightGBM简介 LightGBM是一个梯度Boosting框架,使用基于决策树的学习算法.它可以说是分布式的,高效的,有以下优势: 1)更快的训练效率 2)低内存使用 3)更高的准确率 4) ...

  6. webpack设置热更新

    首先需要在package.json中配置一个脚本参数 --hot "dev": "webpack-dev-server --mode development --hot& ...

  7. 02MySQL中的数据类型

    一.数值 INT DECIMAL 准确的小数值 FLOAT DOUBLE 二.字符串类型 CHAR(m) 此数据类型用于表示固定长度的字符串,可以包含最多达255个字符,其中m代表字符串的长度.长度固 ...

  8. Navicat11全系列激活工具和使用方法

    Navicat特别好使,但是就是得注册,在网上看到了一个激活工具,成功激活了Navicat...工具链接地址是.. https://files.cnblogs.com/files/miantiaoan ...

  9. system&period;data&period;oracleclient 需要 8&period;17 需要oracle客户端问题

    1.下载 2.程序引用   Oracle.DataAccess.dll  其他引用放在debug下

  10. BZOJ3524 &amp&semi; LOJ2432:&lbrack;POI2014&rsqb;代理商Couriers——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3524 https://loj.ac/problem/2432 给一个长度为n的序列a.1≤a[i] ...