《大话数据结构》学习笔记

大话数据结构

数据结构的存储结构形式(物理结构)有两种:顺序存储和链式存储

逻辑结构:集合、线性、树形、图形

抽象是指抽取出事物具有的普遍性的本质

抽象数据类型(Abstract Data Type,ADT):是指一个数学模型及定义在该模型上的一组操作

第二章 算法

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个指令

算法具有五个基本特性:输入、输出、有穷性、确定性和可行性

健壮性:当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果

第三章 线性表

用数组描述的链表叫做静态链表(Basic、Fortran等没有指针) 让数组的元素都是由两个数据域组成,data和cur p73

双向链表插入顺序是先搞定插入结点的前驱(prior)和后继,再搞定后结点的前驱,最后解决前结点的后继

 

第四章 栈与队列

栈的顺序存储结构、链式存储结构

逆波兰(Reverse Polish Notation,RPN)表示,一种不需要括号的后缀表达式(所有的符号都是在要运算数字的后面出现)

 

队列的顺序存储结构、链式存储结构

循环队列:队列满的条件是(rear+1)%QueueSize == front

通用的计算队列长度公式为(rear-front+QueueSize)%QueueSize

第五章 串

KMP模式匹配算法

next数组值推导

 

根据经验得到如果前后缀一个字符相等,k值是2,两个字符k值是3,n个相等k值就是n+1。

nextval数组值推导

第六章 树

线索二叉树(空指针域用来表示前驱和后继)

压缩编码方法--赫夫曼编码

带权路径长度WPL(Weighted Path Length)最小的二叉树称为赫夫曼树

第七章 图

1.邻接矩阵 顶点--一维数组 边或弧--二维矩阵

2.邻接表 邻接表--入度 逆邻接表--出度

3.十字链表 (结合入度、出度邻接表)p234

 

 

4.邻接多重表

 

5.边集数组


深度优先遍历(Depth_First_Search) 广度优先遍历(Breadth_First_Search,BFS)(Queue)

最小生成树

我们把构造连通网的最小代价生成树称为最小生成树

普利姆(Prim)算法p247、克鲁斯卡尔(Kruskal)算法p252

2分钟搞懂最小生成树prim算法_哔哩哔哩_bilibili

最小生成树(Kruskal(克鲁斯卡尔)和Prim(普里姆))算法动画演示_哔哩哔哩_bilibili

最短路径

迪杰斯特拉(Dijkstra)算法p262、弗洛伊德(Floyd)算法

拓扑排序

在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,称为AOV网(Activity On Vertex Network)

AOE。。。(工程时间)

typedef struct file{
...
}FileInfo, *FileP;
//给struct file 取个别名为FileInfo,给struct file * 取个别名为FileP。

活动的最早开始时间和最晚开始时间相等就意味着此活动是关键活动,活动间的路径为关键路径

第八章 查找

顺序表查找

设置“哨兵”

 

有序表查找

折半查找、插值查找、斐波那契查找(黄金分割)

 

线性索引查找

索引按照结构可以分为线性索引(稠密索引、分块索引和倒排索引)、树形索引和多级索引。

分块索引(图书馆):块内无序,块间无序

倒排索引(搜索引擎):不是由记录来确定属性值,而是由属性值来确定记录的位置

二叉排序树

平衡二叉树(AVL树)

平衡因子(Balance Factor)(-1/0/1)

最小不平衡子树 旋转

 

多路查找树

每一个结点的孩子数可以多于两个,且每一个结点处可以存储多个元素

2-3树、2-3-4树、B树B+树

散列表查找(哈希表)

散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。对应关系f称为散列函数,又称为哈希(Hash)函数。采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table)。

两个参考原则:计算简单、散列地址分布均匀

第九章 排序

1.冒泡排序(Bubble Sort)是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。时间复杂度O(n^2)

2.简单选择排序(Simple Selection Sort)就是通过n-1次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和i(1≤i≤n)个记录交换之。 O(n^2)

3.直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。理牌 O(n^2)


4.希尔排序(Shell Sort)“分组进行选择排序”,将关键字较小的记录,不是一步一步地往前挪动,而是跳跃式地往前移

基本有序:就是小的关键字基本在前面,大的基本在后面,不大不小的基本在中间。

增量序列 等于1为止

5.堆排序(Heap Sort)“保留了之前的比较记录0” 时间复杂度O(nlogn)

大顶堆:每个结点的值都大于或等于其左右孩子结点的值;小顶堆反之

6.归并排序(Merging Sort)时间复杂度O(nlogn) 空间复杂度O(n+logn)

从每个子序列的长度为1开始两两归并......

7.快速排序(Quick Sort)O(nlogn)

优化:

优化选取枢轴、优化不必要的交换(以替换代替交换)、小数组时用插入排序(Insertion Sort)、 优化递归操作

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值