第二章小结

第二章小结

早听说数据结构要比程序设计要难,我早早就做好了心理准备,可是现实好像比我想象的还要难一些。这个星期基本结束了第二章关于线性表的学习。对于顺序表,上学期接触的比较多学起来还算比较顺利。链表就有一点困难了。书上没有完整的代码段,只是一些算法,不得不说一开始我真的有点蒙圈的感觉。但后面经过了预习以及上网查找资料就开始慢慢接受了单链表。

和顺序表不同,单链表是存储在连续或者不连续的空间里面的。每一个数据都必须跟着一个地址,指向下一个数据。虽然可能空间利用率比不上顺序表,但在插入删除操作时就显示出明显的优势了。操作简便,节省时间。插入和删除,或者是创建链表的操作,看起来都很复杂。一开始我也不是很能接受。后来反复的画图,演示之后总算是明白了。以我个人来看,实际上也就是转换地址域的值的过程。不过要相当注意的是,一定要有先后分明的顺序。不同的顺序,就可能会有不同的结果了。

在完成这周的作业时,着实碰到了不少的困难。由于书上没有完整的代码,我就有些下不去手。一开始在构建顺序表和单链表的时候我就有一些卡顿了。我不知道该用怎样的格式去写。其中一些类似于 typedef的之前也没见过,没太明白什么意思。后来也还是上网查了之后才找到了格式。我觉得对于程序来说,首先要知道怎么一个架构来写时间很重要的事情吧。

再就是在做求交集的实践题时,由于老师给了一个100000的大数据,我使用两个循环的算法毫不意外的超时了。这在之前我是重来没有遇到过的。如果想要减少运行的时间,就必须要简化算法。一开始我采取的是一个一个循环对比再存放的方法,但这样无疑是无比浪费时间的,而且后面还需要排序。

一开始没有想那么多,觉得可能是排序浪费了很多时间,所以我就修改了一下,直接用sort进行了排序。结果确实是减少了时间,然而还是运行超时了。

我想了很久还是没有想到好的解决办法,在课堂上一个同学的回答启发了我。如果是两个已经排好序的集合,那么每次对比都不需要从第一个数开始对比,只需要从上一个对比的数开始就可以了。上完课中午回到了宿舍,改了代码之后,瞬间就不超时了。甚至是快了近5倍。

后来老师又在课上教了归并合并数列的方法。对两个数列进行对比,成功了,就进行下一轮对比,不成功则进行对小的集合进行下一个数据比较。她稍微提示了我们,事实上在求交集是也是可以这么做的。

最后通过实践表明,这样确实要更快。

通过这几次的修改,这几次的进步,我深刻感受到了算法的重要性。也开始学会了去分析一个算法的时间以及空间的复杂度。写一个程序不应该仅仅只是为了解决问题,而应该是为了解决问题找到最佳的解决办法。

在这章的学习了,我参考了网站https://blog.csdn.net/qq_42623428/article/details/82987274的一些相关资料。这是一个博客。里面是关于c++编程的一些比较基础的知识点。但是在这个博客中,这些知识被分成了一些小点,可以分类的,有方向的学习。我觉得比较有用,毕竟经过了一个寒假,一些基础的知识确实有些忘记了。这里可以比较便捷的查到想要找的的知识点,也可以加深一下之前学习的知识。

目前学习暂时还可以,一般的困难都可以解决,不一般的困难在网上也差不多可以找到答案。但是还存在一些问题,我觉得我的自主学习能力不够强,学习方向怀不够明确。换而言之也就是不够自觉,没确定好目标。

接下来下一章的学习我的目标是:可以在课外更多的自我学习,自主解决问题。

原文地址:https://www.cnblogs.com/ilikezero/p/10540583.html

时间: 2024-10-10 01:44:27

第二章小结的相关文章

C++ 编程第二章小结

switch()用法的注意事项 1:switch语句中的表达式只能是整形数据,字符型数据和枚举型数据,case后面的产量表达式的类型必须与switch括号后面的类型相匹配 2:各个case(包括default)的出现次序可以任意,每个case在带有break的前提下,case的次序不影响执行结果 循环设计 循环设计的几种分类方法这里介绍几种 1:字符图形类 2:素数判断类 3:逻辑判断类 4:级数逼近类 a:对于图形类的基本循环格式一般是 for(int i = 1; i < 10 ;i ++)

[看书][CSS精粹(第2版)]第二章小结

刚看完CSS精粹的第二章,主要讲了跟文字样式相关的操作方面的东西. 虽然这本书貌似挺遭嫌弃(豆瓣上都没什么人标记),也的确内容有些过时,但我还是觉得有些基础的东西可以学习下,CSS方面比较基础又比较实用的东西. 重点是链接a.列表ul.标题行h和基本元素段落p的文字布局东西. a元素的伪类定义,下划线 列表ul的第一个列表项伪类first-child的定义,列表项的项目符号(符号修改和使用图片),列表项水平显示 标题行h的背景色,下划线,与后续段落之间的大间隔去除 段落p的行高,水平线,缩进,首

