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

教材学习内容总结

第12章
算法分析

什么叫做算法:是对特定问题求解方法,或者说是步骤的一种描述。

什么叫做好算法(具有以下标准):

1.正确性

2.可读性

3.健壮性

4.通用性

5.效率与储存空间需求

冰与火之歌:【时间】与【空间】复杂度

时间复杂度:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。

算法的时间复杂度,也就是算法的时间量度,记作:T(n)= O(f(n))。它表示随问题规模的增大,算法执行时间的增长率和f(n)的增长率相同,称为算法的渐进复杂度,简称为时间复杂度。
其中f(n)是问题规模n的某个函数。这样用大写 O() 来体现算法时间复杂度的记法,我们称为大O记法

第14章

一、栈

栈是一个线性集合,其元素的添加及删除都在一端进行。栈的处理数据方式为后进先出,最后入栈的元素最先移出栈,使用栈处理问题遵从反序。

二、链式结构
在计算机中用一组任意的存储单元存储线性表的数据元素,利用指针可以对链中的各种元素进行添加删除等操作,比较方便。

三、利用数组实现栈

首先了解数组的几个关键特性:存储在数组中的元素的下标为0到n-1,其中n是数组总的单元数。一个数组是一个对象,应该分别对其中所保存的对象进行实例化。设计栈的数组时,栈底总位于数组下标为0的位置,栈中的元素按序连续保存在数组中。在这个类中定义pop、push、peek、isEmpty等操作。

四、使用链实现栈

使用链表来实现栈,仅需要一个引用指向表的第一个结点,并了解表中的元素个数count,基于栈只允许在一端添加或删除元素这个属性,所以只需要在链表的一端进行操作。在这个类中也同样定义push、pop、peek等操作。

第15章

队列

什么是队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作,和栈一样,队列是一种操作受限制的线性表。(先进先出)

实现队列

与栈类似:
数组每次被填满后,加入下一个元素时,把数组拓展成现有数组的两倍大小。

每次移除元素时,检测数组空余空间有多少。当数组里的元素个数只有整个数组大小的四分之一时,数组减半。

不同之处在于:

由于是先进先出,移除是从队列的最前端开始的。所以当我们移除数个数据后,队列数据是存储在数组的中间部分的。令队列数据的尾端数据ID为Num,首端数据ID为HeadIndex,则Num - HeadIndex为队列数据元素个数。

当队列数据元素个数为整个数组空间的四分之一时,数组减半,且队列数据左移至数组最左端。即Num-=HeadIndex;HeadIndex=0;

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

问题1:什么是时间复杂度和空间复杂度?

书本内容:增长函数表明问题大小(n)与希望优化的值之间的关系。

个人理解:书上并没有详细介绍时间复杂度与空间复杂度的概念,所以我去查阅了相关资料。时间复杂度是指执行这个算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。通俗讲,时间复杂度考虑的就是算法运行的时间,而这是与算法的效率与设计息息相关的。举例来说,如果有一个多重循环且必须执行到底的算法,那它的时间复杂度一定很高。空间复杂度则顾名思义,考虑的是算法需要占用的空间、需要占用计算机资源的多少。

问题2:什么是泛型?

书本内容:泛型可用于定义一个类,它保存、操作并管理直到实例化时才确定类型的对象
个人理解:泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。

问题3:管理链表中,哨兵结点的存在可以去掉处理第一个结点的特殊情形,哨兵结点的用法是怎么样的?

问题3解决方案:我在网上找到了一段介绍哨兵结点的文字:“哨兵节点(sentinel)是一个哑元节点(dummy node),可以简化边界条件。是一个附加的链表节点,该节点作为第一个节点,它的值域中并不存储任何东西,只是为了操作的方便而引入的。如果一个链表有哨兵节点的话,那么线性表的第一个元素应该是链表的第二个节点。
很多情况下,需要处理当前节点的前驱节点,如果是没有哨兵节点的链表,对第一个节点,即头节点,没有前驱节点。如果不作特殊处理,就可能出错;如果对它特别对待,就会增加代码复杂性,还会降低程序效率。而如果有哨兵节点的话, 线性表的每个位置的节点都有前驱节点,因此可以统一处理。
当链表为空时,没有哨兵节点的链表的头节点为NULL,处理起来也和其他情况不同。带哨兵节点的链表,当其为一个空链表时,仅含哨兵节点,哨兵节点的指针域为空,和其他情况的表尾是一样的。”我还是更倾向于叫他虚位结点,它作为一个假的首结点,里面为空,真正链中第一个元素在第二个节点中,对链表中首位元素的插入和删除就可以在第一个结点和第二个结点之间进行,避免对第一个结点的特殊操作,提高效率。

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

问题1:不清楚LinkedStack中的pop方法。

T result = top.getElement();
top = top.getNext();
count-;

问题1解决方案:结合LinearNode代码理解,先将top中的元素获取并赋值给result,返回result,再用LinearNode中的getNext方法获取下一个元素到top中,这样实现了弹出元素的操作。

