声明
全是我个人笔记,如有错误,欢迎指正。
总结
这一章大多是概念性的东西,重在李姐。
🌟 咱必须要知道啥是数据元素、数据项、数据对象、数据类型、数据结构。
通俗一点,数据元素是表中的一个记录,数据项即表的每一列,数据对象是表中记录的集合。数据类型分了三种:原子类型、结构类型和抽象数据结构。原子类型就好比我们平时用的int、float之类;结构类型好比int和float组合起来的结构体;抽象数据类型重点在于抽象,它是一个数据对象集+这个集上的操作,它没有具体的数据类型,或者说多种数据类型都适用。数据结构和数据对象在定义上的区别是数据结构是侧重于关系的数据元素,数据对象侧重于相同性质的数据元素。
抽象数据类型可看浙大数据结构课程的视频,链接如下:
🌟 咱必须要知道什么是逻辑结构、存储结构。
逻辑结构有点像我们现实世界里对物体关系的描述,比如图书馆里的书,可以一本挨一本地放,也可以按字母序号放。前者就是线性结构,后者就是非线形结构。线性结构是一个接一个,而非线形结构是一个接多个或者多个接多个。存储结构是把逻辑结构放到计算机中实现,就像上面提到的图书一本接一本的放,弄到计算机里面如何实现呢?把计算机的内存想象成一个很大的眼影盘,每个格子有一个独一无二的编号,且假设每个格子能装一本书的信息。那么我们可以把书按照格子的编号从小到大按顺序放,这是顺序存储;或者书随便放,但是前一本书带有后一本书的格子编号,这是链式存储。等于说,对于书而言它们都按照逻辑的顺序来的(即一本接一本),但是它们在计算机中放置的位置就不一定按顺序。至于索引存储和散列存储,后面再说。
🌟 咱必须要知道什么是时间复杂度和空间复杂度。
对时间复杂度的理解:一个算法中所有语句执行的次数之和是T(n),n为该算法的问题规模。但是如果算法太复杂了,T(n)变得冗长就不太方便,因此这里用到大O记法。如T(n)=,则T(n)=O(
),相当于一种简化:随着n的增大,我们主要看n的数量级最高的那项,系数要改为1,其他项就不用再写了。
对空间复杂度的理解:略。
习题1.1.3
一、选择题。
1、可以用啥定义一个完整的数据结构? 数据结构的定义是相互之间存在一种或者多种特定关系的数据元素的集合。从定义来说可以排除ABC答案,因为数据元素、数据对象和数据关系都不全。至于抽象数据类型,它是一个数据对象集+这个集上的操作,虽然浙大数据结构课程上就是用抽象数据类型来表示数据结构的,但我不知道怎么把它说通。
2、如何区分线性结构和非线性结构?把逻辑结构的分类都背下来,或者学完整本书,就很简单了。线性结构是一个接一个,非线形结构是一个接多个或者多个接多个。
3、4、如何区分逻辑结构和存储结构?我觉得是要靠积累的,因为选项中顺序表和单链表分别是线性表的顺序存储和链式存储,第一章会学到。循环队列是队列的顺序存储,第三章会学到。哈希表是散列表,即散列存储,在第七章会学到。栈嘛,本来就是逻辑结构,书上有的。至于有序表,书上没找到这个术语,我百度了有序表和顺序表的区别,人家直接就说有序表是逻辑上的有序,顺序表是物理上的有序。害,就这样吧,靠积累靠积累。
5、数据结构、逻辑结构和存储结构三者关系的正确理解?逻辑结构是独立于存储结构的,因为逻辑结构是人在现实世界构想的,而存储结构是要把你这些构想放到计算机中实现。实现的方法可不是唯一的,比如线性表放的计算机里可以是顺序存储来实现,也可以是链式存储来实现。数据结构的三要素是逻辑结构、存储结构和数据运算。
6、存储数据时不仅要存储其值还要存储其关系。我是靠感觉选的,官方也解释不出所以然。
7、链式存储的特点?这题学了链式存储再来做很好懂。就像总结部分举的例子,图书随便放在格子里,但是图书必须带有下一本图书的地址。这里,一个结点 = 图书 + 下一本图书的地址,结点内的地址是连续的,结点外的地址不一定连续,如下图所示。
二、应用题。
1、 数据结构的三要素:逻辑结构、物理结构和数据运算。两个数据结构不一样,有可能是逻辑结构、物理结构相同,但是数据运算不同。书上举了例子,但我遗忘很多,后面再来补充吧。
2、同一种逻辑结构,分别用不同的存储结构来实现,运算效率会不一样。在学了第一章之后,就可以用线性表来举例,顺序表和单链表,在按位查找、插入和删除这些运算上效率都是不一样的。
习题1.2.3
1、概念题,难讲,略。
2、问题规模就是n,排除AD。执行时间不一定是,也可以是
,
等,选C。
3、 i可能的数有1、2、4、8、16、32、...这就是个等比数列 。
4、 和3题很像,x的取值是2、4、8、16、32、...为等比数列。
5、 该算法从n开始不断递归,每次递归就多乘一个数,直到该数为1。因此时间复杂度为O(n)。
6、这题简单但是我突然有点懵,等后面再更。
7、做过3、4题了应该知道外层循环是,内层循环是n,所以时间复杂度为O(
)。
8、懒得做了,罢工。。。(如果在评论区催促我一下也许会更的↖(^ω^)↗)