
数据结构算法与分析
文章平均质量分 67
yzl20092856
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
排列
排列a,b,c的排列形式有原创 2014-10-10 16:13:42 · 410 阅读 · 0 评论 -
归并排序
一、归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并二、归并操作第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列第二步:设定两个指针,最初位置分别为原创 2015-09-06 18:26:08 · 447 阅读 · 0 评论 -
希尔排序 shell sort
一、希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。二、算法思想:1.先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。2在各组内进行直接插入排序。3.取第二个增量d2三、算法性能时间复原创 2015-09-06 16:37:10 · 638 阅读 · 0 评论 -
哈夫曼树--最优二叉树
一、哈夫曼树(Haffman)树又称最优二叉树,是一类带权路径长度最短的树1.路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。2.节点的权及带权路径长度若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到原创 2015-08-30 15:49:00 · 1009 阅读 · 0 评论 -
二叉排序树
一、二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)原创 2015-08-31 16:50:41 · 813 阅读 · 0 评论 -
变量内存的分配情况
一、对于一个进程的内存空间而言,可以在逻辑上分成3个部分:代码区,静态数据区和动态数据区。动态数据区一般就是“堆栈”。“栈(stack)”和"堆(heap)"是两种不同的动态数据区。栈是线性结构,而堆是链式结构。全局变量和静态变量分配在静态数据区,初始化的全局变量和静态变量在一块区域,未初始化的在一个区域,分别地址是连续的。但是和局部变量的地址相差很远,是因为局部变量分配在动态数据区,声明连续原创 2015-08-29 10:59:22 · 876 阅读 · 0 评论 -
快速排序
快速排序(QuickSort)的基本思想是:通过一次排序后,将原数据分成两个部分,其中一个部分全部比另一个部分都要小或者都要大,然后递归对这两个部分进一步快速排序,最后得到数据的有序序列。算法过程 设待排数组是r[0]...r[n-1],首先任选一个数据(通常是数组的第一个元素)当做监测点。然后将所有小的数据放在他的前面,所有比它大的数据放在后面。最后递归快速排序两边的数据。快速排序不是一种稳原创 2015-09-04 10:47:50 · 576 阅读 · 0 评论 -
排序
排序原创 2014-10-14 10:04:41 · 619 阅读 · 0 评论 -
树与二叉树
一、树的定义及相关术语1.树的定义:树是有n(n>=0)个有限数据元素的集合。当n=0时,称这棵树为空树。其中非空树,(1)每个元素称为结点(node);(2)有一个特定的结点被称为根结点或树根(root)。(3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(12.相关术语:(1)节点的度:一个节点含有的子树的原创 2015-08-02 11:18:48 · 388 阅读 · 0 评论 -
栈(stack)和堆(heap)的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2015-08-28 20:13:37 · 499 阅读 · 1 评论 -
栈和队列
一、栈栈是限制在表的一端进行插入和删除的线性表。栈的插入叫做进栈和入栈,删除叫出栈和退栈。栈又称为后进先出(Last In First Out)的线性表.下图是栈的示意图。栈的运算:(1)初始化栈Init_Stack(s):设置一个空栈。(2)判断栈空Empty_Stack(s):若栈s为空返回1,否者返回0.(3)入栈Push_Stack(s,x):在栈s的顶部插入一原创 2015-08-01 11:55:48 · 488 阅读 · 0 评论 -
链表 C++描述
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一原创 2015-07-30 15:07:06 · 650 阅读 · 0 评论 -
堆排序
堆排序是利用对的性质进行排序的一种排序方法。1.什么是堆:堆可以看做是一个完全二叉树的储存结构,且非叶子节点不小于(或不大于)其孩子节点。若父节点不小于子节点(ki>=k(2i+1)并且ki>=k(2i+2))称为大根堆,即根节点的关键字值最大。反之,父节点不大于子节点(ki由于根节点(堆顶)始终是堆里面的最大值或者是最小值,因此可以利用这个性质进行排序。2.堆的排序思想(基于大根原创 2015-07-18 10:49:20 · 339 阅读 · 0 评论 -
时间复杂度
原文出自:http://blog.sina.com.cn/s/blog_50ce2abb0100vhem.html求解算法的时间复杂度的具体步骤是: ⑴ 找出算法中的基本语句; 算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。 ⑵ 计算基本语句的执行次数的数量级; 只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂转载 2015-07-25 15:32:32 · 319 阅读 · 0 评论 -
求集合的所有子集的算法
求集合的所有子集的算法对于任意集合A,元素个数为n(空集n=0),其所有子集的个数为2^n个如集合A={a,b,c},其子集个数为8;对于任意一个元素,在每个子集中,要么存在,要么不存在,对应关系是:a->1或a->0b->1或b->0c->1或c->0映射为子集:(a,b,c)(1,1,1)->(a,b,c)(1,1,0)->(a,b )(1,0,1)->(a, c)(1,0,0)->(a )(转载 2014-10-11 15:30:14 · 8584 阅读 · 1 评论 -
哈希查找
原文地址:http://blog.youkuaiyun.com/xiaoping8411/article/details/7706376哈希查找是通过计算数据元素的存储地址进行查找的一种方法。O(1)的查找,即所谓的秒杀。哈希查找的本质是先将数据映射成它的哈希值。哈希查找的核心是构造一个哈希函数,它将原来直观、整洁的数据映射为看上去似乎是随机的一些整数。哈希查找的操作步骤:1)转载 2015-09-16 16:22:35 · 576 阅读 · 0 评论