数据结构-存储结构算法思想、理论、概述

数据结构

线性表

1.一般线性表-逻辑结构相邻

        顺序表-逻辑物理结构均相邻

                静态顺序表

                动态顺序表

        链表-逻辑结构相邻但物理结构不相邻、指针

                单链表

                双链表

                循环链表:循环单链表、循环双链表

                静态链表

                        应用-OS的FAT

                动态链表

2.带有特别要求的增删改查的线性表

除操作不同与一般线性表一样,可顺可链

        1.队列-FIFO先进必先出

应用:

1.树的层次遍历

2.图的广度优先遍历

3.OS的进程先来先服务FCFS;打印机啊,等等

分类:

1.一般队列

2.循环队列

3.双端队列

        2.栈-LIFO后进可选择先出

我觉得吧,LICFO更适合,后进可选择(前提在栈顶)先出。

应用:

1.括号匹配

 2.表达式求值运算;阶乘、斐波那契数列等等

 3.函数调用的递归栈

分类:

1.顺序栈

2.共享栈

3.链式栈

3.矩阵---一般顺序存储---逻辑上也非线性

存储先后寻址问题

        行优先:地址=loc+(i*N+j)*size

        列优先:地址=loc+(j*M+i)*size

可压缩:

1.一般稀疏矩阵的压缩

三元组:行值、列值、值

十字链表法

2.一维数组存储

2.1对称矩阵---每行个数呈递增数列

2.2泛上||下三角矩阵,泛就是常数c-每行个数呈递增数列

2.3三(带状)对角矩阵---i、j差值小于1

4.串

一维数组存储

1.模式匹配算法(暴力)

2.KMP-j

辅助:

一个一维数组

模式串对应位置的数组值为模式串的j指针

不匹配时候赋值,j=next[j]

3.KMP进一步优化算法---前提是模式串有重复的字符常量

j的进一步优化

 

失配时,j=next[j],且两个序号对应字母相同,它们的val值连坐。

辅助:

两个一维数组 

应用:

搜索文件、模糊搜索

非线性表

5.树、森林

1.一般情况用链式存储

2.点表+邻接表或者邻接矩阵

二叉树:

按完全二叉树的层次编号可用顺序表存储

一般情况用链式存储

1.树的分类、存储及性质

考点

2.树的操作

由1决定下列操作特征

2.1二叉树不同遍历搜索

先、中、后、层、深

2.2二叉树不同遍历序列、及由遍历序列还原(构造)二叉树

先、中、后、层、深;任何一个(先、后、层)+中还原唯一二叉树

2.3线索二叉树的遍历、及二叉树的线索化

不断找前驱直到null开始遍历;根据选择的遍历方法按左前驱右后继原则线索化。

2.4树和森林的转化、树和森林的遍历比较

森林、树转化为二叉树原则:左孩子右兄弟

2.5二叉排序树的遍历搜索、构造二叉排序树

左<根<右,先序遍历有序

2.6平衡二叉树的构造、平衡二叉树的平衡操作(可以与二叉排序树结合为平衡二叉排序树分类)

2.7哈夫曼树的特征、哈夫曼树的构造

根据其特征可以:使用最小堆构造哈夫曼树

根的值=其左子树叶子结点的和值+右子树的;

因此其到达叶子结点的路径不可能存在值相等的结点

2.8堆(完全二叉树)的特征、堆的构造

小根堆(根<=左,且<=右)

大根堆(根>=左,且>=右)

=是因为有相同的关键值情形,不过我们需要保证一直偏左或者偏右保证其稳定性不会改变

顺序表存储,然后从叶子开始比较交换排序思路

有重复的关键值怎么办?在此停留让他们交换完毕

因为其是二叉树树:删除某个结点,则将整个树的最右叶子结点补过去,之后矫正。

3.树的应用:

1.树形目录

2.图的最小生成树

遍历、构造结合了:

栈、队列、递归

6.图

1.点表+邻接表(不唯一)或者邻接矩阵(唯一)

2.十字链表

3.邻接多重表

点集不可空,边集可空

1.图的相关概念

有向图

无向图(环)

子图

连通问题:会考边数,即组合数问题

连通图(环):连接的各个点均可从任一点开始到达其他点。

连通分量(环):极大连通子图(有向图不一定有连通分量);多少个连通分量就是多少棵生成树。

强连通分量:有向图中的极大强连通子图

生成树:极小连通子图(无回路,区别回路和环)

完全图(环):线条数为两两组合(排列-有向)的组合数(排列数)。

有向无环图DAG

度:入度、出度

简单回路(除却起点终点,其他顶点不重复)对应简单路径

回路对应路径。

2.图与树的关系

1.生成树

生成树也是图,是子图,因此树是图的一种有向无环图

3.图的操作

1.BFS与DFS生成树、森林

2.最小生成树

3.最短路径算法

4.有向无环图---三类应用

可以把树看作图的中有向图中的一类。

生成树的要求不需要无环;

有向无环图之拓扑排序---要求无环,矩阵存储类上三角或下三角;

7.查找---增删改查重点工程

1.一般查找

 

 

2.B树查找与B+树查找

B+树叶子结点间有指针连接;

m阶的意义也不一样,与结点内的关键字个数限制不同,相同计算有向上取整;

 

3.散列查找

多个不同的散列函数,重复切换散列直至不冲突

Hi=RHi(key), i=1,2,…,k. RHi均是不同的散列函数,即在同义词产生地址冲突时计算另一个散列函数地址,直到冲突不再发生,这种方法不易产生“聚集”,但增加了计算时间;

8.排序-内部与外部排序

内部排序:

对N个记录进行归并排序,归并趟数的数量级是O(NlogN)。

r代表纵向深度

 绝对有序是对最终结果而言,相对是对本身而言

 动态规划:弗洛伊德算法(多点最最短路径)

分治思想:二叉树的中序遍历

外部排序:原理同归并排序(n个有序数组的归并)

进入的归并段的数量(k路)决定趟数,而归并内、间最开始都是两两元素归并,输入缓冲区与输出缓冲区(决定读写次数)有限制,所以意味着有最优方案:败者树,优化选择最小值

败者树就是一开始(构造堆)时间长,后面的短且一样,类似指令流水。

时间分析:内部排序时间相对较小忽略了

哈夫曼树:磁盘读取总次数=WPL*2;

归并趟数=log(k,r)上取整;k路归并、r个归并段;

(这个趟数是对N个记录,不是对缓冲区而言)

败者树深度=log(2,k)上取整;

归并段数量r=N/L上取整,N代表总记录大小,L代表工作区大小

败者树用于输出选择、与置换算法相结合进一步优化

 因为工作区的限制,所以不能随意定归并段大小不能随意:

 构造哈夫曼树有补0操作:补的个数为%(k-1)

K路归并与K路平衡归并

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的点赞我的光

我的第一次被打赏在哪?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值