学不完的数据结构(一)

1,360 阅读3分钟

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,也取决于待输入数据的性质

​ 求法:公式递推或者求和

空间复杂度

​ 算法原地工作:辅助空间是常量

时间复杂度的计算方法

主方法:

T(n)=aT(n/b)+f(n)
\\(1)T(n)=O(n^{\log _b a}) \qquad if(f(n)阶数<\log _b a)
\\(2)T(n)=O(n^{\log _b a }\log _2 n) \qquad if(f(n)阶数=\log _b a)
\\(3)T(n)=O(f(n)) \qquad if(f(n)阶数> \log _b a)

2.线性表

2.1 线性表的定义

​ 线性表(逻辑结构)具有相同数据类型的n个数据元素有限序列。

​ 线性表有两个存储结构顺序表,链表

2.2 顺序表

2.2.1 顺序表定义

​ 表中元素的逻辑结构与物理结构相同

​ 最主要的特点是随机访问

2.2.2 顺序表基本操作

​ (1)插入**(1\le i\le n+1)**

​ 每次移动:n-i+1个元素

​ 平均次数:\sum ^{n+1} _{i=1} \frac {1}{n+1} (n-i+1)=\frac {n}{2}

​ (2)删除**(1\le i\le n)**

​ 每次移动:n-i个元素

​ 平均次数:\sum ^{n} _{i=1} \frac {1}{n} (n-i)=\frac {n-1}{2}

​ (3)按值查找(顺序查找

​ 每次查找:i

​ 平均次数:\sum ^{n} _{i=1} \frac {1}{n} *i=\frac {n+1}{2}

​ 时间复杂度: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(\log n) O(n)
按值查找(无序) O(n) O(n)
随机查找 O(1) O(n)
排序 O(n\log n) O(n^2)