201723292017-2018-2《程序设计与数据结构》第十周学习总结

qh45wangwenbin      2022-02-10     672

关键词:

20172329 2017-2018-2 《程序设计与数据结构》第十周学习总结

教材学习内容总结

第十三章

  • 一、集合与数据结构
    1、集合:是一种对象,类似于保存其他对象的存储库;
    2、作用:表示一个专用与保存元素的对象,并且该对象还提供增添、删除等管理所保存元素的服务;

  • 二、集合的同构与异构
    1、同构:保存类型全部相同的对象的集合;
    2、异构:可以保存各种类型的对象的集合;

  • 三、分离接口与实现
    1、ADT:是由数据和在该数据上所实施的具体操作构成的集合,yigeADT有名称、值域和一组允许执行的操作。
    2、其之所以被视为抽象数据类型,是因为在ADT上可以执行的操作与底层的实现分离开了。
    3、对象具有定义良好的接口,从而成为一种实现集合的完整机制。

  • 四、数据结构的动态表示
    1、动态数据结构的大小规模随需要增长和收缩;
    2、通过保存和更新对象引用来实现一个链表的管理;

  • 五、线性数据结构
    1、队列:是一种先进先出方式管理数据的线形数据结构;
    2、堆栈:是一种以后进先出方式管理数据的线形数据结构;

  • 六、非线性结构
    1、树:是一种以层次结构组织数据的非线性数据结构;
    2、图:是非线性数据结构,使用常见的边来连接节点;

  • 七、Java 集合类
    1、Java集合类API定义了几种以不同方式实现的集合类;

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

  • 问题1:看到过这样一句话,“数组与链表为同级”,那他们可以互换吗,或者彼此替代吗?
  • 问题1解决方案:
    首先我们从他们不同的概念和特点来讲:
  • 数组的特点
    1、在内存中,数组是一块连续的区域。
    2、数组需要预留空间,在使用前要先申请占内存的大小,可能会浪费内存空间。 比如看电影时,为了保证10个人能坐在一起,必须提前订好10个连续的位置。这样的好处就是能保证10个人可以在一起。但是这样的缺点是,如果来的人不够10个,那么剩下的位置就浪费了。如果临时有多来了个人,那么10个就不够用了,这时可能需要将第11个位置上的人挪走,或者是他们11个人重新去找一个11连坐的位置,效率都很低。如果没有找到符合要求的作为,那么就没法坐了。
    3、插入数据和删除数据效率低,插入数据时,这个位置后面的数据在内存中都要向后移。删除数据时,这个数据后面的数据都要往前移动。 比如原来去了5个人,然后后来又去了一个人要坐在第三个位置上,那么第三个到第五个都要往后移动一个位子,将第三个位置留给新来的人。 当这个人走了的时候,因为他们要连在一起的,所以他后面几个人要往前移动一个位置,把这个空位补上。
    4、随机读取效率很高。因为数组是连续的,知道每一个数据的内存地址,可以直接找到给地址的数据。
    5、并且不利于扩展,数组定义的空间不够时要重新定义数组。
  • 链表的特点
    1、在内存中可以存在任何地方,不要求连续。
    2、每一个数据都保存了下一个数据的内存地址,通过这个地址找到下一个数据。 第一个人知道第二个人的座位号,第二个人知道第三个人的座位号……
    3、增加数据和删除数据很容易。 再来个人可以随便坐,比如来了个人要做到第三个位置,那他只需要把自己的位置告诉第二个人,然后问第二个人拿到原来第三个人的位置就行了。其他人都不用动。
    4、查找数据时效率低,因为不具有随机访问性,所以访问某个位置的数据都要从第一个数据开始访问,然后根据第一个数据保存的下一个数据的地址找到第二个数据,以此类推。 要找到第三个人,必须从第一个人开始问起。
    5、不指定大小,扩展方便。链表大小不用定义,数据随意增删。

  • 综上所述:
    我发现同级只是它们的共同点之一,不同仅仅以这样一个标准就去认为可以互换,实际上讲,各个都有彼此的优点,互换的也仅仅是方法,各自有实现目标的办法,只是有些方法复杂,有些比较简单而已,所以讲,从实际问题上讲,是可以互换的,但是不能直接讲位置互换就可以,需要进行方法内部的修改,然后发现问题,及时修改。
    ps:就这样问题,其实我在做pp13.3的时候深刻体会的到,因为数组有数组实现排序的方法,而链表也有链表实现排序的方法,就问题来论方法才是我们当今学习Java的主要进步过程,不能盲目去学习。感觉又一波鸡汤,自我安慰,习惯习惯

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

  • 问题1:在做pp13.3的时候,最初我想用的方法就是用两个指针,分别指向thisXXthisXX.next,但是在我写完排序程序以后,会发现在第一个循环中,它会吞一些节点;

  • 问题1解决方案:因为是通过一个Boolean对象来判断是否进入下一个循环,所以在排好序以后,他总是又进入第一个大循环里,把之前排好队的对象给一个一个给删了,最后我就把Boolean给删了,然后只留下了一个内循环,只是为了找最小的那一个节点,例:技术分享图片

