数据结构(C语言版)---基本概念和术语
1、程序=数据的存储+数据的操作+可以被计算机执行的语言
2、数据:对客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
3、数据项:数据的不可分割的最小单位。
4、数据元素:数据的基本单位。一个数据元素可由若干个数据项组成。
5、数据对象:性质相同的数据元素的集合,数据的一个子集。
6、数据的逻辑结构:数据元素之间的逻辑关系。与数据的存储无关,独立于计算机。
线性结构(一对一):线性表
非线性结构:集合、树形结构(一对多)、图形结构/网状结构(多对多)
7、数据的物理结构/存储结构:数据结构在计算机中的表示/映象。
1)、顺序映象:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。对应于顺序存储结构。
2)、非顺序映象:借助指示元素存储地址的指针表示数据元素之间的逻辑关系。对应于链式存储结构。
3)、存储结构主要有四种:
顺序存储:逻辑上相邻物理上也相邻
优点:随机存取
缺点:只能使用相邻的一整块存储单元。
链式存储:借助指示元素存储地址的指针表示数据元素之间的逻辑关系
优点:能够充分利用存储单元
缺点:因存储指针而占用额外的存储空间,只能实现顺序存取
索引存储:附加索引表
优点:检索速度快
缺点:附加索引表占用较多存储空间
散列存储/Hash存储:根据元素的关键字直接计算出元素的存储位置
8、数据结构:
1)、狭义:
数据结构是专门研究数据存储的问题
数据存储包含两方面:个体存储+个体关系存储
广义:
数据结构既包含数据的存储也包含数据的操作
对存储数据的操作就是算法
2)、形式定义---二元组,Data_structure=(D,S),D---数据元素的有限集,S---D上关系的有限集。
3)、数据结构=个体+个体的关系。
9、算法: 解题的方法和步骤
1)、狭义:
算法是和数据的存储方式密切相关
广义:
算法和数据的存储方式无关
这就是泛型的思想
2)、衡量算法的标准
时间复杂度T(N)=O(f(n))
大概程序要执行的次数,而非执行时间
分析时间复杂度时的规则
加法规则:T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
乘法规则:T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))
常见的渐进时间复杂度
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
空间复杂度S(n)=O(g(n))
算法执行过程中大概所占用的最大内存
算法原地工作是指算法所需的辅助空间为常量,
难易程度
健壮性
3)、算法=对存储数据的操作。
4)、重要特性:有穷性、确定性、可行性、输入、输出
5)、目标/要求:正确性、可读性、健壮性、效率与低存储量需求
10、数据的线性存储结构有几种
1)、连续存储【数组】
优点:存取速度快
缺点:插入删除元素很慢,空间通常是有限的,事先知道数组的长度,需要大块连续的内存块
2)、离散存储【链表】
优点:空间没有限制,插入删除元素很快
缺点:存取速度慢
11、数据类型:一个值的集合和定义在该值集上的一组操作的总称。
原子类:值不可分解,eg.C中的基本类型、指针类型、空类型。
结构类型:值由若干成分按某种结构组成,可分解,eg.数组。
抽象数据类型
12、抽象数据类型(ADT):指一个数学模型以及定义在该模型上的一组操作,仅取决于它的一组逻辑特性。
按“值”的不同特性分类:
原子类型:变量的值不可分解。
结构类型:固定聚合类型:变量的值由确定数且成分按某种结构组成。
可变聚合类型:变量的值的成分数目不确定。
三元组表示(D,S,P),D---数据对象,S---D上的关系集,P---对D的基本操作的集合。
13、多型数据类型:值的成分不确定的数据类型,从ADT的角度看,具有相同的数据抽象特性。