
数据结构及算法
文章平均质量分 76
数据结构与算法
gvliew
这个作者很懒,什么都没留下…
展开
-
数据结构<一> 排序算法之选择排序
选择排序算法描述:假设有一数组,内有N个无序数字,进行从小到大选择排序,从第一个数字开始遍历数组,挑选最小的数字与数组第一个数字进行交换,然后从第二个数字开始进行第二次遍历,选次小的数字与第二个数字进行交换,以此类推,第N-1遍遍历后,数组排序完成。选择排序实现过程时间复杂度为O(n²),代码实现过程如下:#include#define SIZE 5us原创 2017-10-17 20:20:18 · 603 阅读 · 0 评论 -
KMP算法的个人理解
网上关于KMP算法的详解很多,也有很多人力争做到简洁解释。我就写写我的心得理解吧,很短,应该很易懂首先来看一个反例:总串 : a b c a b c a b d e f g子串 : a b c a b d总串前5位是abcab,和子串前5位相同,但比较第6位时,不一样。这时我们错误的想一下,抛弃掉总串中被比较过的(即前5位),从总串第6位和子串的第1位比较,不一样,抛弃第6位;总串第7位和子串第一...原创 2018-03-01 13:59:01 · 637 阅读 · 0 评论 -
数据结构——Prim算法
看了一下表,刚刚过了12点,今天就是年三十了,刚看完辽视春晚,大晚上睡不着,就把白天复习的Prim给更一下。我只计算了最小生成树的权值和,没有记录出生成图各边情况,其实我代码中,Edge数组存放的是某未被访问节点(i)到已被访问的所有节点中最近的距离,可以改一下,定义一个结构体,里面放有起点,终点,和Edge[i]值即可。由访问的顺序依次压入队列,输出时挨个取top再pop就可以了。老规矩,在网上...原创 2018-02-15 00:46:07 · 2552 阅读 · 0 评论 -
数据结构——迪杰斯特拉算法
这一篇写一下Dijkstra算法。当初学习数据结构的课件找不到了,就在网上找了两张图片,有一个有权无向图以及迪杰斯特拉算法的原理思想。以下是C++实现代码:#include<iostream>#include<limits.h>#define MAXVEX 100using namespace std;typedef struct{ int matr...原创 2018-02-14 19:44:35 · 3336 阅读 · 0 评论 -
数据结构——01背包问题
原创 2018-02-07 22:20:47 · 1393 阅读 · 0 评论 -
数据结构——图的深度/广度优先遍历
这是上一篇:图的存储方式——邻接矩阵http://blog.youkuaiyun.com/dala_da/article/details/79302329从整体来看,我个人认为深度优先有点类似二叉树先序遍历,都是将访问节点压入到栈,然后看是否有延伸节点,若没有则出栈,返回到上一节点;而广度优先则与二叉树层次遍历比较像,离出发节点比较近的点先被访问。因此本篇我采用非递归的方式进行图的遍历,分别采用的是站和队列的...原创 2018-02-12 00:28:51 · 8414 阅读 · 2 评论 -
数据结构——二叉树的递归/非递归遍历
复习一下二叉树递归非递归的先中后序遍历写非递归后序遍历的时候卡壳了,参考了一下网上的思路,大概有两种,一种是标记每个节点是否有走过,如果父节点的左右子节点都标记访问过,则可以访问父节点;一种是定义一个指针,指向上一个访问的节点,如果某父节点的右子节点为NULL或者是上一个访问的节点,则该父节点应当被访问。#include#include#include#define size 20原创 2018-02-02 00:02:00 · 357 阅读 · 0 评论 -
数据结构——图的邻接矩阵存储
根据百度百科定义:一般用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据,这个二维数组称为邻接矩阵。用邻接矩阵表示图,很容易确定图中任意两个顶点是否有边相连。邻接矩阵分为有向图邻接矩阵和无向图邻接矩阵。对无向图(无向简单图)而言,邻接矩阵一定是对称的,而且对角线一定为零,有向图则不一定如此。也就是定义邻接矩阵matrix[i][j],其值为顶点i到j上面的权值,类似于...原创 2018-02-09 22:40:31 · 2174 阅读 · 0 评论 -
数据结构——二叉树(2)
原创 2018-02-08 22:54:30 · 290 阅读 · 0 评论 -
数据结构<二>链表的基本操作
因为这学期C++大作业涉及到了链表、栈和队列,所以这方面知识点记得还比较牢靠,所以先把这些整理下,同时我也会查阅网上相关题目练一下手本篇主要复习一下链表初始化,头插法及尾插法输入,逆置,以及排序#include#includeusing namespace std;typedef struct Node{ int num; Node *next;}Node;Node原创 2018-01-18 22:21:43 · 266 阅读 · 0 评论 -
栈和队列的基本操作
栈和队列从某些方面还是比较像的,所以把这两个合到一起复习写一下顺序存储栈和顺序存储队列的基本操作#include#include#define Max 100using namespace std;typedef struct Stack{ int *base; int *top; int stack_size;}Stack;typedef s原创 2018-01-21 16:02:15 · 337 阅读 · 0 评论 -
数据结构<一> 排序算法之快速排序
快速排序的基本思想:将首个元素选为基准元素(或最后一个),排序后可将序列分为比基准元素小和比基准元素打的两个无序序列,然后使用递归对这两个元素用同样的方法排序,直至整个序列有序。快速排序的实现过程:代码实现:#include#define SIZE 5typedef struct{ int text_num; char text_ch原创 2017-10-18 21:30:27 · 353 阅读 · 0 评论 -
数据结构<一> 排序算法之插入排序
插入排序算法思想:假设手上又一把未经排序的扑克牌(总数设为N),需要将之从小到大排序。则先从牌的左面开始整理,第二张与第一张进行比较,并将前两张大小顺序排列好。排列第三张时,第三张先与第二张比较,若大则插入第二张之后(也就是不动),若小则与第一张比较,若大则插在第一和第二之间,若小则插第一张之前,如此,前三张大小顺序排列完毕。以此类推,在排列第n张之前,其前面的n-1张牌顺序必定已经从小到大排列。原创 2017-10-18 16:23:09 · 1173 阅读 · 0 评论 -
数据结构<一> 排序算法之冒泡排序
冒泡排序可以说是最简单,大多数人最先接触的排序算法。临近的数字两两进行比较,按照规定的顺序进行交换,,这样一趟过去后,最大或最小的数字就像气泡一样被‘排’最后一位,然后第二趟之后,次大或次小的数字被‘排’到倒数第二位,以此类推,直至第一位与第二位顺序正确。实现过程如图:冒泡排序复杂度为O(n²),代码过程如下:#include#define SIZE 5using na原创 2017-10-17 18:16:09 · 456 阅读 · 0 评论 -
数据结构——弗洛伊德算法
复习一下Floyd算法,代码实现很简单,3个for循环,每一层循环的意思需要深刻的理解推荐这片博客:http://blog.youkuaiyun.com/qq_34374664/article/details/52261672 有该算法的详细解释(2017.3.1)我下面的代码有很明显的缺点,所有的改动都是在原有的存储矩阵之上,如果需要对原图进行其他分析,需要复制一个矩阵,对后者进行改动,传递至Floyd函数...原创 2018-02-25 21:40:41 · 2171 阅读 · 1 评论