初学数据结构-个人笔记(0)

来源:互联网 发布:雪花飘落js特效代码 编辑:程序博客网 时间:2024/06/06 06:43
11.29
数据结构是数据对象在计算机中的组织方式。
数据结构的逻辑结构(所谓逻辑结构就是数据与数据之间的关联关系,准确的说是数据元素之间的关联关系。)
分为线性结构和树形结构。线性结构是一对一,树形结构是一对多。

数据的物理结构就是数据存储在磁盘中的方式。官方语言为:数据结构在计算机中的表示(又称映像)称为数据的物理结构,或称存储结构。它所研究的是数据结构在计算机中的实现方法,包括数据结构中元素的表示及元素间关系的表示。

而物理结构一般有四种:顺序存储,链式存储,散列,索引。

抽象数据类型
数据类型:
数据对象集;
数据对象操作集。

抽象:描述数据类型的方法不依赖于具体的实现。
与存放的物理结构无关;
与存放的机器无关;
与实现的算法和编程语言无关。

什么是好的算法?
占用物理内存少;
编译速度快。
一个算法的评价主要从时间复杂度和空间复杂度来考虑。
分析一个算法效率时:最坏复杂度;平均复杂度。
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示(定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数
 T(n)称为这一算法的“时间复杂性”),若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。ps:可以理解为f是T的渐近。
在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),T(n)是关于n的k阶多项式,则O(n的k次方)。另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n^2+3n+4与T(n)=4n^2+2n+1它们的频度不同,但时间复杂度相同,都为O(n^2)。
for循环复杂度要乘于循环次数;
if结构复杂度取最大复杂度部分;
时间复杂度越大,算法效率越低。
两段算法中有两种时间复杂度,则取最大的时间复杂度。
常见的时间复杂度:常数阶O(1),  对数阶O(log2n),  线性阶O(n),  线性对数阶O(nlog2n),  平方阶O(n^2), 立方阶O(n^3),..., k次方阶O(n^k), 指数阶O(2^n) 。



线性表
线性表:由同类型数据元素构成的有序序列的线性结构。1.表中元素个数称为线性表的长度。2.线性表没有元素时,称为空表。3.表起始位置称表头,表结束位置称表尾。

线性表的抽象数据类型描述。
类型名称:线性表(List)

数据对象集:
线性表是n个元素构成的有序序列。

操作集:线性表L属于List,整数i表示位置,元素X属于ElementType。线性表的基本操作:

1.List MakeEmpty():初始化一个空线性表L;
2.ElementType Fin的Kth(intK,List L):根据位序K,返回相应元素。
3.
int Find(ElementTypeX,ListL):在线性表L下查找X的第一次出现位置。
3.void insert(ElementType X,int i,List L):在位序i前插入一个新元素X。
5.void Delete(int i,List L):删除指定位序i的元素;
6 int Length(List L):返回线性表L的长度n








原创粉丝点击