数据结构笔记1(绪论及其理解)
前言
10月20日写了《 数据结构笔记1绪论》,今天回顾一下,重新理解细节,突出重点。
笔记
考什么怎么考
数据结构863的考试内容是数据结构中的绪论、线性表、栈与队列、串、数组、树与二叉树、图、查找、排序共九个内容。
考试题型包括选择题、判断题、应用题。
在绪论部分考数据结构与算法的基本概念以及时间复杂度的使用;
线性表中考顺序表与单链表的特点、增删改查的操作、操作的时间复杂度;重点考单链表的插入;
栈与队列考栈与队列的概念与算法;
串与数组考串的概念以及模式匹配、数组的元素地址;
树与二叉树考二叉树遍历、二叉树的特点、二叉树的算法。
图考图的基本概念、存储结构(邻接矩阵、邻接表)、遍历算法、四个基本应用(最小生成树、最短路径、拓扑排序、关键路径)
查找考静态查找的概念(顺序、折半、分块)、动态查找表的B+树的概念、以及二次叉排序树的算法;
排序考八种排序的使用以及基本概念。
单选题常考概念以及计算;
判断题考概念
应用题考算法和作图;如单链表插入算法、队列算法、二叉树递归算法、二叉排序树算法、串的模式匹配、树的叶子节点、树与森林的转换、图的邻接表和邻接矩阵、图的关键路径、最短路径、排序的操作;
如何准备
对于判断题把握基本概念、对于选择题把握概念以及计算、对于应用题把握算法;
自身情况:基本概念和计算还行,继续巩固;算法不做,需要补充。
结论:巩固基本概念以及计算;重点联系数据结构的算法。
数据结构与算法基本概念
数据结构基本概念
定义:数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。
数据元素:数据的基本单位,即数据集合中的一个个体。
数据项:数据的最小单位,一个数据元素可由若干个数据项组成。
根据数据元素间关系的基本特性,有四种基本数据结构
- 集合:数据元素间除“同属于一个集合”外,无其它关系。
- 线性结构:数据元素之间存在一个对一个的关系,如线性表、栈、队列
- 树形结构:一个对多个关系,如树
- 图状结构:多个对多个关系,如图
数据结构的逻辑结构:抽象反映数据元素的逻辑关系;算法设计就是设计逻辑结构;
数据结构的物理结构(存储结构):数据在计算机存储器中的实际表示;算法实现就是物理上的存储实现。
比如说新建顺序表的逻辑结构就是顺序表在算法上的表示,其存储结构是连续存储空间的分配;新建单链表的逻辑结构是单链表在算法上的表示,其存储结构是离散存储空间的分配;
在数据结构中就是用逻辑结构进行算法设计;其背后的物理结构是编译器或解释器进行编译解释的,大致了解即可。
算法基本概念
定义:解决某一特定问题的具体步骤的描述,是指令的有限序列。
算法就是步骤的描述。
是一个处理框架。算法思想其实就是安排步骤的策略;比如说爬虫的步骤就是发出请求,接受信息,存储信息。Python爬虫根据这个步骤于是实现了一个自动化的处理框架。计算机的工具十分高效。
主要特性
-
1)有穷性- 必须在执行有穷步之后结束
-
2)确定性- 每条指令有确切含义,不产生二义性
-
3)可行性- 所有操作都是可以实现的
-
4)输入 - 有零个或多个输入
-
5)输出 - 有一个或多个输出
这是算法在计算机中的解读。
其实数学的公式也是一个算法,输入信息,处理信息,输出信息。并且答案确定。
材料分析也是一个算法,自洽逻辑的算法。输入信息,处理信息,输出信息。有一个自洽的答案。
评价标准
-
正确性(correctness)
-
可读性(readability)
-
健壮性(robustness)
-
效率与低存储量 (运行时间、占用空间)
正确性。代码首先需要正确实现基本功能。通常通过功能测试、边界测试、负面测试三个方面
可读性。主要是规范化。实现规范化虽然在第一次开发的时候会比较繁琐,但是便于二次开发;有助于代码的成长;规范性注意通过代码布局、规范命名两个部分去提升。在前端有专业的代码格式化插件,可以帮助提高代码的可读性;2020最新版vscode格式化代码;
健壮性。主要是输入的处理。正常是指程序能够判断输入十分合乎规范要求,并对不规范要求的输入给予合理处理。其实就是编程的异常处理。除了输入的异常处理,其实还有死循环的处理。这两部分确保代码的健壮性。健壮性其实和正确性有一定关联。
节约时间与空间。其实和经济学面临的问题很相似,都是对稀缺资源进行资源配置。为了衡量节约时间与空间的程度,计算机科学家定义了时间复杂度与空间复杂度。面对同样的问题,不同的算法会带来不同的时间复杂度,而不同的时间复杂度会带来的不同的响应时间。我们自然希望结果快点出来。所以优化代码的时间复杂度很有必要。优化时间复杂度的小知识有很多,我这里就不展开了,可以百度。除了时间的优化,还有空间的优化,不过由于摩尔规律,硬件的提升迅速,空间的优化没有时间的优化那么要紧,常常使用以空间换时间。
时间复杂度与空间复杂度
- O(1)<O(log2n)<O(n)<O(n*log2n)<O(n2)<O(n3)<O(2n)<O(n!)
例题解析
概念性的好像没必要解析。
1.一个算法应该是( )。
A.程序
B.问题求解步骤的描述
C.要满足五个基本特性
D.A和C
B
2.以下数据结构中,( )是非线性数据结构
A.树 B.字符串 C.队 D.栈
A
( )数据元素是数据的最小单位。
错,数据项才是最小的单位
( )健壮的算法不会因非法的输入数据而出现莫名其妙的状态。
对
( )数据的逻辑结构是指数据的各数据项之间的逻辑关系。
错,逻辑结构是反映数据元素之间的逻辑关系
( )数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的储存结构。
错,逻辑机构是算法设计。是用来形象表示数据的存储结构。
( )数据的物理结构是指数据在计算机内的实际存储形式。
对
( )数据结构的抽象操作的定义与具体实现有关。
错。
总结
想实现一个开源的试题库。这样就可以在线做题,同时还有解析。就是不知道会不会侵权什么的。不然做一个免费的答题平台,还是有可行性的。
用博客的形式,用户可以创建自己的试题库,可以自己测试,并且可以公开,在没个题下有专门的评论区和解析区。
这个在力扣、牛客网都有实现。但是他们的需要收费。如果开源,大家一起开发,一起使用,并且免费,应该可以成功。而且有助于大家学习。
尝试写一下策划书。
更新地址:GitHub