数据结构与算法分析
水目沾
for fun,for bread and for milk
展开
-
数据结构之图(图的简介)
图的定义: 一个图G = (V,E)由顶点(vertex)集 V 合边(edge)集 E 组成。每条边(v,w)就是一个点对,其中v,w ∈ V。有时也把边称作弧。如果点对是有序的,那么图就叫做有向图。顶点 v 和 w 领接边 (v,w) ∈ E。在一个具有边(v,w)从而具有边(w,v)的无向图,w和v邻接那v和w也邻接。图的基本术语:阶(Order):图G中顶集V的大小称作图原创 2014-04-08 13:23:24 · 744 阅读 · 0 评论 -
排序算法之堆排序
前言:今天我来介绍下堆排序,在写堆排序代码之前,我们要知道堆的概念! 堆的定义:n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质): (1)ki=号。//k(i)相当于二叉树的非叶子结点,K(2i)则是左子节点,k(2i+1)是右子节点若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树原创 2014-04-08 13:23:05 · 418 阅读 · 0 评论 -
排序算法之插入排序
插入排序算法简介: 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个原创 2014-04-08 13:23:09 · 401 阅读 · 0 评论 -
数据结构树之二分查找树
二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;任意节点的左、右子树也分别为二叉查找树。没有键原创 2014-04-08 13:23:16 · 7846 阅读 · 0 评论 -
排序算法之选择排序
选择排序算法简介: 选择排序是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其原创 2014-04-08 13:23:18 · 599 阅读 · 0 评论 -
数据结构树之红黑树
红黑树简介: 红黑树是一棵二叉搜索树,它在每个结点上增加了一个存储位来表示结点的颜色,可以是RED 或 BLACK。通过对任何一条根到叶子的简单路径上各个结点的颜色进行约束,红黑树确保没有一条路径回避其他路径长处2倍,因而是近似平衡的。 树的每个结点包含 5 个属性:color,key,left,right和p。如果一个结点没有子结点或者父结点,则该结点相应的指针属性的值为NULL。我原创 2014-04-08 13:23:22 · 493 阅读 · 0 评论 -
面试试题
第一题:通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 压缩规则: 1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。 2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。原创 2014-04-08 13:22:59 · 461 阅读 · 0 评论 -
排序算法之冒泡排序
参考:http://baike.baidu.com/view/254413.htm算法原理 冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每原创 2014-04-08 13:23:01 · 441 阅读 · 0 评论 -
排序算法之归并排序
归并排序 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。值得注意的是归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。比较 归并排序是稳定的排序.即相等的元素的顺序不会改变.如输入记录原创 2014-04-08 13:23:03 · 419 阅读 · 0 评论 -
排序算法之希尔排序
希尔排序算法简介: 希尔排序属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序。 排序过程:先取一个正整数d1希尔排序算法思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 该方法实质上是一种分组插入方法希尔排序算法模拟:(参考严蔚原创 2014-04-08 13:23:11 · 480 阅读 · 0 评论 -
数据结构树之二叉树
二叉树的定义: 是一颗空树或者具有以下性质 1.结点最多只有两个孩子,且有左右之分。不能交换左右孩子 2.结点点的左子树和右子树也是二叉树。例图 二叉树的基本形态: 二叉树中的术语: 1).结点度:节点所拥有的字数的个数成为该节点的度,在二叉树中度的取值只能是0,1,2. 2).叶节点:度为0的节点成为叶结点或终端结点。 3原创 2014-04-08 13:23:14 · 503 阅读 · 0 评论 -
图解数据结构树之AVL树
AVL树(平衡二叉树): AVL树本质上是一颗二叉查找树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为平衡二叉树。下面是平衡二叉树和非平衡二叉树对比的例图: 平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1AVL树的作用:原创 2014-04-08 13:23:20 · 896 阅读 · 0 评论 -
数据结构之图(图的基本操作)
由于图的基本操作的代码较多,我放到这一章来写。图可以用两种方法来存储,但是本人偏爱链表的表示方法,所以以下代码也都是是基于邻接链表的存储方式。 1 /* 2 以下存储结构参考严蔚敏版数据结构,不懂的可以翻阅查看 3 */ 4 const int UNDIGRAPH = 0; //无向图 5 const int DIGRAPH = 1; //有向图原创 2014-04-08 13:23:26 · 1303 阅读 · 0 评论