数据结构-绪论、总结
绪论
1.数据结构基本概念
1.数据元素是数据的基本单位
2.数据项是数据的最小单位
3.数据对象:性质相同的数据元素的集合
4.数据类型
一种数据结构的抽象数据类型,由数据对象,数据关系,基本操作三部分组成
5.数据的逻辑结构
(1)线性结构:线性表,受限线性表:栈/队列
特征:数据元素一对一
(2)非线性结构:树/图
特征:数据元素一对多
6.数据的物理结构
(1)顺序存储方法
(2)链式存储方法:链表
(3)索引存储方法
(4)散列存储方法(Hash)
考点:1.散列表是顺序表的拓展
2.hash表中元素不存在逻辑关系
考点:
1.与数据的存储结构无关的是(是逻辑结构的是)
栈(逻辑结构)
双向链表(链式存储结构)
散列表(顺序表的拓展)
线索树(链式存储结构)
顺序链表(顺序存储结构)
2.算法基本概念
1.算法:解决问题的步骤序列(不是程序)
与程序含义不同(即使同解决一问题)
2.计算机算法特性
有穷性(有限步后结束)
确定性(无二义)
可执行性(执行基本操作有限次内完成)
输入、输出
3.算法设计目标
正确性、可读性、健壮性、高效率与低存储量需求
考点:
1.算法复杂性:算法的计算量的大小
2.算法的时间复杂度取决于①问题的规模②待处理数据的初态
3.原地工作:辅助空间是个常数(与问题规模n无关)
4.
3.字节,字符,存储单元
字节(Byte)⇒一存储单元(8位二进制)
字符(英文中文)ASCII码中,一个英文字符一个字节,一个中文两个字节
4.存储
(1)顺序存储
顺序存储不只可以存储线性结构(还可以存储树等)
(2)链式存储
考点
(1)无论数据的存储结构有多么复杂,总可以用顺序结构和链式结构来构造实现
算法/代码总结
一.熟读(代码填空)
1.一元多项式相加(课本43)
2.双向链表插入
2.希尔排序(一趟)
3.堆排序(14年)
二.掌握(代码撰写)
1.结构体定义
循环队列类型定义(94)
2.算法
(1)线性表
将不带头结点的单链表逆转(97)
(1)栈和队列
循环队列删除,插入算法
(2)树与图
打印从根节点到叶结点的所有路径(94)
打印 (数据域值为x的)结点 的所有祖先结点的数据域(96)
(3)查找
(4)排序
快速排序(14)
三.曾考过的非课本算法
1.斐波那契
2.树的孩子兄弟链表结构,递归树树的高度
(max{左子树高度,右子树高度}+1)
3.快速排序非递归(熟读?)
4.堆的插入算法(95)
时间复杂度总结
一.树相关
基本知识:
(1)完全二叉树的高度为(log₂(n)下取整)-1 或(log₂(n+1)上取整)
(2)折半查找判定树形状可以理解为最后一层叶结点分布不规则的完全二叉树
⇒①深度与完全二叉树相同
⇒②查找成功次数与完全二叉树相同(最后一层叶结点的分布不影响查找成功次数)
1.算法主要进行完全二叉树(或叶结点分布任意的折半查找判定树) 从某个结点走向叶结点的操作
⇒时间复杂度认为是0(log₂n)
不必严格考虑是从根节点出发,还是从中间某个结点出发(天勤247)
(1)折半插入插入排序最好时间复杂度
正序,仅查找插入位置⇔折半查找判定树从某个结点走向叶结点操作 ⇒0(nlog₂n)
(2)堆排序
二.图相关
1.KMP算法的时间复杂度为0(m+n)
正文串长度为n,模式串长度为m,则串匹配的
1.最小生成树Prim:O(n²),只与图中顶点有关(适合稠密图)
2.最小生成树克鲁斯卡尔:O(elog₂e),由图中边数决定(适合稀疏图)