数据结构和算法
文章平均质量分 73
qingqiulengya
这个作者很懒,什么都没留下…
展开
-
直接选择排序和它的优化
直接选择排序是一种比较直观的排序,它是从一个无序的额数组中选择一个最小或最大的并将这个最大的放在数组的开始或末尾,现在进行代码的实现:/****/if(parr[j]/********************/现在这个选择排序还有很大的优化空间,上述的方法的时间复杂度为O(n^2)。现在的优化方式是同时选出他的最大的和最小的。代码实现:void Se原创 2016-06-02 17:14:00 · 1484 阅读 · 0 评论 -
利用哈夫曼树进行文件压缩
项目描述:项目简介:利用哈夫曼编码的方式对文件进行压缩,并且对压缩文件可以解压开发环境:windows vs2013项目概述: 1.压缩 a.读取文件,将每个字符,该字符出现的次数和权值构成哈夫曼树 b.哈夫曼树是利用小堆构成,字符出现次数少的节点指针存在堆顶,出现次数多的在堆底 c.每次取堆顶的两个数,再将两个数原创 2016-07-25 00:43:07 · 6578 阅读 · 0 评论 -
冒泡排序的优化及最好最差情况
最开始学习的时候并没有对其进行深入的思考,现在对其进行总结,冒泡排序的思想也就不需要赘述。最开我们会将数列进行n-1趟排序,每趟又进行一个循环的冒泡,如果是升序,我们就会将相邻的两个元素进行比较,将大的元素一直向后面“沉”,直到所有循环结束,这是数列也就被我们排序完成。代码如如下:void BubbleSort(int* parr,int size)//冒泡排序(升序){原创 2016-06-05 20:31:22 · 18155 阅读 · 3 评论 -
二叉树
1.树的节点:节点包含数据和指向其它节点的指针,因为不知道有几个指向其它节点的指针呢个,所以树的结构变得难以定义(因为子节点的个数是未知的),这是可以采用左孩子和右兄弟的表示方法,左孩子可以访问左子树的节点,用右子树可以一直往下访问它的兄弟节点,这样就可以实现树的定义和访问。2.二叉树:对于二叉树,它只有左子树和右子树,所以二叉树就不难表示,二叉链中包含数据,指向左子树的指针和指向右子树的指针,三原创 2016-05-30 10:47:02 · 303 阅读 · 0 评论 -
两个队实现栈
我们知道队的特点是先进先出,元素只能从队的尾部进入,只能从队的尾部出来;栈的特点是先进先出,先进栈的元素被压入栈底,后进入的元素覆在栈顶,出栈时也只能从栈的顶部出来。所以我们要借用两个队来实现栈的功能,先不用栈自身的属性却可以实现栈的属性。(队用链表来实现) 现有两个队,我们将他们分别记为Qin,Qout,开始是将元素插入到Qin中,然后将将除了队尾的元素全部保存到Qout中,保存的过程中依次将原创 2016-05-30 10:46:55 · 776 阅读 · 0 评论 -
回溯法解决迷宫问题
现在有迷宫地图:(回溯法)1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 10 0 0 1 1 1 1 1 1 11 1 0 1 1 1 1 1 1 11 1 0 1 1 1 1 1 1 11 1 0 1 1 1 1 1 1 11 1 0 0 0 0 0 0 1 11 1 0 1 1 1 1 0 1 11 1 0 1 1 1 1 0 1 11 1 0 1 1 1 1 1原创 2016-05-30 10:46:59 · 1323 阅读 · 0 评论 -
BitMap的原理及使用
位图:位图的原理就是用一个bit来标识一个数字是否存在,采用一个bit来存储一个数据,所以这样可以大大的节省空间。例如一个int型有32bit,那么就可以用这32个bit来存储0~31这些整型数据,所以可以将1~31这些数据仅用1个bit来存储,这样节省了空间。例如要存储3,7,4,8主要把握的是映射关系代码实现:class BitMap{原创 2016-06-08 20:41:13 · 5959 阅读 · 1 评论 -
基数排序
原理是按每一位进行对数组的排序,例如:代码实现:int GetDigit(int * parr,int size)//获取最大数的位数{ int max = parr [0]; for (int i = 1; i <= size;i++) {原创 2016-06-08 17:48:01 · 338 阅读 · 0 评论 -
AVL树的插入和检查
所以还是满足左路节点小于根节点根节点小于右路节点。现对AVL的插入算法进行实现,方法是先将每个节点按二叉搜素树的方式进行插入,然后再根据AVL树的性质对插入的节点做相应的调整,使其满足AVL树的性质。里面涉及到左旋,右旋,一级左右旋和右左旋。左旋为:右旋为:左右旋:右左旋:现在按图进行代码实现:template stru原创 2016-06-23 23:48:43 · 640 阅读 · 1 评论 -
二叉搜索树的增删查改
二叉搜索树注重增删查改,现在针对key/value形式进行研究。现在对其进行实现,分别有插入,查找,删除,分别对这几个功能用递归和非递归实现。 其中删除操作比较特别,分为3种,分别是删除叶子节点,删除左为空或右为空的节点,第三种是删除左右子树都不为空的节点。最后一种删除最麻烦,它分为三个步骤,分别是找出右树的最左节点,然后和要删除的节点进行key/value的互换,然原创 2016-06-17 23:43:35 · 436 阅读 · 0 评论