算法与数据结构
点云Amateur
这个作者很懒,什么都没留下…
展开
-
KPM算法求next数组与nextval数组(手动)
模式串 S = “abaabcac” next[]求法: 所有数组下标从1开始,首先将设置next[1] = 0;next[2] = 1; 从下标3开始,判断 S[i-1]==S[next[i-1]] 如果成立,则 next[i] = next[i-1]+1; 如果不成立,则判断 S[i-1]==S[next[next[i-1]]]; 重复此步骤,直至成立。 如果找到第一位还不成立,则next[i] = 1; nextval[]求法: 求出 next[],数组下标从1开始,将 nextval[1] 设原创 2021-08-10 22:58:46 · 450 阅读 · 0 评论 -
基于广度优先遍历算法求采用邻接表存储的无向连通图G中从顶点u到v的最短路径
问题 假设图G采用邻接表存储,设计一个算法,求不带权无向连通图G中从顶点u->v的最短路径(路径上经过的顶点数最少。采用广度优先遍历来实现。 基本思路 我们首先来看一下BFS的过程: 图片摘自慕课网李春葆老师讲的数据结构。从图中我们可以看到BFS的过程就是给定一个起点u,从起点u到某一个顶点(假设v)的最短路径构成分层。 下面我先给出一个代码,然后再给出一个例题并进行分析。 代码 typedef struct ANode { int adjvex; //该边的终点编号 struct ANo原创 2020-05-16 07:13:18 · 3846 阅读 · 1 评论 -
利用回溯的深度优先遍历找出基于邻接表存储的图中一个顶点到另一个顶点的所有简单路径
邻接表存储方法 对图中的每个顶点 i 建立单链表,将i的所有邻接点链起来。 每个单链表添加一个表头节点(表示顶点信息)。并将所有的表头节点构成一个数组,下标为 i 的元素表示顶点 i 的表头节点。 存储类型定义如下 typedef struct ANode { int adjvex; //该边的终点编号 struct ANode *nextarc; //指向下一条边的指针 int name[10]; //该边的权值等信息 }ArcNode; typedef struct Vn原创 2020-05-14 17:51:16 · 1527 阅读 · 2 评论 -
初等排序(插入排序法、冒泡排序法、选择排序法)
插入排序法: 方法介绍: 插入排序法的思路与打牌时排列手牌的方法很相似。比如我们现在单手拿牌,然后要将牌从左至右、由小到大排序。此时我们需要将牌一张张抽出来,然后插入前面已排好序的手牌的适当位置。重复这一操作,知道插入最后一张牌,整个排序就完成了。 插入排序的核心算法如下: 代码 void insertionSort(int A[], int N) //插入排序法(A[]存储数据的数组。...原创 2020-01-23 10:48:22 · 147 阅读 · 0 评论