自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 各种排序算法(内部排序)及其实现

本文是基于《数据结构(C语言版)(第二版)》(严蔚敏)其排序章节所做的总结。因此具体解释可以去参考此书。概念什么是排序排序是按关键字的非递减或非递增顺序对一组记录重新进行排列的操作。数学描述: 设n个记录的序列为 {R1, R2, …, Rn},其关键字序列为 {K1, K2, …, Kn} 确定1, 2, …, n的一种排序p1, p2, …, pn,使之满足Kp1 <= Kp2 <= …

2016-08-26 17:06:55 4729 1

原创 散列表(哈希表)及其实现

基本概念哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。例如:给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)

2016-08-22 17:22:06 643

原创 AVL树(平衡二叉树)及其实现

概念AVL树是高度平衡的而二叉树。 它的特点是:AVL树中任何节点的左右子树的高度差(平衡因子)的绝对值不大于1。 它需要每次在平衡因子不为0,-1,1时进行调整,使树的再次平衡。从而达到高效的查找。 点击这里:AVL的详细介绍C++代码实现:AVL树是特殊的二叉排序树,因此它的实现除了插入操作外,其他的和平衡二叉树都相同,这里就不在实现,只给出插入的算法。#include <iostrea

2016-08-22 10:11:54 620

原创 二叉搜索树(二叉查找树、二叉排序树)及其实现

二叉排序树的定义二叉排序树(Binary Sort Tree),又称二叉查找树、二叉搜索树。它或者是一棵空树;或者是具有下列性质的二叉树: 1. 若左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2. 若右子树不空,则右子树上所有结点的值均大于它的根结点的值; 3. 左、右子树也分别为二叉排序树。存储结构: typedef struct bst_node { int

2016-08-17 18:10:44 1231 1

原创 图的最短路径算法(Dijkstra,Floyd)的实现

从某个源点到其余各顶点的最短路径迪杰特斯拉算法Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。算法步骤如下:  1. 初使时令 S={V0},T={其余顶点},T中顶点对应的距离值  若存在,d(V0,Vi)为弧上的权值  若不存在<V0,Vi>,d(V0,Vi)为∝  2. 从T中选取

2016-08-14 11:44:49 7096

原创 图的遍历及最小生成树(prim,kruskal)的实现

关于图的介绍网上很多,这里就不介绍了,直接上代码: 最小生成树算法可以看看:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html#include <iostream>#include <iomanip>#include <climits>#include <queue>using namespace std;#

2016-08-13 21:11:45 1744

原创 根据前序和中序序列确定二叉树

方法1、确定树的根节点。树根是当前树中所有元素在前序遍历中最先出现的元素。 2、求解树的子树。找出根节点在中序遍历中的位置,根左边的所有元素就是左子树,根右边的所有元素就是右子树。若根节点左边或右边为空,则该方向子树为空;若根节点左边和右边都为空,则根节点已经为叶子节点。 3、递归求解树。将左子树和右子树分别看成一棵二叉树,重复1、2、3步,直到所有的节点完成定位。其的遍历来确定二叉树可以参考:

2016-08-08 21:04:48 8244

原创 哈夫曼编码算法及其实现

概念哈夫曼编码就是利用哈夫曼树构造的最优编码。算法基本思想是:为出现次数较多的字符编以较短的编码。 对于每个字符,根据其出现的次数为权值,构造哈夫曼树。然后从根到每个叶子节点的路径上,左分支赋值0,右分支赋值1,个分支构成一个二进制串,这个二进制串就是哈夫曼编码。C++代码#include <iostream>#include <cstring>#include <algorithm>usi

2016-08-05 09:53:52 9440

原创 哈夫曼树及其算法实现

概念:哈夫曼(Huffman)树又称最优二叉树或最优搜索树,是一种带权路径长度最短的二叉树。在许多应用中,常常赋给树中结点一个有某种意义的实数,称此实数为该结点的权。从树根结点到该结点之间的路径长度与该结点上权的乘积称为结点的带权路径长度(WPL),树中所有叶子结点的带权路径长度之和称为该树的带权路径长度. 具体解释:http://lib.csdn.net/article/datastructur

2016-08-04 22:10:35 25898 8

原创 链表的快速排序及冒泡排序

快速排序的思路众所周知,快速排序排序的核心思想是:选定基准值并排好其位置, 根据基准值将序列分割两半,分别递归之。 单链表寻找基准点的方法:用两个指针i和j,这两个指针均往next方向移动,移动的过程中保持i之前的节点值都小于(或大于)选定的基准值key,i和j之间的节点值都大于key,那么当j走到末尾的时候便完成了一次分割支点的寻找。(参考博文:http://blog.csdn.net/wumu

2016-08-03 14:13:46 606 1

原创 线索二叉树的生成及遍历

概念线索二叉树:按照某种遍历方式对二叉树进行遍历,可以把二叉树中所有结点排序为一个线性序列。在改序列中,除第一个结点外每个结点有且仅有一个直接前驱结点;除最后一个结点外每一个结点有且仅有一个直接后继结点。这些指向直接前驱结点和指向直接后续结点的指针被称为线索(Thread),加了线索的二叉树称为线索二叉树。百科解释:链接完整C++代码:#include <iostream>using namesp

2016-08-02 22:53:48 668

原创 二叉树各种遍历算法(递归及非递归算法)

遍历的概念:所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。二叉树上访问结点所做的操作依赖于具体的应用问题。 遍历方式:根据访问结点操作发生位置命名:① NLR:前序遍历(PreorderTraversal亦称(先序遍历))——访问根结点的操作发生在遍历其左右子树之前。② LNR:中序遍历(I

2016-08-02 12:12:09 689

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除