【数据结构】第二章小结

ps:第一次用博客园写,记录第一次 一.数据结构第二章主要为:顺序表和链表的构造及其增删查改的一些基本操作,以及粗略计算它们的时间or空间的复杂度. 1.顺序表: (1)  特点:逻辑结构上相邻,物理存储上也是相邻的,属于随机存储: (2)  优点:便于使用下标进行查找,例如:查找某数组的第6项的数据是几: 存储密度为1: (3)    缺点:由于其物理存储相邻,故无法将空间中零零散散的碎片空间利用起来: 2.链表: (1)   特点:逻辑结构上相邻,物理存储上不一定相邻的,属于顺序存储: 单链

数据结构第二章小结

第二章主要学习的是线性表,其中包含了顺序表以及链表,顺序表有两种结构体定义,一种是指针,再申请相应数组空间,一种是直接定义数组,前者数组为堆空间,后者则为栈空间,如果数组长度过大,得考虑空间是否充足问题,因而前者适用性更好: 链表主要为单链表,循环链表,双向链表:主要涉及到删除.查找.插入等操作,在学习链表过程中,主要问题是没能充分理解语句的意思,在插入语句中,类似p=s(p为辅助指针.s为指向新结点的指针)总是理解为这一步就插入成功了,插入应该是通过辅助指针来改变所指向的结点的数据域,这样才是

汇编语言程序设计第二章小结

一.通用寄存器:AX.BX.CX和DX.(均为16位,可存放2个字节).都可以分为两个独立的8位寄存器.(eg:AH和AL,其中AL为低8位,AH为高8位.) 二.字在寄存器中的存储 1字节(byte)=8bit,1个字=2字节=高位字节+地位字节,分别对应存在高位寄存器和低位寄存器中. 三.汇编指令 注意:在写一条汇编指令或一个寄存器名称时不用区分大小写. 引入:mov和add 溢出问题:AH和AL是两个不相关到的寄存器,当操作AL中有进位时,AL不会向AH进位. (eg: mov ax,00

信号完整性第二章小结

信号的上升时间通常是从终值的10%~90%的时间 理想方波的频谱幅度以速率1/f下降 如果去掉方波中较高的频率分量,上升时间久会增加 信号的带宽是0.35/(信号的上升时间) 只要减小信号带宽,上升时间就会增加 测量带宽是指具有较好测量精度时,信号的最高频率分量 模型的带宽是指模型的预测值与互连线的实际性能的测量值能很好吻合时候最高正弦波频率分量 互连线的带宽是指信号的性能依然能满足指标时的最高正弦波频率

Unity 游戏框架搭建 2019 (九~十二) 第一章小结&amp;第二章简介&amp;第八个示例

第一章小结 为了强化教程的重点,会在合适的时候进行总结与快速复习. 第二章 简介 在第一章我们做了知识库的准备,从而让我们更高效地收集示例. 在第二章,我们就用准备好的导出工具试着收集几个示例,这些示例中有的是我们后续库的基础工具,也有的是在项目中非常实用的小工具,还有一些示例是实践了在框架搭建方向上非常重要的 C# 语法知识. 第二章大纲如下. 第八个示例(一) 在之前,我们完成了一个导出的功能.但是在完成这个功能的过程中,我们也遇到了一些问题.我们回忆一下,在<MenuItem 复用>的这

数据结构学习小结2 (第二章:线性表)

一.小结(1)认为最重要的内容小结:1.链表和顺序表的操作的代码实现.(初始化.创建.取值.查找.删除.插入)2.线性表的应用:线性表的合并:有序表的合并3.一元多项式的和的代码实现. (2)其他杂七杂八的收获:1.更深理解了->的含义:->是指针的指向运算符,通常与结构体一起使用.[从小组成员上获得的收获]2.通过作业和视频学习了单链表的逆转的实现3.尾指针不为空,尾指针->next才为空4.看了老师“带你打代码”里面有序表合并的代码写法,让我更熟悉一些操作,譬如: 新建一个结点: (

第二章学习小结

数据结构第二章的学习结束了,了解了顺序表,单链表的建立,插入,删除,查找的算法,以及对它们时间复杂度,空间复杂度的分析.学会区分头指针,头结点和首元结点. 前插法,后插法创建单链表,相比之下,我觉得后插法比较好理解.双向链表就是那个表示被处理结点的前驱的后继(p->prior->next),结点的后继的前驱(p->next->prior)要区分开. 作业,说实话,一开始的时候,我真的很懵,书上的算法描述,我可以看的很明白,同时也感到很奇怪,甚至还一度认为那是可以敲上电脑进行编译运行