数据结构复习笔记

一、线性结构

1、串的模式匹配

(区分目标串和模式串、nextval数组值、KMP算法匹配过程)

例题:设目标串s= "abcaabbabcabaacbacba " ,模式串 t=“abcabaa” ,计算模式串的nextval函数值,并给出利用改进KMP算法进行模式匹配的过程。
在这里插入图片描述
在这里插入图片描述

2、利用栈对表达式求值

例题1:表达式"(56-20)/(4+2)"转换成后缀表达式求值过程
在这里插入图片描述
例题2:后缀表达式"56#20#-4#2#+/"求值过程
在这里插入图片描述

二、非线性结构

1、树与二叉树

(1)哈夫曼树

例题:已知某系统在通讯时,只出现C,A,S,T,B五种字符,它们出现的频率依次为2,4,2,3,3,试设计Huffman编码。(要求:权重小的在左边)

W(权)={2,4,2,3,3},叶子结点个数n=5 。构建哈夫曼树
在这里插入图片描述
左0右1,哈夫曼编码:

A:10
B:01
C:110
S:111
T:00

带权路径长度为:
WPL=2x3+2x3+1x6+2x4+1x8+2x4+3x2+3x2=46

(2)二叉树

先序、中序和后序遍历的思想和求解

二叉树的遍历分成三种,按照根节点的访问先后分为:
先序遍历(先根遍历):先访问根节点,然后访问左子树, 最后访问右子树。
中序遍历(中根遍历):先访问左子树,然后访问根节点, 最后访问右子树。
后续遍历(后根遍历):先访问左子树,然后访问右子树,
最后访问根节点。

先序遍历:访问根节点;先序遍历左子树;先序遍历右子树。
在这里插入图片描述

中序遍历:中序遍历左子树;访问根节点;中序遍历右子树。
在这里插入图片描述

后序遍历:后序遍历左子树;后序遍历右子树;访问根节点
在这里插入图片描述

2、图

(1)图的存储结构

(邻接矩阵表示、邻接表表示、邻接矩阵的特点(有向图))

邻接矩阵存储方法

邻接矩阵是表示顶点之间相邻关系的矩阵。设G=(V,E)是具有n(n>0)个顶点的图,顶点的顺序依次为0~n-1,则G的邻接矩阵A是n阶方阵,其定义如下:

(1)如果G是不带权无向图,则:
A[i][j]=1:若(i,j)∈E(G) 0:其他
(2)如果G是不带权有向图,则:
A[i][j]=1:若<i,j>∈E(G) 0:其他
(3)如果G是带权无向图,则:
A[i][j]= wij :若i≠j且(i,j)∈E(G) 0:i=j ∞:其他
(4)如果G是带权有向图,则:
A[i][j]= wij :若i≠j且<i,j>∈E(G) 0:i=j ∞:其他

无向图的邻接矩阵
在这里插入图片描述

有向图的邻接矩阵
在这里插入图片描述

1.邻接矩阵的特点如下:
(1)图的邻接矩阵表示是唯一的。
(2)无向图的邻接矩阵一定是一个对称矩阵
(3)对于有向图,邻接矩阵的第i行(或第i列)非零元素(或非∞元素)的个数正好是第i个顶点的出度(或入度)。

邻接表存储方法
图的邻接表存储方法是一种顺序分配与链式分配相结合的存储方法。在邻接表中,对图中每个顶点建立一个单链表,第i个单链表中的节点表示依附于顶点i的边(对有向图是以顶点i为尾的边)。每个单链表上附设一个表头节点。

在这里插入图片描述
其中,边表节点由3个域组成,adjvex表示与顶点i邻接的顶点的编号,nextarc指向下一个边结点,weight存储与边相关的信息,如权值等。表头节点由2个域组成,data存储顶点i的名称或其它信息,firstarc指向顶点i的单链表中的第一个结点。

无向图的邻接表
在这里插入图片描述

有向图的邻接表
在这里插入图片描述
2.邻接表的特点如下:
(1)邻接表表示不唯一。这是因为在每个顶点对应的单链表中,各边节点的链接次序可以是任意的,取决于建立邻接表的算法以及边的输入次序。
(2)对于有n个顶点和e条边的无向图,其邻接表有n个顶点节点和2e个边节点。显然,在总的边数小于n(n-1)/2的情况下,邻接表比邻接矩阵要节省空间。
(3)对于无向图,邻接表的顶点i对应的第i个链表的边节点数目正好是顶点i的度。
(4)对于有向图,邻接表的顶点i对应的第i个链表的边节点数目仅仅是顶点i的出度。其入度为邻接表中所有adjvex域值为i的边节点数目。

(2)图的遍历

(DFS、BFS的算法思想和结合某种存储结构进行遍历求解)

根据搜索方法的不同,图的遍历方法有两种:一种叫做深度优先搜索法(DFS);另一种叫做广度优先搜索法(BFS) 。

深度优先搜索

深度优先搜索遍历的过程是:   
(1)从图中某个初始顶点v出发,首先访问初始顶点v。
(2)选择一个与顶点v相邻且没被访问过的顶点w为初始顶点,再从w出发进行深度优先搜索,直到图中与当前顶点v邻接的所有顶点都被访问过为止。

