上一页 1 ··· 9 10 11 12 13 14 下一页
摘要: 1、问题引入 查找树是一种数据结构,它支持多种动态集合操作,包括构造、查找、插入、删除、寻找最小值、寻找最大值等,其中构造过程主要采用不断插入值来完成。 二叉查找树中的关键字存储方式满足以下性质:设x为二叉查找树中的一个节点,如果y是x的左子树中的一个节点,则y->data < x->data;如果y是x的右子树中的一个节点,则y->data > x->data。 二叉查找树上执行的基本操作的时间与树的高度成正比,对于一棵含n个节点的完全二叉树,这些操作的最坏情况运行时间为o(lgn)。同样的,如果树是含有n个节点的线性链,则这些操作的最坏时间为o(n)。2 阅读全文
posted @ 2012-06-19 15:40 lpshou 阅读(2065) 评论(1) 推荐(4) 编辑
摘要: 1、问题引入 散列表示普通数组概念的推广,,,,当实际存储的关键字数比可能的关键字总数较小时,采用散列表就会比直接数组寻址更为有效,因为散列表通常采用的数组尺寸与所要存储的关键字数成正比。散列表中主要着重解决“碰撞”问题,所谓“碰撞”就是多个关键字映射到同一个数组下标位置,这里讲采用除法散列法对关键字进行散列,对出现的冲突利用链接法进行解决。2、具体实现 具体参见:(采用链地址法处理冲突构造哈希表 http://www.cnblogs.com/lpshou/archive/2012/05/08/2490191.html)这篇文章。。。。 阅读全文
posted @ 2012-06-18 20:15 lpshou 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 1、问题引入 之前的堆排序、快速排序都是基于输入元素间的比较,这类排序叫做比较排序,对于n个元素的比较排序可以证明其在最坏情况下都要用O(nlgn)次比较来进行排序,本节中将讨论三种以线性时间运行的算法:计数排序、基数排序、桶排序,这些算法都用非比较的一些操作来确定排序顺序。2、算法讨论2.1 计数排序 计数排序假设n个输入元素中的每一个都是介于0到k之间的整数(k为某个整数),其基本思想是:对于每一个输入元素x,确定出小于x的元素个数。有了这一信息,就可以吧x直接放到它在最终输出数组中的位置上,例如,如果有17个元素小于x,则x就属于第18个输出位置。 在计数排序中,假定输入数组是A[... 阅读全文
posted @ 2012-06-18 12:15 lpshou 阅读(1747) 评论(2) 推荐(0) 编辑
摘要: 1、算法描述 快速排序也是基于分治模式的,下面是一个典型子数组A[p..r]排序的分治过程,主要分为三个步骤: (1)分解:将数组A[p..r]划分成两个子数组A[p...q-1]和A[q+1...r],使得前一个数组中每个值都小于等于A[q],后一个数组每个值都大于A[q],下标q也在这个分解过程中求得。 (2)解决:通过递归调用对两个子数组分别进行排序。 (3)合并:两个子数组是就地进行排序的,所以他们的合并并不需要操作,这个数组已经有序了。。2、具体实现: 形参和实参的区别: (1)实现一:View Code 1 #include<stdio.h> 2 int partit. 阅读全文
posted @ 2012-06-18 09:38 lpshou 阅读(330) 评论(1) 推荐(1) 编辑
摘要: 1、堆排序1.1 堆排序简介 堆数据结构是一种数组对象,它可以被视为一棵完全二叉树,树中每个节点与数组A中存放该结点值的那个元素对应。树根为A[1],给定了某个结点的下标i,其父节点PARENT(i),左儿子节点LEFT(i)和右儿子结点RIGHT(i)的下标可以简单的计算出来:PARENT(i):不大于i/2的最大整数,LEFT(i):2i;RIGHT(i):2i+1; 堆排序主要分成三个重要步骤: (1)利用MAX-HEAPIFY来保持堆的性质:输入为数组A和下标i。当其被调用时,我们假定以LEFT(i)和RIGHT(i)为根的两棵二叉树都是最大堆,但这时A[i]可能小于其子女,这就... 阅读全文
posted @ 2012-06-15 15:15 lpshou 阅读(2541) 评论(0) 推荐(0) 编辑
摘要: 1、memcpy、memmove、memset源码link:http://note.youdao.com/share/?id=1f826e4337c7db272e94fdb4f267a8de&type=note2、strcpy、strcat等源码link:http://note.youdao.com/share/?id=d23a598b2e31321517ed57d2599de181&type=note3、atoi和itoa源码:link:http://note.youdao.com/share/?id=96b713b249981aa0c5f9be5d0657fb90& 阅读全文
posted @ 2012-06-05 15:43 lpshou 阅读(2537) 评论(1) 推荐(1) 编辑
摘要: 1、问题引入 自己在写一个linux下的模拟执行指令的时候,遇到了输入"cat a.c”,要将该字符串分解成cat和a.c两个单独的字符串,虽然知道有strtok的存在,但是想自己尝试写一下,于是就自己写了一个,不过总是遇到这样或那样的问题,虽然最后调通了,不过确浪费了不少时间;后来作业交上去以后又仔细阅读了strtok函数,发现原来linux下已经改成strsep,所有在这里就写一下自己所走的过程。2、自己写的字符串分割函数:用于分割指令,比如cat a.c最后会被分割成cat和a.c两个字符串、mv a.c b.c最后会被分割成mv和a.c和b.c三个字符串。 具体实现如下: V 阅读全文
posted @ 2012-06-04 11:35 lpshou 阅读(14218) 评论(0) 推荐(0) 编辑
摘要: 1、矩阵的加减乘除求逆运算的概念: (1)矩阵概念 有m n个数排列成一个m行n 列,并括以方括弧(或圆括弧)的数表称为m行n 列矩阵。 (2)矩阵加法: (3)矩阵乘法: (4)矩阵的求逆运算 (5)矩阵的除法: 分成两种(1)A\B=inverse(A)*B (2)B/A=B*inverse(A),理解上可能有误,不过是按照这两种方式来运算的。。2、要求: 要求很简单:编写一个实现矩阵(向量)的+ - * / 求逆运算的类(女友的一个作业题)3、实现代码 View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #.. 阅读全文
posted @ 2012-05-08 16:19 lpshou 阅读(45924) 评论(3) 推荐(0) 编辑
摘要: 1、背景引入 (1)线性表和树等线性结构中,记录在结构中的相对位置是随机的,和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需要进行一系列和关键字的比较。理想的情况是希望不经过任何比较,一次存取便能够取到所查找的记录,那就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字和结构中一个唯一的存储位置相对应。因而在查找时,只要根据这个对应关系f找到给定值K的像f(K)。若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上,因此,不需要进行比较便可以直接取得所查记录。在此,我们称这个对应关系f为哈希函数,按照这个思想建立的表为哈希表。 哈希函数的... 阅读全文
posted @ 2012-05-08 15:30 lpshou 阅读(41398) 评论(1) 推荐(7) 编辑
摘要: 1、问题引入 一个有n个顶点的有向图的传递闭包为:有向图中的初始路径可达情况可以参见其邻接矩阵A,邻接矩阵中A[i,j]表示i到j是否直接可达,若直接可达,则A[i,j]记为1,否则记为0;两个有向图中i到j有路径表示从i点开始经过其他点(或者不经过其他点)能够到达j点,如果i到j有路径,则将T[i,j]设置为1,否则设置为0;有向图的传递闭包表示从邻接矩阵A出发,求的所有节点间的路径可达情况,该矩阵就为所要求的传递闭包矩阵。。。例如:有向图为:由该有向图可以得到初始的邻接矩阵为:那么warshall传递闭包算法的目的就是由邻接矩阵出发,进行探索求出最终的传递闭包:2、动态规划求解思路 动.. 阅读全文
posted @ 2012-04-27 10:32 lpshou 阅读(43161) 评论(0) 推荐(5) 编辑
上一页 1 ··· 9 10 11 12 13 14 下一页