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

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

教材学习内容总结

6.1 列表集合

  • 列表集合没有内在的容量大小,随着需要而增大
  • 列表集合可以在中间和末端添加和删除元素,区别于队列和栈只能在末端进行添加删除。
  • 列表集合分为三类:有序列表、无序列表、索引列表
  • 有序列表:其元素按照元素的内在特性排序。
  • 无序列表:元素只按照它们在列表的位置进行排序。
  • 索引列表:元素根据自己的数字索引进行排序。

6.4 Josephus问题

  • 列表中的元素每隔i个元素进行提取,直到一个不剩,求最后一个的最初索引是多少即是Josephus问题。
  • 在索引列表中删除了元素之后,他们的索引会自动补齐,这就是问题所在。

    6 Java集合API中的列表

方法 功能
add(E element) 往列表末端添加一个元素
add(int index, E element) 在指定索引处插入一个元素
get(int index) 返回指定索引处的元素
remove(int index) 删除指定索引处的元素
remove(o objecr) 替代指定索引处的元素
set(int index, E element) 返回列表中的元素数量

6 列表ADT

操作 功能
removeFirst 从列表中删除第一个元素
removeLast 从列表中删除最后一个元素
remove 从列表中删除某个元素
first 查看位于列表前端的元素
last 查看位于列表末端的元素
contains 确定列表是否含有某个元素
isEmpty 确定列表是否为空
size 确定列表中的元素数量

6 数组实现列表

  • 由于列表可以在任意位置进行元素的插入与删除,而数组实现列表的时候,元素需要进行移动。
  • 在进行remove操作的时候,如果要删除的元素是列表的最后一个元素,在这种情况下,需要进行n次比较操作。事实证明,这种删除操作的实现正好需要n次比较和平移操作,因此该操作的复杂度为O(n)。如果使用的是环形数组实现,他只是提高了删除第一元素这样一种特殊情况下的性能。
  • 进行contains操作时,由于该方法执行的是列表的线性查找,因此最坏的情况是所查找的元素不在列表中,在这种情况下需要n个比较操作,因而该操作的复杂度为O(n)。

6 链表实现列表

  • remove操作是链表实现列表最重要的一步,该操作包括判断列表是否为空,查找删除的元素。并在四种条件下进行删除(1.被删除元素为列表中唯一元素。2.被删除元素是列表中的头元素。3.被删除元素是列表中的尾元素。4.被删除元素在列表的中部位置。)
  • 虽然链表实现的列表不用进行平移元素来达到坍缩的目的,但是由于要寻找删除元素,依旧可能需要n次比较操作,所以复杂度依旧为O(n)。

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

  • 问题1:在学习书本上时,看到这么一句话

    • 索引列表的索引值总是连续的。如果删除了一个元素,其他元素的位置会像"坍缩"了一样以消除产生的间隙。
  • 那么这里的坍缩是什么意思,指着的是后面的元素会直接消失不见,还是自动补齐呢?
  • 问题1解决方案:百度之后,大致就是后面的元素会自动的补齐索引,毕竟列表的容量是不受限的。
  • 问题2:书本上关于数组实现列表remove方法里面,最后有一行 modcount++的操作,然后书上也没有具体介绍这个modcount到底是什么用。
  • 问题2解决方案:在查阅相关资料以及源码的情况下发现这个int值是为了记录list数组变化大小的次数,如果次数出现异常,有一个关于modcount的check函数就能调用并产生异常。

图函数

图源码

