目录--“供自己回看的粗略笔记”
!!是markdown文件导入,存在格式问题,可直接看附件文档
数据结构导论
一种电脑存储和组织数据的方式,可以是其更高效。数据结构不光研究数据的操作、操作的实现,还研究分析操作的成本。
谈论数据结构的方式:
1)数学或逻辑模型
抽象数据类型(ADT):只定义要存储的数据,然后定义类型上可进行的操作,不讨论实现细节。
List(列表)—ADT(模型)
1)静态列表(列表中的元素数量不会更改)—Arrays
--存储一些给定数量、给定数据类型的元素
--根据在列表中的任意位置来读取写入、修改元素
--修改任意特定位置的元素
eg:
int A[10];
A[i] = 2;
print A[i];
2)动态列表 —动态数组(效率不高)、链表
--若列表中没有元素,会称列表为空、大小为零
--可以在任何位置插入、删除元素
--可以计算列表中的元素数
动态数组:
int A[MAXSIZE]; //虽是动态,但设有最大“尺寸”
INT end = -1; //设置结尾标识,可以用来判断是否为空,也可计算列表长度
insert(2); //0
当超出所设最大范围时,要创建一个新数组,并复制原数组之前的数据存入新数组,并释放原数组空间,那创建新数组应增加多大呢?且所需创建、复制、移动、释放等操作繁琐,时间成本高。—所以一般新创数组空间为原数组的两倍。
(1)访问(access): O(1) (2)插入(insert): O(n)
(3)移动(remove): O(n) (4)增加(add): O(n)
------所以引出链表