数据结构
定义:是计算机储存,组织数据的方式:
数据结构可以分为:
逻辑结构:面向问题
物理结构:面向计算机
逻辑结构 数据对象 数据元素之间的关系
分类:集合结构,线性结构,树形结构,图形结构
物理结构:数据 在 计算机的存储形势
分类 : 顺序存储结构和链式存储结构
顺醋存储结构 : 数据元素放在地址连续的存储
算法: 解决特定问题求解步骤详细描述
特此那个 : 输入 0个或者多个
输出 : 输出
有穷性, 确定性。可形性
算法复杂度:
算法的复杂度 时间复杂度 空间复杂度
时间复杂度 衡量一个算法好坏的重要标准
用 大O表示法
常见的时间复杂度
常数阶 O(1)<
线性阶 O(n)<
平方阶 O(n2)<
立方阶 O(n3)<
指数阶 O(2n)
对数阶 O(logN)
O(1)<O(logn)<O(n)<O()nlogn<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
列表内置的时间复杂度
index O(1)
append O(1)
pop O(1)
pop O(n)
reverse O(n)
insert(i) O(n)
sort O(n log n)
字典内置时间复杂度
delete O(1)
copy O(1)
空间复杂度
线性编: 具有0个或者多个数据元素的有限序列
特征:
第一个元素没有前驱
最后一个元素没有后续
其余的元素只有一个前驱和一个后续
分类
顺序表 计算机内存中以一组地址连续的存储单元 依次
优缺点:
优点:可以随机访问
缺点:掺入删除需要一定大量数据元素造成空间碎片
最好的时间复杂度O(1)
最坏的时间复杂度O(n)
Python中的顺序表 list tuple
链表 实在每一个节点存放下个节点的位置信息(内存地址)
分类: 单向链表
是在链表中需简单的一种形式
一个节点有两个域
第一个是信息域(元素域) 里面存放的是数据
第二个节点的节点域是个空域
单向循环链表
最后UI个节点的节点域不再为空 而是指向头节点
双向链表
一个节点有三个域
第一个是 节点域(元素域)里面存放的是上一个节点的位置
第二个是 信息域(元素域) 里面存放的是数据
第三个是 节点域(元素域)里面存放的是下一个节点的位置
栈:
是仅允许在表尾进行插入删除的线性表
特点先进后出
队列:
好比水管
只允许在一端插入 另一端删除的线性表
冒泡
定义:
就是把小的数字放在前面
把相邻的两个数 进行比较 如果前面的数字大于后面的数字 进行交换位置
选择
定义:
循环比较整个列表里比最小值小的数 然后交换位置 直到所有数据的位置都确定
树
定义:是一种数据结构 存放数据的集合
特点:
1、只有一个根节点 没有父节点的节点就是根节点
2、每一非根节点都有一个父节点
3、每个节点都有零个或多个节点
4、除了根节点外,每个子节点可以分为多个不相交的子树
树的术语:
节点的度:一个节点含有的子树的个数称为该节点的度;
树的度:一棵树中,最大的节点的度称为树的度;
叶节点或终端节点:度为零的节点;
父亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
孩子节点或子节点:一个节点含有的子树的节点称为该节点的子节点;
兄弟节点:具有相同父节点的节点互称为兄弟节点;
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
树的高度或深度:树中节点的最大层次;
堂兄弟节点:父节点在同一层的节点互为堂兄弟;
节点的祖先:从根到该节点所经分支上的所有节点;
子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
森林:由m(m>0)棵互不相交的树的集合称为森林;
树的种类:
有序树
二叉树 每一个节点最多有两个子节点
完全二叉树
平衡二叉树
B树
霍夫曼树
排序二叉树
无序树
树的存储
通常以 链式 存储
树的应用场景
AI算法
mysql
文件的目录系统
路由协议
xml 和 html
二叉树
定义: 每个节点最多只有两个子树的树结构
分为左子树 和右子树
完全二叉树 除了最后一层 其他层必须都是两个子节点 必须是从左往右依次排布
满二叉树 每一个节点必须都是两个子节点
二叉树的遍历
方式:
深度优先遍历
分类:
先序遍历 根节点 ---- 左子树----右子树
中序遍历 左子树 ---- 根节点 --- 右子树
后序遍历 左子树 ---- 右子树 --- 根节点
广度优先遍历 ---- 层次遍历
从上往下 从左往右依次遍历
常见的数据结构 顺序表 链表 栈 队列 树
二分法