代码托管(https://gitee.com/li_jinquan/ljq/tree/master/src

https://gitee.com/li_jinquan/ljq/tree/master/

上周考试错题总结

上周无考试

点评过的同学博客和代码

本周结对学习情况
20182311

感悟

本周事情比较多,学习时间不足,需要及时调整,花更多时间和精力去调整。继续加油。

参考资料

《Java程序设计与数据结构教程(第二版)》

《Java程序设计与数据结构教程(第二版)》学习指导

原文地址:https://www.cnblogs.com/lijinquan/p/11789679.html

时间: 2024-11-08 23:45:06

20182335 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结的相关文章

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

20182304 2019-2020-1 <数据结构与面向对象程序设计>第四周学习总结 教材学习内容总结 1.本章我们学习了使用并编写我们自己的类:类中有与类同名的构造方法,也可以有set,get,toSring与自己定义的方法.实例化一个对象,可通过该对象使用类里的所有方法.实例数据是每次创造一个实例后自动生成新的内存空间的变量 2.uml类图 :每个类可能包含三部分内容:类名.属性.操作(方法).UML类图有属于自己的语法,变量的类型名在变量名的后面,它们之间用冒号作为分隔符,方法的+和-

20182306 2019-2020-1 《数据结构与面向对象程序设计》第五学习总结

20182306 2019-2020-1 <数据结构与面向对象程序设计>第五学习总结 教材学习内容总结 尽量简单的总结一下本周学习内容 尽量不要抄书,浪费时间 看懂就过,看不懂,学习有心得的记一下 教材学习中的问题和解决过程 问题1:XXXXXX 问题1解决方案:XXXXXX 问题2:XXXXXX 问题2解决方案:XXXXXX ... 代码调试中的问题和解决过程 问题1:XXXXXX 问题1解决方案:XXXXXX 问题2:XXXXXX 问题2解决方案:XXXXXX ... 代码托管 (stat

2014025644 嵌入式程序设计 第七周学习总结

嵌入式程序设计 第七周 有名管道 有名管道和无名管道的区别 (1) 无名管道:管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管道:只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程). 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中. 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出.写入的内容每次都添加在管道缓冲区的末尾,并且每次都是

2014025689 嵌入式程序设计 第七周学习总结

嵌入式程序设计 第七周   第七周课程主要学习了有名管道和消息队列的传输和接收.   一丶有名管道   有名管道和无名管道的区别: 1.  有名管道定义:可以使互不相关的两个进程实现彼此通信的管道就是有名管道.有名管道可以通过路径名来指出,并且在文件系统中是可见的.在建立了管道之后,两个进程就可以把它当作普通文件一样进行读写操作,使用非常方便.不过值得注意的是,FIFO 是严格地遵循先进先出规则的,对管道及 FIFO 的读总是从开始处返回数据,对它们的写则把数据添加到末尾,它们不支持如 lsee

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

教材学习内容总结 1.继承的基本语法与用法. 2.利用UML类图表示继承关系. 3.在具体编写类的时候,先是数据声明再是方法声明. 4.toString方法用println或print或字符串连接会自动调用. 5.每创建一个对象.都会为类中声明的变量建立新的内存空间. 6.UML图一些基础使用方法. 7.对象应该是自管理的,既对象的实例数据应该仅由该对象来修改,这就构成了封装. 代码调试中的问题和解决过程 问题1:测试代码出现错误 问题1解决方案:junit的方法名必须是textxxx或xxxt

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

教材学习内容总结 1.编写类与方法(构造方法的结构和用途) 2.实际参数与形式参数.public与private.return与void的区别与含义. 3.UML类图的含义与形式 4.静态类(Math类)静态变量.静态方法 5.类间关系(依赖关系.聚合关系.继承关系) 6.接口的使用,能够在某个类中实现接口的方法(Comparable.Iterator) 7.软件活动开发.方法设计.方法重载.测试(黑盒测试.白盒测试) 教材学习中的问题和解决过程 问题1:toString与return返回的值的

20182327 2019-2020-1 《数据结构与面向对象程序设计》实验二报告

20182327 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名:赵天昊 学号:20182327 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,测试验证. 2. 实验过程及结果 不多说,上

20182319《数据结构与面向对象程序设计》实验二报告

20182319 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 彭淼迪 学号:20182319 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,用规定方法测试验证. 2. 实验过程及结果

# 20182331 2019-2020-1 《数据结构与面向对象程序设计》实验二报告

20182331 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 高宽让 学号:20182331 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,测试验证.(https://www.cnb

20182330 2019-2020-1 《数据结构与面向对象程序设计》实验二报告

20182330 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 魏冰妍 学号:20182330 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 编写简单的计算器,完成加减乘除模运算. 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. 编写测试代码,测试验证. 2. 实验过程及结果 编写简单计算器,借鉴c语言语法