数据结构

绪论

掌握算法复杂度分析,包括时间和空间

分析递归算法复杂度

一、线性表

(一)线性表的定义和基本操作

插入 删除 查找

(二)线性表的实现

1.顺序存储

2.链式存储

  各类操作的时间复杂度(尤其是单链表,双链表,循环链表…)

3.线性表的应用

其他操作受限的线性表:各类双端队列
输入受限或输出受限
会判断有某一输入序列,经过某种双端队列,能否得到某一输出序列(手动模拟)

二、栈、队列和数组

尝试数组和链表实现栈,队列,写出基本算法。

(一)栈和队列的基本概念

(二)栈和队列的顺序存储结构

(三)栈和队列的链式存储结构

(四)栈和队列的应用

队列:
	各类缓冲区
	需要先进先出地暂存数据的各类算法
栈:
	递归系统栈:
	中缀表达式转化为后缀表达式
		按运算优先次序为中缀表达式的每一层添加括号
		 把每个右括号替换为该层相应的运算符,删去原运算符
		 删除左括号
后缀表达式求值

(五)特殊矩阵的压缩存储

三角矩阵 对称矩阵的顺序存储,熟练转换行列号和数组下标
稀疏矩阵的存储:三元组或十字链表

三、树与二叉树

(一)树的概念

树的表示方法
	 孩子表示法,双亲表示法(结构体数组)
	 二叉链表:可用于二叉树或一般树的孩子兄弟表示法
	 由同一二叉链表对应的二叉树和一般树(森林)的相互转化
 
数的相关术语和数学性质
	度,深度,高度,路径长度……
	n0=n2+1 第n层最多2^(n-1)个节点等

(二)二叉树

1.二叉树的定义及其主要特征

完全二叉树和满二叉树的定义和顺序存储

2.二叉树的顺序存储结构和链式存储结构

3.二叉树的遍历

前中后序遍历算法,包括递归版本和非递归版本
层次遍历算法
由中序遍历和其他任意一种遍历序列确定二叉树:前序/后序/层次确定根。中序确定左右子树。

4.线索二叉树的基本概念和构造

包括前序/中序/后序线索,给定二叉树能将其线索化
前序/中序线索二叉树可以不用栈实现非递归遍历,后续不能

(三)树、森林

1.树的存储结构

2.森林与二叉树的转换

3.树和森林的遍历

(四)树与二叉树的应用

1.二叉排序树

熟记定义:左子树任一节点< 根节点 <=右子树任一节点。等号位置/不等号方向可以改变
二叉排序数不一定能加速搜索:单支二叉排序树退化为顺序表
掌握插入,删除节点过程
给定一个输入序列,能构建二叉排序树

2.平衡二叉树

熟记定义:任一节点平衡因子绝对值不大于1
建立平衡二叉树过程中的平衡操作:R,L,RL,LR

3.哈夫曼(Huffman)树和 哈夫曼编码

掌握带权路径长度和的定义
给定一堆节点,能手动构造Huffman树
给定一颗Huffman树,能写出对应的Huffman编码
Huffman编码是一种前缀码,掌握前缀码的一般定义

四、图

(一)图的基本概念

有向图,无向图,边,弧,入度,出度(强)连通分量,路径……

(二)图的存储及基本操作

1.邻接矩阵法

2.邻接表法 逆邻接表法

3.邻接多重表(无向图)、十字链表(有向图)

给定图和给定邻接矩阵,邻接表的相互转化

(三)图的遍历

1.深度优先搜索

2.广度优先搜索

(四)图的基本应用

1.最小(代价)生成树

prim算法和kruskal算法
复杂度:O(n^2) vs O(ElogE)

2.最短路径

Dijkstra算法(单源) Floyd算法
复杂度 O(n^2)vs O(n^3)
Dijkstra 不允许负权边,Floyd允许负边权但不允许负权环

3.拓扑排序

画出路径树(森林)遇见多个选择的情况分叉
路径树从根到叶子的一条路径就是一个拓扑排序序列,叶子树就是拓扑排序序列数。

4.关键路径

五、查找

(一)查找的基本概念

平均成功查找长度,平均失败查找长度
对任何查找算法,用ASL的定义计算

(二)顺序查找法

适用于线性表

(三)分块查找法

(四)折半查找法

要求顺序结构 
画出查找树 
判断折半查找判定树

(五)B树及其基本操作、B+树的基本概念

熟记定义:B-树每个节点都包含数据项,B+树节点只是索引
熟悉B-树和B+数的查找过程
B-树的插入。删除过程
常见问题:高度为h的n阶B-树/B+树,最多/最少几个节点?

(六)散列(Hash)表

相关术语:散列表,冲突,堆积,装填因子……
常见冲突处理方法:开放定址(二次哈希)包括线性,平方……;拉链法
给定数据集和表长,能构造哈希表(按给定的散列函数和冲突处理方法),计算平均查找长度。

(七)字符串模式匹配 (KMP算法)

求next数组,包括优化版本

(八)查找算法的分析及应用

六、排序

(一)排序的基本概念

所有内部排序算法:

掌握排序过程,时间/空间复杂度,稳定性,使用情况。
	选择第n大的数可以用修改版的快速排序
	选出前n大的数可以用堆排序

(二)插入排序

1.直接插入排序

2.折半插入排序

(三)气泡排序(bubblesort)

(四)简单选择排序

(五)希尔排序(shellsort)

(六)快速排序

掌握轴枢划分算法

(七)堆排序

掌握建堆过程和删除堆顶后的调整过程

(八)二路归并排序(mergesort)

(九)基数排序

(十)外部排序

掌握多路归并,选择-置换算法,摆着树的思想

(十一)各种内部排序算法的比较

(十二)排序算法的应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值