数据结构-绪论
数学模型分两类:数值计算类,非数值计算类
数据结构的设计能决定算法效率的好坏
1.数据 所有能够被计算机识别(输入输出存储处理显示)的符号(数字,图像,语音等)集合
2.数据元素
是数据集合中的一个个体,是数据结构中讨论的基本单位
3.数据项
数据结构中讨论的最小单位,数据元素可以是数据项的集合
4.数据对象
具有相同性质的数据元素的集合。如电话本数据对象中数据元素是每个人的记录
5.数据结构
6.逻辑结构
数据之间客观存在的关系,和数据在计算机中如何存储无关。
可以归结为四类。
6.1 线性结构 表示数据元素之间存在 一对一的关系
6.2 树形结构 表示数据元素之间存在一对多的关系
6.3 图形(网状)结构 表示数据元素之间存在多对多的关系 数,图型结构又称为非线性结构
6.4 集合结构 数据元素关系松散
存储结构(物理结构)
顺序存储和链式存储
1.顺序存储结构:把逻辑上相邻的元素存储在物理位置相邻的存储单元中 (通常借助数组实现)
顺序存储结构 可快速确定元素地址,因此存取元素的速度快,每个元素的访问速度一样,也叫随机存储结构。
2.链式存储结构:在数据元素中添加一些地址或辅助结构,用于存放数据元素之间的关系(通常借助指针或索引实现)
所有的逻辑结构,既可以采用顺序存储结构,也可以采用链式存储结构。针对算法效率,选择合适的存储结构。
8.数据结构的操作
元素的查找,插入,删除,遍历和排序等。
以下与数据的存储结构无关的术语是( ) A 顺序队列 B 链表 C有序表 D 链栈
答案为C。
原因:题目问与数据的存储结构无关的是其他三个答案都指出数据采用的存储结构,A:顺序存储,B和D:链接存储。而C只要求表是有序的,而没要求是顺序存储还链接存储。故选C
9.数据类型
程序设计语言中用来刻画操作对象特性的一个值的集合和定义在此集合上的一组操作的总称。
10.抽象数据类型(ADT)
与数据结构相比,抽象数据类型不用考虑存储结构。
算法性质
算法设计要求
算法的时间复杂度
(1)去掉f(n) 中的所有加法常数
(2)只保留最高阶项
第3步:控制排序的遍数
其实第六遍的时候就排好了序,算法有提升的空间
算法改进:
对数时间复杂度一定小于次方时间复杂度,次方时间复杂度低于指数时间复杂度
两两点之间无边的判断,时间复杂度是k平方
n个定点选出k个顶点出来
有时复杂度很难用O(n)表示,比如下面的代码:
i=1;
while(i<n)i+=i;
到底复杂度多少呢?这里其实是2部分:i=1的复杂度是1,while的复杂度需要计算,肯定大于1,根据我们前面总结的顺序执行流程复杂度规则,整个复杂度取大的,应该是while循环的复杂度。while循环复杂度我们不会计算,但我们会计算循环次数:i的值变化是:1,2,4,8...2^k,最后一项i=2^(k-1)>=n退出循环,这时2^(k-1)>=n,k>=logn+1,所以循环k=logn+1次,则退出循环,所以时间复杂度就是O(logn)