图预期情况

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

  • 问题1:在进行删除方法的测试过程中,尾部删除永远删不掉东西。
    错误信息1
  • 解决1:在回到删除方法的检验中发现,删除方法没有问题,就想到了是不是toString方法出现了差错,咋一看好像没啥问题,后来才发现,我把初始化str的步骤放在了循环里面,导致每一次循环都会初始化一次,这就会导致删除方法删掉初始化的那个“”。
    图toString
  • 问题2:在列表的去尾方法的实现过程中,出现和数组相同的问题,方法使用之后删除不了末尾的元素。
  • 解决2:刚开始的时候我直接想到toString是否犯了上一次的错误,后来看了一下没有上次的错误,就只能检查方法,由于链表删除全靠指针,我就一直在关注指针,后来研究了很久也没发现有什么问题,tail指针也是指向原列表的倒数第二个,按理说直接就会断开啊,后来询问了余坤澎后,他说他也遇到了这个问题,而且这个问题是由于我虽然将tail指向了倒数第二元素,但是倒数第二元素还是继续指向最后一个元素,相当于未脱开,要将它指向null才算完全脱离。手画图

代码托管

-图代码

上周考试错题总结

  • 1.A linked implementation of a stack adds and removes elements from the _______ of the linked list.
  • A .Front
  • B .Rear
  • C .Middle
  • D .None of the above
  • 答案:A。解析:栈类似于放箱子,再拿箱子时要从最上面一个拿即为front.
  • 2.A polymorphic reference uses _______________, not the type of the reference, to determine which version of a method to invoke.
  • A .the type of the object
  • B .the type of the reference
  • C .both A and B
  • D .none of the above
  • 答案:A。解析:多态使用时常常关注的是对象的类型而不是应用的类型。

结对及互评

基于评分标准,我给李楠的博客打分:7分。得分情况如下:

正确使用Markdown语法(加1分)

模板中的要素齐全(加1分)

教材学习中的问题和解决过程, (加3分)

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

感想,体会真切的(加1分)

点评认真,能指出博客和代码中的问题的(加1分)

点评过的同学博客和代码

  • 本周结对学习情况

    • 20172330李楠
    • 结对照片
    • 结对学习内容
      • 集合概述——栈
      • 链式结构——栈

其他(感悟、思考等,可选)

这个国庆过的还算愉快,除了国庆第一天就享受了七个小时的实验编程以及倒数三天的Pp编程,还有我最最喜欢的博客- -,在编写pp的过程中才发现自己有好多的知识点一点也不知道,希望能够渐渐有那种得心应手的感觉吧。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 10/10
第二周 0/0 1/2 10/20
第三周 1500/1500 1/3 10/30
第四周 2761/4261 2/5 25/55

原文地址:https://www.cnblogs.com/yanyujun527/p/9749612.html

时间: 2024-10-10 10:05:16

20172333 2018-2019-1 《程序设计与数据结构》第四周学习总结的相关文章

20172333 2017-2018-2 《Java程序设计》第10周学习总结

20172333 2017-2018-2 <Java程序设计>第10周学习总结 教材学习内容 第十三章 集合是一个对象,一个保存其他对象的数据库. 集合可以保存不同种类的对象也可以保存同种类型的对象,由此分为异构与同构. 泛型是程序设计语言的一种特性.允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明. 代码调试中的问题和解决过程 [x] 问题1:对于PP11.2的编写过程中,将Try-catch语句放在While语句下虽然成功将异常捕获,但是while语

2019面向对象程序设计(java)课程学习进度条

2019面向对象程序设计(java)课程学习进度条 周次 (阅读/编写)代码行数 发布博客量/评论他人博客数量 课余学习时间(小时) 学习收获最大的程序阅读或编程任务 1 20/10 1/0 5 九九乘法表 2 200/40 2/4 8 第三章实验三,实验四: 第三章案例LotteryOdds.java                                                                                                  

《2019面向对象程序设计(Java)课程学习进度条》

周次 (阅读/编写)代码行数 发布博客量/评论他人博客数量 课余学习时间(小时) 学习收获最大的程序 阅读或编译让我 第一周 20/5 1/0 3 编译九九乘法表 第二周 100/10 2/0 4 第3章实验题四 第三周         第四周         第五周         第六周         第钱周         第八周         第九周         第十周         第十一周         第十二周         第十三周         第十四周    

201521123116 《java程序设计》第十四周学习总结

