基本概念
四类基本结构:
集合:结构中的数据元素的集合,无其他关系
线性结构:结构中的元素存在一对一的关系
树形结构:结构中存在一对多的关系
图结构或网状结构:数据结构中存在多对多的关系
两种不同的存储方法:
顺序存储结构:用数据元素在存储器的相应位置来表示元素的逻辑关系
链式存储结构:在每个元素中增加一个存放地址的指针,用指针来表示元素直接的逻辑关系
时间复杂度
用来判断一个算法所用时间规模,常见算法时间复杂度排序
空间复杂度
算法所需存储过程的度量
O(1)<O(log n)<O(n)<O(nlog n)<O(n^2) <O(2^n)<O(n!)<O(n^n)
数组
有序数组和无序数组
无序数组优点:插入快
无序数组缺点:查找慢,删除慢
有序数组优点:查找效率高(有下标)
有序数组缺点:删除和插入慢(有整体移位操作)
静态数组和动态数组
静态数组就是大小固定的数组
动态数组的话采用自动扩容的方式实现动态扩容
栈
一种后进先出的数据结构
基本操作:出栈(将栈顶元素出栈),入栈(在栈顶元素上入栈)
队列
队列是先进先出的数据结构
主要实现原理:首先有队头front和队尾rear(相当于两个指针),由队头负责删除,队尾负责插入
普通队列
初始化:数组的front和rear都指向0
入队: 队不满,数组不越界,先队尾位置传值,再队尾下标+1
出队:对不空,先取对头位置,在队头+1
缺陷:每个空间域只能用一次,造成空间让费,容易越界
循环列队
基本原理:当队尾到达最大长度时,将队尾重置与数组初始位置!是空间重复利用
链表
链表是一种插入和删除都比较快的数据结构,缺点是查找比较慢,除非需要频繁下标来随机访问数据,可用链表代替数组
主要结构是在每一个数据上加上一个指针,每个元素通过指针相连
特点:查询元素的话,唯一的方法就是沿着元素的链一直找下去,知道发现这个数据项
单链表
删除:将本元素删除,然后将上个元素指针指向删除节点的下一个节点
新增:将目标元素前一个元素指向目标指针,目标元素指针指向下个元素
双端链表
双端列表与单链表的区别是,不只有节点之间的指针,还存在首节点对尾节点的引用
有序链表
双向链表
查询效率:既可以从前往后查询,也可以从后往前查询!提高查询效率
缺点,删除和新增会负出很大代价!因为指针太多了