BUT,又奔出现一个bug,我发现,虽说第一个和第二个参与排序了,但是第一个和第二个没有进行互换,晕.....
技术分享图片

我只得用循环外部弄一个在之前课堂作业里和小赵同学一起弄出的方法,加一个互换
技术分享图片

如此甚好,问题也就随之解决了。
技术分享图片

  • 问题2:就pp13.3的问题,我还想再写一个问题,因为很想知道为什么两个指针就会消去呢,于是第二天我继续写了一个类似的两个指针,可是,奇迹出现了,它竟然,排序成功了,我竟久久不能,不知所措,昨儿,我的半下午一直在调试,没了,半下午就这么没了
  • 问题2解决方案:具体:直接放上代码好了
    技术分享图片

代码托管

技术分享图片

上周考试错题总结

  • 错题1
    Why is the following method one which has infinite recursion?
    public int infiniteRecursion(int n)
    {
    if (n > 0) return infiniteRecursion(n) + 1;
    else return 0;
    }
    A. Because there is no base case
    B. Because the base case will never be true
    C. Because the recursive call does not move the parameter closer to the base case
    D. Because the recursive call moves the problem further away from the base case
    E. None of the above, there is no infinite recursion in this method

    正确答案: C  我的答案: A 

解析:递归的情况下,该方法使用相同的参数调用自己,所以n不会改变,因此如果(n> 0)最初为真,它将保持为真。

  • 错题2
    If there are 2 disks to move from one Tower of Hanoi to another, how many disk movements would it take to solve the problem using the recursive solution?
    A. 0
    B. 1
    C. 2
    D. 3
    E. 4

    正确答案: D  我的答案: B 

解析:Hanoi解决方案需要使用以前的解决方案两次+ 1次额外的移动。要解决它1个磁盘,它需要1移动。要解决它的2个磁盘,它需要使用解决方案1个磁盘两次+1,或1移动+ 1移动+ 1移动= 3移动。我们在等式2 ^ n - 1中捕获它,其中n是磁盘的数量。

  • 错题3
    If there are 6 disks to move from one Tower of Hanoi to another, how many disk movements would it take to solve the problem using the recursive solution?
    A. 6
    B. 13
    C. 31
    D. 63
    E. 127

    正确答案: D  我的答案: A 

解析:Hanoi解决方案需要使用以前的解决方案两次+ 1次额外的移动。要解决它1个磁盘,它需要1移动。要解决它的2个磁盘,它需要使用解决方案1个磁盘两次+ 1个额外的移动,或1移动+ 1移动+ 1额外移动= 3个移动。我们在等式2 ^ n - 1中捕获它,其中n是磁盘的数量。对于3个磁盘,这需要7次移动,对于4个磁盘需要15次移动,对于5个磁盘需要31次移动,对于6个磁盘,这需要63次移动。

  • 错题4
    The difference between direct and indirect recursion is
    A. direct recursion occurs when a method invokes itself; indirect recursion occurs when there is an intervening method
    B. indirect recursion occurs when a method invokes itself; direct recursion occurs when there is an intervening method
    C. direct recursion only occurs with methods declared to be private; indirect recursion can occur with methods declared to be private, protected, or public
    D. indirect recursion only occurs with methods declared to be private; direct recursion can occur with methods declared to be private, protected, or public
    E. none of the above

    正确答案: A  我的答案: B 