1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. ①关系型数据库的定义:使用表(table)来存储数据:使用行(row)区分不同- 记录,每行代表一条记录:每一行由若干列(column,字段)组成. ②在JDBC中释放资源时,按照ResultSet.Statement.Connection的顺序依次关闭. ③JDBC编程一般步骤 1.与数据库建立连接(Connection) 2.向数据库发送SQL语句(statement) 3.获得和处理查询或更新语句返回的

2014025635(09)《嵌入式程序设计》第三,四周学习总结

1.第三四周学习情况 本周学习进度不慢,上课也能跟着老师敲代码了,老师说一些指令也知道是什么意思了,这两周我认为非常重要的快捷键就是tab键,补全代码,我自己手敲肯定出现很多错误,必须Tab键!!!!!!!!!!!!!!! 2.1实验楼学习内容 2.1.1安装arm-linux-gcc交叉编译工具 先复制链接到剪切板上,保存关闭剪切板 输入wget命令,然后再复制粘贴,就可以将交叉编译工具下载到实验楼环境 2.1.2.解压缩交叉编译工具源码 解压缩后生成的目录是gcc-3.4.6-glibc-2

201671010130 2016-2017-2 《Java程序设计》第十四周学习小结

模型(model):用于存储数据的对象. 视图(view):为模型提供数据显示的对象. 控制器(controller):处理用户的交互操作,对于用户的操作作出响应,让模型和视图进行必要的交互,即通过视图修改.获取模型中的数据:当模型中的数据变化时,让视图更新显示. 在网格布局对象的构造器中,需要指定行数和列数:panel.setLayout(new GridLayout(x,y)); 消息对话框的创建 javax.swing包中的JOptionPane类的静态方法: public static

201671010119 2016-2017-2《Java程序设计》第十四周学习心得

本周老师对第十一章事件处理进行了重点讲解 ,讲解之前老师先在PPT上放了几道题目,对我们自己学习十一章进行了一个随堂测验.通过这次随堂测验,我觉得我看书还是不够仔细,有些该注意的细节没有注意到.通过测验,我知道了属于容器的组件有JPanel:paintComponent方法有一个Graphics类型的参数:在类中若要处理ActionEvent事件,则该类需要实现的接口是:ActionListener:容器通过方法setLayout()设置某种布局.在课后我也找到了这些知识点,结合举例,使我对这些

201621123014《Java程序设计》第十四周学习总结

1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 答:将原来存放在文件中的数据存放到数据库中:从借书方面来看,要建立学生表students和书表books. 2.2 系统中使用到了JDBC中什么关键类? 答:使用了JDBC的DriverManager.Connection.Statement.ResultSet等类. 2.3 截图数据库相关模块的关键

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

# 20172333 2016-2017-2 <Java程序设计>第1周学习总结 ## 教材学习内容总结相对于寒假时候在实验楼里"抄袭",最近这几天对于JAVA的输入啊以及最最简单的插入文本等操作算是了解了许多. ## 代码调试中的问题和解决过程 - 问题1:在Ubuntu中安装java时遇见的问题!!- 问题1解决方案:在蓝墨云.博客园.码云.以及周围的亲朋好友都问遍后未得到相应答案,求百度解决- 问题2:编写Hello Wrold的时候与视频对照一一进行,结果javac

20172333 2017-2018-2 《程序设计与数据结构》实验2报告(最终版)

20172333 2017-2018-2 <程序设计与数据结构>实验2报告(最终版) 1.结对成员 李楠20172330 领航员:李楠 驾驶员:严域俊 成绩分配:五五开 2.相关测试过程及截图 [x] 完整一套流程截图(创建题目,中缀转后缀,计算后缀,对比答案,答案正确个数.) [x] 分数测试类单独测试截图 [x] 整数测试类单独测试截图 [x] 中缀转后缀单独测试截图 3.测试中遇到的问题及解决办法 这周主要问题所在:由于在最后计算测试类编写的时候运用的方法来自几个类的合并,导致了在输出答