例题:对下面所示无向图G7,从顶点1出发的深度优先搜索遍历序列可有多种,下面仅给出三种,其它可作类似分析。
在这里插入图片描述

例题2:结合下述邻接表,并以2为访问起点,采用深度优先算法,写出访问序列。
在这里插入图片描述
DFS序列:

21034

在这里插入图片描述

广度优先搜索

广度优先搜索遍历的过程是:
(1)访问初始点v,接着访问v的所有未被访问过的邻接点v1,v2,…,vt。
(2)按照v1,v2,…,vt的次序,访问每一个顶点的所有未被访问过的邻接点。   
(3)依次类推,直到图中所有和初始点v有路径相通的顶点都被访问过为止。

例题1:例如,对下图所示无向图G7,从顶点1出发的广度优先搜索遍历序列可有多种,下面仅给出三种,其它可作类似分析。
在这里插入图片描述
例题2:在下述邻接表中,以2为访问起点,采用广度优先算法,写出访问序列。
在这里插入图片描述
BFS序列:

21340

在这里插入图片描述

(3)图的最短路径

狄克斯特拉算法的基本思想

 依最短路径的长度递增的次序求得各条路径。

狄克斯特拉算法的过程

(1)初始时,S只包含源点即S={v},v的距离为0。U包含除v外的其他顶点,源点v到U中任一顶点u的最短路径长度为边上的权(若v与u有边<v,u>)或∞(若v到u没有边)。
(2)从U中选取一个距离v最小的顶点k,把k加入S中(该选定的距离就是v到k的最短路径长度)。
(3)以k为新考虑的中间点,修改U中各顶点的距离:若从源点v到顶点u(u∈U)的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改从顶点v
到顶点u的距离值,修改后的距离值为<v, k >上的最短路径长度加上边<k,u>上的权(即:cvk+cku)。
(4)重复步骤(2)和(3)直到所有顶点都包含在S中。

狄克斯特拉算法求解

方法1:
在这里插入图片描述
方法2:
在这里插入图片描述

三、查找与排序

1、哈希表查找

哈希表的基本概念
哈希表(Hash Table)又称散列表,是除顺序表存储结构、链式存储结构和索引表存储结构之外的又一种存储线性表的存储结构。
三个因素
在哈希表中,虽然冲突很难避免,但发生冲突的可能性却有大有小。这主要与三个因素有关:

(1)与装填因子有关。
所谓装填因子α是指哈希表中已存入的元素数n与哈希地址空间大小m的比值,即α=n/m
(2) 与所采用的哈希函数有关。
若哈希函数选择得当,就可使哈希地址尽可能均匀地分布在哈希地址空间上,从而减少冲突的发生;否则,若哈希函数选择不当,就可能使哈希地址集中于某些区域,从而加大冲突的发生。
(3)与解决冲突的哈希冲突函数有关。
哈希冲突函数选择的好坏也将减少或增加发生冲突的可能性。

例题:采用除留余数法哈希函数建立如下关键字集合的哈希表:{16,74,60,43,54,90,46,31,29,88,77}。
在这里插入图片描述
在这里插入图片描述
例题2:将关键字序列{7,8,30,11,18,9,14}散列存储到散列表中,散列表的存储空间是一个下标从0开始的一维数组,散列函数为:H(key)=(key×3) mod 7,处理冲突采用线性探测法,要求装填(载)因子为0.7。
  (1)请画出所构造的散列表。
  (2)分别计算等概率情况下,查找成功的平均查找长度。
在这里插入图片描述
在这里插入图片描述

2、直接插入排序和折半查找

直接插入排序

直接插入排序思想

假设待排序的记录存放在数组R[0…n-1]中,排序过程的某一中间时刻,R被划分成两个子区间R[0…i-1]和R[i…n-1],其中:前一个子区间是已排好序的有序区,后一个子区间则是当前未排序的部分,不妨称其为无序区。
直接插入排序的基本操作是将当前无序区的第1个记录R[i]插入到有序区R[0…i-1]中适当的位置上,使R[0…i]变为新的有序区。这种方法通常称为增量法,因为它每次使有序区增加1个记录。

直接插入排序求解过程
例题:设待排序的表有10个记录,其关键字分别为{9,8,7,6,5,4,3,2,1,0}。说明采用直接插入排序方法进行排序的过程
在这里插入图片描述

折半查找

折半查找也称为二分查找,要求线性表中的节点必须己按关键字值的递增或递减顺序排列。

折半查找的基本思想

折半查找时, 先求位于查找区间正中的对象的下标 mid,用其关键码与给定值k比较:
Element[mid].key == k,查找成功;
Element[mid].key > k,把查找区间缩小到表的前 半部分,继续折半查找; Element[mid].key < k,把查找区间缩小到表的后半部分,继续折半查找。
如果查找区间已缩小到一个对象,仍未找到想要查 找的对象,则查找失败。

折半查找的求解过程
例题:在关键字有序序列{2,4,7,9,10,14,18,26,32,40}中采用折半查找法查找关键字为7的元素。
在这里插入图片描述

常用的排序算法
在这里插入图片描述

posted @ 2021-01-05 09:26  atkx  阅读(854)  评论(0编辑  收藏  举报