数据结构与算法入门-C++
文章平均质量分 78
Eileco
Que Sera Sera
展开
-
二叉搜索树的简单操作与实现
二叉搜索树(BinarySearchTree)性质 二叉搜索树首先是一棵二叉树,二叉树可能为空,而一颗非空的二叉搜索树要满足以下条件: (1)每个元素有一个关键字,所有关键字是唯一的。(关键字不唯一的二叉搜索树叫有重复值的二叉搜索树) (2)在根节点的左子数的元素都小于根节点的关键字。 (3)在根节点的右子数的元素都大于根节点的关键字。 (4)根节点的左右子树也是一棵原创 2018-01-11 15:57:10 · 181 阅读 · 0 评论 -
活动选择与小船过河问题(贪心算法)
活动选择问题描述:存在一个教室,有下面若干个活动需要安排在一天进行,活动之间不能重叠,如何安排活动使活动的数量最多?活动序号 1 2 3 4 5 6 7 8 9 10 11 (活动已经按结束时间排好)开始时间 1 3 0 5 3 5 6 8 8 2 12结束时间 4 5 6 7 9 9 1011 12 14 16贪心解题思路:贪心的核心在于局部最优解,在原创 2018-01-29 06:34:47 · 3798 阅读 · 2 评论 -
0/1背包问题与矩阵乘法链(动态规划)
何为0/1背包问题:0/1背包为一种特殊的背包问题,一个固定容量C的背包要装N种物品,每种物品只有一个,每种物品重量和价值都不相同,且只能选择装进去或者不装进去(即选择0或者1,无法只装一部分),要使背包中的物品价值最大,此为0/1背包问题。具体问题描述:存在一个容量为10的背包,有5种物品,分别重2,2,6,5,4千克,价值分别是6,3,5,4,6元,选择方案使背包中物品的总价值最大原创 2018-01-28 02:59:48 · 983 阅读 · 0 评论 -
图的应用之拓扑排序实现(辅助栈)
何为拓扑排序:一般常见的图是有环的,不需要考虑顶点的先后顺序,而比如在一些工程中,工程的流程图就需要考虑顶点的先后顺序,比如B的前置条件是完成A,这就需要拓扑排序来判断图是否满足拓扑次序,并且能够形象的显示各个顶点的先后顺序。拓扑排序有多种解,拓扑排序的解并不是唯一的,有些顶点的优先性是相同的。通常我们把顶点表示活动,边表示活动的先后关系的有向图称为顶点活动网(Activity On原创 2018-01-26 21:14:52 · 2580 阅读 · 0 评论 -
最短路径简单实现(Dijkastra算法和Floyd算法)
什么是最短路径:图中的某一个节点到另外某一个节点的最短路径的权值和,如果是无权值的图,则理解为权值为1的图。图的邻接矩阵结构:要计算最短路径,首先需要一个图,这里用邻接矩阵来表示一个图。typedef char VertexType; //顶点类型 ,默认为chartypedef int EdgeType; //边的权值 默认int原创 2018-01-25 21:06:08 · 2559 阅读 · 0 评论 -
排序算法之希尔排序和堆排序
希尔排序简述:希尔排序可以看作是直接插入排序的一种优化,即把一个数插入一个有序表,不过希尔排序多了一个默认的增量,把一个序列分成若干个增量大小的增量序列,然后在子序列直接进行直接插入排序,每次都使较小的数排到靠前的子序列里面,增量不断减小,子序列也不断缩小,最终使整个表有序。排序前的准备:准备了一个默认的顺序表#define MAXSIZE 10//顺序表结构template原创 2018-01-15 18:36:13 · 2143 阅读 · 0 评论 -
最小生成树简单实现(Prim算法与Kruskal算法)
最小生成树简述:最小生成树(Minimum Spanning Tree)指,在一个有权图中寻找最小权值和的树来连通所有顶点。Prim算法简述及准备:Prim的思路很简单,设定一个初始点(列如V0),寻找从此连接的最小的权值的边,然后开始一起比较下一个点出去的所有边的权值,最终得到最小权值的连通所有点的边的最小生成树。需要一个邻接矩阵表示的图来用于算法的实现:typedef ch原创 2018-01-23 09:17:27 · 487 阅读 · 0 评论 -
无向图的深度优先搜索与广度优先搜索
图的简述:图是一种复杂的数据结构,图(Graph)是由顶点(Vertex)组成的非空有穷集合和顶点之间的边(Edge)组成。图的边可以由权值(weight),也可以没有,有权值的图称为网图。图的边也可以有方向,没有方向的为无向图,有方向的为有向图。图很复杂,就需要复杂的方式来表示图,一般简单的使用邻接矩阵和邻接表来表示,还有十字链表和邻接多重表等,这里只介绍前两种的实现。无向图原创 2018-01-22 20:19:25 · 1887 阅读 · 0 评论 -
简单排序算法之简单选择排序和直接插入排序
简单选择排序简述:简单选择排序(Simple Selection Sort)可以说是冒泡排序的一种改版,它不再两两比较出较小数就进行交换,而是每次遍历比较当前数的后面所有数,最后再把最小的数和当前数进行交换。排序前的准备:#define MAXSIZE 10//顺序表结构template struct SqList{ T s[MAXSIZE + 1] = { NULL,原创 2018-01-13 19:22:42 · 5494 阅读 · 0 评论 -
简单排序算法之三种冒泡排序
冒泡排序简述:冒泡排序(Bubble Sort)本质是一种交换排序,不停比较前后两个元素大小,反序则交换,直到没有反序为止。排序前的准备:#define MAXSIZE 10//顺序表结构template struct SqList{ T s[MAXSIZE + 1] = { NULL,98,24,55,81,32,77,48,60,14,8 }; //原创 2018-01-13 17:26:03 · 303 阅读 · 0 评论 -
散列(哈希)表的C++简单操作和实现(线性探查)
散列(哈希)表的简述:散列是数据结构字典的另一种表示方法,它用一个散列函数把关键字映射到散列表的具体位置。散列表是一种面向查找的数据结构,它回避了关键词之间不断比较的麻烦,直接一步到位找到关键词的位置,是高效的。散列函数:散列函数可以有很多种,常见的有(1)平方区中法:把关键词平方后,取中间三位数字,适用于位数较小的关键词。(2)求模取余法:用一个求模函数,取得转载 2018-01-12 17:17:20 · 2045 阅读 · 2 评论 -
排序算法之归并排序的递归与迭代实现方法
归并排序简述:归并排序是排序算法的一种新的思路,旨在把两个或以上有序的数列归并一个有序的数列,是为归并。假如有一个含有n个元素的数组,将其看作n个有序列,然后两两归并,最终得到一个有序列。排序前的准备:#define MAXSIZE 10//顺序表结构template struct SqList{ T s[MAXSIZE + 1] = { NULL, 98, 24, 55原创 2018-01-20 20:15:00 · 1292 阅读 · 0 评论