1.绪论
1.1基本概念
数据结构的基本单位是数据元素。
数据结构的最小单位是数据项。
数据对象:具有相同性质的数据元素的集合。
抽象数据类型(ADT):一个数学模型以及定义在该模型上的一组操作。(包括:数据对象,数据关系,基本操作),可以用来定义一个完整的数据结构。
数据结构:相互之间存在一种或多种特定关系的数据元素的集合(数据对象,数据关系)。
数据结构三要素:
1.逻辑结构:
(1)线性结构:
一般线性表,受限线性表(栈,队列,串),数组,广义表
(2)非线性结构;
集合,树形结构,图状结构
2.存储结构
(1)顺序存储
(2)链式存储
(3)索引存储
(4)散列存储
3.数据的运算
运算的定义:针对逻辑结构
运算的实现:针对存储结构
1.2 算法
1.2.1 算法的基本概念
算法是对特定问题求解步骤的一种描述。
算法的特点:(1)有穷性(2)确定性(3)可行性(4)输入>=0(5)输出>0
算法'好'的目标:(1)正确性(2)可读性(3)健壮性(4)效率与低存储量
1.2.2 算法效率的度量
时间复杂度:算法问题规模n的函数,与执行时间成正比。
不仅依赖于问题的规模n,也取决于待输入数据的性质
求法:公式递推或者求和。
空间复杂度:
算法原地工作:辅助空间是常量。
时间复杂度的计算方法:
主方法:
2.线性表
2.1 线性表的定义
线性表(逻辑结构)具有相同数据类型的n个数据元素的有限序列。
线性表有两个存储结构:顺序表,链表。
2.2 顺序表
2.2.1 顺序表定义
表中元素的逻辑结构与物理结构相同。
最主要的特点是随机访问。
2.2.2 顺序表基本操作
(1)插入**()**
每次移动:n-i+1个元素
平均次数:
(2)删除**()**
每次移动:n-i个元素
平均次数:
(3)按值查找(顺序查找)
每次查找:i
平均次数:
时间复杂度:O(n)
(4)查找(有下标,普通)
1(随机存取)
2.3 链表
不要求逻辑上相邻的两个元素在物理上也相邻。
2.3.1 定义
头结点的作用是为了方便运算的实现。
2.3.2 基本操作
判断带头结点的单循环链表L仅有一个元素结点的条件是 L->next->next=L&&L->next!=L
判断带头结点的双循环链表只有一个元素的条件是 L->next->next=L&&L->prior->prior=L&&L->next!=L
带头结点的双循环链表为空的条件是 L->next=L&&L->prior=L
2.4 总结
| T(n) | 删除最后 | 删除最前 | 最后插入 | 最前插入 |
|---|---|---|---|---|
| 单链表 | O(n) | O(1) | O(n) | O(1) |
| 循环单链表(头指针) | O(n) | O(n) | O(n) | O(n) |
| 循环单链表(尾指针) | O(n) | O(1) | O(1) | O(1) |
| 双链表(头指针) | O(n) | O(1) | O(n) | O(1) |
| 双链表(尾指针) | O(1) | O(n) | O(1) | O(n) |
| 双链表(头尾指针) | O(1) | O(1) | O(1) | O(1) |
| 循环双链表 | O(1) | O(1) | O(1) | O(1) |
| T(n) | 顺序表 | 链表 |
|---|---|---|
| 插入 | O(n) | O(1) |
| 删除 | O(n) | O(1) |
| 按值查找(有序) | O( |
O(n) |
| 按值查找(无序) | O(n) | O(n) |
| 随机查找 | O(1) | O(n) |
| 排序 | O( |
O( |