解析:直接递归意味着一种方法直接调用自己而不需要插入方法。间接递归在原始方法再次调用之前有一个或多个中介方法时发生。

  • 错题5
    It always is possible to replace a recursion by an iteration and vice versa.
    A. true
    B. false

    正确答案: A  我的答案: B 

解析:递归和迭代都是重复的形式。无论是使用递归还是迭代来重复重复都是风格,品味,有时效率,有时方便。但它们在计算方面是等价的 - 每一个都可以被另一个替代。

结对及互评

  • 本周结对学习情况
  • 博客中值得学习的或问题:
    • 内容详略得当;
    • 代码调试环节比较详细;
  • 基于评分标准,我给本博客打分:5分。得分情况如下:
  1. 正确使用Markdown语法(加1分):
  2. 模板中的要素齐全(加1分)
  3. 教材学习中的问题和解决过程, 一个问题加1分
  4. 代码调试中的问题和解决过程, 一个问题加1分

  • 博客中值得学习的或问题:
    • 内容详略得当;
    • 代码调试环节比较详细;
  • 基于评分标准,我给本博客打分:9分。得分情况如下:
  1. 正确使用Markdown语法(加1分):
  2. 模板中的要素齐全(加1分)
  3. 教材学习中的问题和解决过程, 一个问题加1分
  4. 代码调试中的问题和解决过程, 一个问题加1分

感想

突然发现已经敲了半个多学期的代码了,时间总是在不经意间失去,其实,无论是一个人敲代码,还是完成集体的结对编程,考验的终究是我们自己的能力,合作能力,编程能力,有时候总是觉得自己不行,拖后腿,有时候在写博客的时候总是抱怨,有没有什么问题,还要找问题,但是其实细细的想,或许问题不是出在自己编的某一个程序里,而是出在整个学习的过程中呢?因为其实从一些实验,作业中,其实都可以透露出别人的影子,但有时还要强作是自己绞尽脑汁想出来的,我记得高中老师给我们这么说:“借鉴,其实就是一种变相的抄袭,虽说不是完全抄,但是你借取的还是别人的经验,自己只是负责修改。”的确是这样,课程难,大家都累,每天看着那密密麻麻的代码,有些人觉得它就是世界上最美的语言,而有些人,仅仅把它看作以后,未来盈利的一种工具,或是自己上位的一种能力,我们大家都应该反思,为了什么而学习。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 156/156 1/1 15/15
第二周 217/371 1/2 20/35
第三周 233/604 2/4 20/55
第四周 1382/1986 1/5 35/90
第五周 146/2196 1/6 25/115
第六周 462/2658 1/7 15/130
第七周 856/3514 1/8 20/150
第八周 1877/5391 3/11 20/170
第九周 1747/7138 1/12 20/190
第十周 1323/8461 2/14 30/220

参考资料

Java程序设计
蓝墨云
数组和链表的区别
单向链表(单链表)的Java实现
Java实现单向链表的归并排序

201723292017-2018-2《程序设计与数据结构》实验二报告(代码片段)

201723292017-2018-2《程序设计与数据结构》实验二报告课程:《程序设计与数据结构》班级:1723姓名:王文彬学号:20172329实验教师:王志强实验日期:2018年4月21日必修/选修:必修1.实验内容初步掌握单元测试和TDD理解并掌握面向... 查看详情

201723292017-2018-2《程序设计与数据结构》第五周学习总结

201723292017-2018-2《程序设计与数据结构》第五周学习总结教材学习内容总结第五章条件判断与循环:一、条件语句1、条件语句的内容:if语句、if-else语句和switch语句(此语句在第六章详细介绍其功能);2、if语句:由保留字if、紧... 查看详情

程序设计与算法

程序设计与算法[北京大学] 第一周:枚举完美立方生理周期称硬币熄灯问题讲义加群:597225218  输入:博客园程序设计与算法第一章第二周:递归(一)阶乘汉诺塔N皇后波兰表达式讲义加群:597225218  输入:博客园程序... 查看详情

201723272018-2019-1《程序设计与数据结构》实验三:查找与排序

201723272018-2019-1《程序设计与数据结构》实验三:查找与排序课程:《Java软件结构与数据结构》班级:201723姓名:马瑞蕃学号:20172327实验教师:王志强实验日期:2018年11月19日必修/选修:必修一、实验内容:实验二查找与排序-1... 查看详情

20172328《程序设计与数据结构》实验三:查找与排序

