数据结构与算法
数据结构与算法复习
aiYuqiong
进无止尽
展开
-
单源最短路径算法之——SPFA算法
1、基本原理。关于最短路径的SPFA快速算法_段凡丁2、实现。//假定图中最大顶点个数为5 #define MAX_VERTEX 5 //采用二维数组来表示图 //两个顶点间的距离为1000 ,代表两顶点间无之间相连的边 int graph[MAX_VERTEX][MAX_VERTEX]= { {0,1,2,1000,4}, {1,0,1000,8,2}, {2,1000,...原创 2018-06-21 10:53:56 · 615 阅读 · 0 评论 -
单源最短路径算法之——Dijsktra算法
1、基本原理。//To Do2、实现。//假定图中最大顶点个数为5 #define MAX_VERTEX 5 //采用二维数组来表示图 //两个顶点间的距离为1000 ,代表两顶点间无之间相连的边 int graph[MAX_VERTEX][MAX_VERTEX]= { {0,1,2,1000,4}, {1,0,1000,8,2}, {2,1000,0,1000,6}, ...原创 2018-06-21 08:51:49 · 659 阅读 · 0 评论 -
数据结构复习——最小生成树之kruskal算法(逐步加入边)
1、基本原理。算法图示:2、实现。//用以表示图中的边的结构体 struct Arc { unsigned start_; //起始顶点 unsigned end_; //终止结点 unsigned value_; //边的权值 Arc(): start_(-1), end_(-1), value_(unsigned(-...原创 2018-06-20 16:24:28 · 398 阅读 · 0 评论 -
数据结构复习——最小生成树之prim算法(逐步加入顶点)
1、基本原理。//To do2、实现。//假定图中最大顶点个数为5 #define MAX_VERTEX 5 //采用二维数组来表示图 unsigned graph[MAX_VERTEX][MAX_VERTEX]= { {(unsigned)-1,1,2,(unsigned)-1,4}, {1,(unsigned)-1,(unsigned)-1,8,2}, {2,(unsi...原创 2018-06-20 11:00:58 · 517 阅读 · 0 评论 -
数据结构复习——图的广度优先搜索
1、和树的遍历类似,我们希望从图中某一定点出发访遍图中的其余节点,且每个节点仅被访问一次。2、实现。//假定图最多有20个定点 #define MAX_VERTEX_NUM 20 bool visited[MAX_VERTEX_NUM]={false}; //采用邻接链表的方式来存储图中的节点 struct Node { unsigned NodeID_; Node* next_;...原创 2018-06-19 22:04:31 · 166 阅读 · 0 评论 -
数据结构复习——图的深度优先搜索
1、和树的遍历类似,我们希望从图中某一定点出发访遍图中的其余节点,且每个节点仅被访问一次。2、实现。//假定图最多有20个定点 #define MAX_VERTEX_NUM 20 bool visited[MAX_VERTEX_NUM]={false}; //采用邻接链表的方式来存储图中的节点 struct Node { unsigned NodeID_; Node* next_;...原创 2018-06-19 21:46:34 · 343 阅读 · 0 评论 -
数据结构复习——二叉树
1、基本概念。二叉树:一种特化的树形结构。每个节点至多有两棵子树(每个节点的度小于等于2),即左子树与右子树,且左子树与右子树之间有左右差别。顺序不能颠倒。满二叉树:每一层节点数为能所容纳的节点的最大数。完全二叉树:最后一次层可以不满,但是要与满二叉树的节点编号对应。2、二叉树的重要性质。①第i层至多有[2^(i-1)]个结点。②深度为d的二叉树至多共有[2^d-1]个结点。③假定叶子结点个数为n...原创 2018-06-18 12:17:47 · 180 阅读 · 0 评论 -
数据结构复习——链表
1、链表的定义。线性表的顺序存储的方式要求逻辑上相邻的元素在物理位置上也相邻。因而可以随机的访问顺序表中的任意元素。但是要插入或者删除一个元素需要大量的移动其他的元素。正是由于上述链表的顺序存储的缺点,提出了线性表的链式存储的方式,来改进插入或者删除带来的负面效应。但是,由于线性表的链式存储的方式并不要求逻辑上相邻的元素在物理位置上也相邻。因此,链式存储的线性表失去了随机访问线性表的元素的特性。2...原创 2018-06-16 20:14:46 · 196 阅读 · 0 评论 -
八大排序算法之八——希尔排序
1、基本原理。正是没怎么改动希尔排序,才将希尔排序放置八大排序算法的最后一个算法来讲。闲话少说,算法的基本原理如下。点击打开链接原创 2018-06-15 16:37:42 · 123 阅读 · 0 评论 -
八大排序算法之七——基数排序
1、基本原理。//To do原创 2018-06-14 21:04:16 · 134 阅读 · 0 评论 -
八大排序算法之六——堆排序
1、基本原理。堆排序是一种树形构造排序,是对直接选择排序的有效改进。堆的定义:具有n个元素的序列(a[0],a[1],...,a[n-1]),当且仅当满足(a[i]>=a[2*i],a[i]>=a[2*i+1])或者(a[i]<=a[2*i],a[i]<=a[2*i+1])时称之为堆。由堆的定义可以很直观的看出,堆顶元素必定是最大(小)值,完全二叉树可以很直观的表示堆的结构...原创 2018-06-14 20:48:26 · 130 阅读 · 0 评论 -
八大排序算法之五——归并排序
1、基本思想。归并排序是将两个(或两个以上)的有序表合并成一个新的有序表。2、实现。/** * @brief mergeSortedArray 将两个已经排好序的区间 * [first,mid] 、[mid+1,last] 合并成一个排好序的区间 * @param array 总区间的起始地址 * @param first 第一个有序区间的起点 * @param mid 第一个有序...原创 2018-06-14 14:39:55 · 127 阅读 · 0 评论 -
八大排序算法之四——快速排序
1、基本思想。选择一个基准元素,通常是第一个元素或者最后一个元素,通过一趟扫描,将待排序元素分为两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序的正确位置,然后再用同样的方法递归的排序划分的两部分。2、实现。/** * @brief getPosition 快速排序算法的辅助函数 * 以第一个元素为基准元素,将所有小于基准元素的元素移到基准元素前面 * 将大于等于基准元素...原创 2018-06-14 13:19:33 · 333 阅读 · 0 评论 -
八大排序算法之三——简单选择排序
1、基本思想。在要排序的一组数中,选出最小的一个数与第一个位置的数交换,然后在剩下的数中找出最小的数与第二个位置的数交换。如此进行到倒数第二个数与倒数第一个比较为止。2、实现。int main() { int a[10]={11,42,53,25,36,6,75,8,26,4}; std::cout<<"before sort:"<<std::endl; ...原创 2018-06-14 10:59:40 · 339 阅读 · 0 评论 -
八大排序算法之一——直接插入排序
1、基本思想,在要排序的一组数中,假定前面n-1(n>=2)个数字已经排好序,将第n个数加入,使得前n个数字都有序。如此循环n-1次,则前n个数字都有序了。2、实现。int main() { int a[10]={11,42,53,25,36,6,75,8,26,4}; std::cout<<"before sort:"<<std::endl; ...原创 2018-06-14 10:17:15 · 174 阅读 · 0 评论 -
八大排序算法之二——冒泡排序
1、基本思想。在要排序的一组数中(假定有n个数据,n>=2),自尾部的数据向头部的数据开始,对两个相邻的元素比较和调整,让较大的数往尾部走,让较小的数往头部走。这样,经过一轮比较与交换调整后,头部的元素必定是当前这组数中最小的那个。去掉头部的元素,在剩下的元素中进行上述比较与调整。如此进行n-1l轮调整,数组已经排好序。2、实现。int main() { int a[10]={11,...原创 2018-06-14 10:39:34 · 106 阅读 · 0 评论