目录
首先说明一下 期末不挂科 系列专为零基础计算机小白所写,因而不会涉及太多较难问题,基本上都是书本中的知识点和一些简单例题,建议搭配系列习题(会有详解~)作为巩固练习【期末不挂科 数据结构】绪论习题(详解版),预祝大家期末考试都不挂科,取得一个好成绩~
1.1 数据结构
什么是数据结构呢?
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
数据:所有能输入到计算机中且能被计算机处理的符号的总称。
数据元素:是数据的基本单位,表示数据集合中的一个个体。
数据项:数据元素中有独立含义的最小单位。
是不是感觉有点听不懂呢?没关系,待会我们可以通过一些习题来更深地体会这些名词的含义。
接下来我们通过一张图来了解一下关于“数据结构”我们要学习的内容吧:
1.2 时间复杂度
时间复杂度:在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,是问题规模n的函数(以数量级的形式给出)。它定性描述该算法的运行时间,常用O符号表述。通俗来讲就是算法执行时所消耗的时间量。
是不是每次看这种定义的时候都有些云里雾里呢?没关系我们来看一个例题来理解一下:
/*对于如下计算整形数组a[0...n-1]各元素之和的算法
求其算法的时间复杂度*/
//算法中每一条语句右边注释的内容为该行语句的语句频度
public static int sum(int a[]) {
int n = a. length, s = 0; //1
for (int i = 0; i < n; i++) //n+1
s = s + a[i]; //n
return s; //1
}
第5行代码运行了一次很好理解吧,那为什么第六行代码运行了n+1次而不是n次呢?其实很简单啦,因为i=0 所以i=0,1,2...n,所以就是n次了。那为什么第七行2代码又变成n次了呢?因为当i=n时,只运行到了第六行代码,通过第六行代码判断出此时i已不满足i<n,便不再进行第七次代码的运行了。第八行代码return跳出for循环只运行一次。所以此算法中所有语句的执行次数之和为 2n+3
需要注意的是,算法的执行时间与指令序列的执行次数之和成正比。随着n的不断增大,2n+3可以近似于n,所以时间复杂度就是O(n)。如果是执行次数是2n²+3,那么时间复杂度就是O(n²)。
1.3 空间复杂度
空间复杂度相较于时间复杂度就好理解很多了,它指的是算法所需存储空间的量度,记作S(n)=O(f(n))其中n为问题的规模,即算法的空间复杂度也是以数量级的形式给出。
1.4 小知识点
(绪论部分的知识点有些碎,也有一些需要记忆的部分,以下知识点也是我在听课时做的一些小笔记,看完知识点后,可以尝试自己做一下后面的例题部分)
1.数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的 关系 和 运算 的学科
2.数据的逻辑结构反映属于元素之间的次序关系,它依赖于数据存储结构。(逻辑结构可用于不同的存储结构实现,因此无直接关系)
3.算法的5个特性:有穷性、确定性、可行性,有零个或多个输入,有一个或多个输出
4.数据结构中评价算法的两个性能指标是 时间复杂度、空间复杂度
5.数据结构的概念包括数据之间的逻辑结构、数据在计算中的存储和数据运算
6.数据的逻辑结构与数据元素本身的内容和形式无关
7.常见数量阶:常数阶O(1)、线性阶O(n)、平方阶O(n²)、立方阶O(n³)、对数阶O(㏒₂n)、指数阶O(2ⁿ)
不同算法时间复杂度比较关系:
O(1)< O(㏒₂n)< O(n)< O(n㏒₂n)< O(n²)< O(n³)< O(2ⁿ)< O(n!)
1.5 例题
1.判断题
1-1 数据结构概念包括数据之间的逻辑结构、数据在计算机中的存储方式和数据的运算三个方面。T(见小知识点)
1-2 数据的逻辑结构与数据元素本身的内容和形式无关。 T (见小知识点)
2.单选题
2-1 若要对n个数进行排序,则这个问题的规模指的是( C )。
A. 排序时间的大小 B. 不同排序方法有不同的规模 C. n的大小 D. A和C
(注意问的是问题的规模)
2-2 基本术语 ▁B▁ 是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
A. 二进制位 B. 数据元素 C. 数据项 D. 数据对象 (这个知识点需要记忆)
2-3 数据结构(实例) 观察下面的数据结构
DS = ( D,R )
D = { 17, 23, 45, 52, 63 }
R = { r1, r2, r3 } r1 = { 〈 17, 52 〉,〈 23, 45 〉,〈 45, 63 〉 }
r2 = { 〈 17, 23 〉,〈 52, 45 〉 }
r3 = { 〈 17, 45 〉,〈 52, 63 〉 }
它是( D )
A. 集合结构 B. 线性结构 C. 树形结构 D. 图状结构
(可以看下1.1数据结构里的思维导图,图状结构是多对多的关系)
2-4 数据逻辑结构可以分为( B )。
A. 线性结构和图结构 B. 集合结构、线性结构、树结构和图结构 C. 顺序结构和链式结构 D. 集合结构和非线性结构
2-5 关于数据 下面数据表格中的每一行称为一个 ▁▁B▁▁。
A. 数据 B. 数据元素 C. 数据项 D. 数据对象
2-6 关于数据 下面数据表格任意一行中的某个栏目称为一个 ▁▁C▁▁。
A. 数据 B. 数据元素 C. 数据项 D. 数据对象
2-7 关于数据 下面数据表格作为一个整体称为一个 ▁▁D▁▁。
A. 数据 B. 数据元素 C. 数据项 D. 数据对象
(前面提到了一些数据元素数据项等概念,不太理解的同学可以通过这5/6/7三道题来体会一下哈~)
2-8 关于存储结构 ▁▁B▁▁ 的特点是借助指示元素存储地址的指针来表示数据元素之间的逻辑关系。(这个前面没怎么提到,不过也不用担心,这个主要靠理解,想了解的同学可以戳戳四种基本存储结构 这也是我从其他csdn大佬那里看到的)
A. 顺序存储结构 B. 链式存储结构 C. 索引存储结构 D. 散列存储结构
2-9 算法的时间复杂度与( A )有关
A. 问题规模 B. 计算机硬件性能 C. 编译程序质量 D. 程序设计语言
2-10 某算法的时间复杂度为O(n²),表明该算法的( C )
A. 问题规模是 n² B. 执行时间等于 n² C. 执行时间与 n² 成正比 D. 问题规模与 n² 成正比
(9/10两道题主要考察时间复杂度的定义及相关内容,忘记的同学可以返回去看看)
1.6 写在最后
①搭配课后习题巩固学习效果会更好哦~(课后习题更新中)
②该系列数据结构使用语言为Java,但是数据结构本身是一种逻辑上的概念,它是独立于特定语言的,所以学习数据结构不必拘泥于某种特定语言,每种语言都可以实现特定的数据结构,差别只在于语法实现级别。
③该系列数据结构知识点内容参照 中国大学mooc 徐爱琴老师的 郑州大学 数据结构(java版)
④ 该系列数据结构代码案例与课后习题参照书本 《数据结构——Java语言描述》
该系列数据结构为梨子(我)在学习数据结构时总结出的知识点,例题为自己做题时觉得还不错的题目,习题为书本课后习题。如有任何错误希望大家可以多多指正哈~如果觉得我的文章写的还不错,可以给个三连!!!我也会按照自己的学习进度持续更新的哦~
最后希望大家都能通过数据结构这门考试并且有所收获,我们一起加油吧!