20172328《程序设计与数据结构》实验三:查找与排序课程:《软件结构与数据结构》班级:1723姓名:李馨雨学号:20172328实验教师:王志强老师实验日期:2018年11月19日-2018年11月25日必修选修:必修一、实验要求内容实验1:定义... 查看详情

20172308实验三《程序设计与数据结构》查找与排序实验报告(代码片段)

201723082018-2019-1实验3《查找与排序》报告课程:《程序设计与数据结构》班级:1723姓名:周亚杰学号:20172308实验教师:王志强实验日期:2018年10月20日必修/选修:必修1.实验内容查找与排序-1:定义一个Searching和Sorting类,并在... 查看详情

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

学号20172326《程序设计与数据结构》第八周学习总结教材学习内容总结后绑定在程序执行时执行多态性可由继承与接口实现排序有选择法排序与插入法排序搜索分为线性搜索与二分搜索算法,同一类型的不同方法可能解决同一问... 查看详情

程序设计基石与实践专栏引导

本博文主要对通过程序设计基石与实践专栏归类,主要分为C语言与C++语言.下面对程序设计基石与实践专栏博文的索引:(待定未完待续)C语言话谈C语言让你成为一名Top的C语言程序员C语言程序员必读的5本书让你成为... 查看详情

计算机专业毕业设计(论文)题目汇总表.doc

考试报名数据处理系统设计与实现、基于WEB的车票预订信息系统设计与实现、全文搜索引擎的设计与实现、图书借阅管理信息系统设计与实现、图书销售管理信息系统设计与实现、学生选课信息系统设计与实现、运动会成绩管理... 查看详情

红书《题目与解读》第一章数学题解《acm国际大学生程序设计竞赛题目与解读》(代码片段)

...计划红书《题目与解读》第一章数学题解《ACM国际大学生程序设计竞赛题目与解读》全书目录:《题目与解读》红书训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》目录红书《题目与解读》第一章数学题解《ACM国际... 查看详情

风螺旋与飞行程序设计

精简版的课件分享。风螺旋课题的一个阶段性总结,后续将从理论向实践进行转变,希望取得更多的实践成果,再与大家分享!全文完,谢谢!  查看详情

RESTful URL 设计:公共与私有 API、分层 API 设计模式、URI 与 URL 设计?

】RESTfulURL设计:公共与私有API、分层API设计模式、URI与URL设计?【英文标题】:RESTfulURLdesign:publicvsprivateAPI,hierhachyAPIdesignpattern,URIvsURLdesign?【发布时间】:2013-12-1923:00:23【问题描述】:我经常遇到这样的问题,与HierarchicalRESTfulUR... 查看详情

程序设计语言与语言处理程序基础

重点1编译过程2文法定义 一颗语法树 有限自动机正规式7数据类型与程序控制结构8表达式9传值与传址传址调用10各程序语言特点  查看详情

201823222019-2020-1《数据结构与面向对象程序设计》第四周学习总结

教材学习内容总结1.编写类与方法(构造方法的结构和用途)2.实际参数与形式参数、public与private、return与void的区别与含义、3.UML类图的含义与形式4.静态类(Math类)静态变量、静态方法5.类间关系(依赖关系、聚合关系、继承... 查看详情

概要设计与具体设计

概要设计与具体设计在写概要设计与具体设计的时候,对于内容以及他们之间的界限非常easy模糊.今天写点自己的想法.有问题请大家不吝赐教:[email protected]首先大家要注意这2个文档最后2字,都是设计.设计就是设计,不是代码因... 查看详情

数学题解《acm国际大学生程序设计竞赛题目与解读》(代码片段)

...计划红书《题目与解读》第一章数学题解《ACM国际大学生程序设计竞赛题目与解读》全书目录:《题目与解读》红书训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》目录红书《题目与解读》第一章数学题解《ACM国际... 查看详情

系统分析与设计复习

文章目录系统分析与设计复习第1章系统分析与设计概述系统特性DevOps第2章系统规划**系统规划步骤**规划模型诺兰模型**CMM模型**系统规划方法战略集合转换法SST关键成功因素法CSF企业资源规划法BSPCSB三者联系和区别第3章系统分... 查看详情

win10系统程序与功能查找,卸载程序

win10系统程序与功能查找,卸载程序  查看详情