数据结构
fern_girl
这个作者很懒,什么都没留下…
展开
-
算法的复杂度
算法的时间复杂度和空间复杂度统称为算法复杂度。一、算法的时间复杂度概念:时间复杂度就是一个函数,该函数计算的是执行基本操作的次数。时间复杂度的—O渐进表示法 一个算法中语句总的执行次数称为语句的频度或时间频度,记为T(n);n称为时间规模。一般情况下,算法总的执行次数T(n)是n的一个函数f(n),当n不断变化时,时间频度T(n)也会随之不断变化,原创 2017-04-15 11:16:06 · 406 阅读 · 0 评论 -
位图一
面试题:给40亿个不重复的无符号整数,没排过序。给定一个无符号整数,如何快速判断一个数是否在这40亿个数中 分析: 40亿个数,4 000 000 000相当于4G个数,每个数4个字节,总共16G采用遍历的方法,运行内存为4G,数据不能全部加载到内存,所以这个方法不行;采用哈希的方法,虽然效率高,但是空间浪费大;采用位图的方法,用字节0或1代表这个数是否存在,整数的范围从0~2^32-1,原创 2017-06-18 17:56:08 · 265 阅读 · 0 评论 -
B树的创建
1.B树的概念一棵M阶的(M>2) 的平衡二叉树,是一棵平衡的M路平衡搜索树,可以是空树或者满足一下性质:根节点至少有两个孩子; 原因:因为根节点至少有一个关键字,有两个指针域;每个非根节点至少有M/2-1(上取整)个关键字,至多有M-1个关键字,并且以升序排列;每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子;key[i]和key[i+1]之间的孩子节点的值介于key[i]、ke原创 2017-06-01 20:27:46 · 9444 阅读 · 1 评论 -
二叉树的遍历---递归和非递归实现
1.二叉树遍历—递归实现 - 先序遍历—递归实现void PreOrder()//先序遍历 根-->左子树-->右子树 { cout<<"PreOrder: "; _PreOrder(_pRoot); cout<<endl; }中序遍历—递归实现void InOrder()//中序遍历 左子数--》根--》右子树原创 2017-05-08 22:13:08 · 308 阅读 · 0 评论 -
二叉树的基本操作
二叉树的实现:#include<stdio.h>#include<queue>#include<stack>#include<list>#include<iostream>using namespace std;//二叉树节点template<class T>struct BinaryTreeNode{ BinaryTreeNode() :_pLeft(NUL原创 2017-05-08 21:57:44 · 409 阅读 · 0 评论 -
单链表的基本操作
头文件:#define _CTR_SECURE_NO_WARNINGS 1#ifndef _SEQLIST__H_#define _SEQLIST__H_#include<assert.h>#include<stdlib.h>#include<stddef.h>#include<stdio.h>typedef int DataType;typedef struct Node{ D原创 2017-04-24 12:03:42 · 299 阅读 · 0 评论 -
静态顺序表的基本操作
头文件:#define _CRT_SECURE_NO_WARNINGS 1#ifndef _STATICSEQLIST_H__#define _STATICSEQLIST_H__#include<stddef.h>#include<assert.h>#include<string.h>#define MAXSIZE 10typedef int DataType;//#define Dat原创 2017-04-24 11:53:53 · 201 阅读 · 0 评论 -
动态顺序表(可扩容)的基本操作
头文件:#define _CRT_SECURE_NO_WARNINGS 1#ifndef _STATICSEQLIST_H__#define _STATICSEQLIST_H__#include<stddef.h>#include<assert.h>#include<string.h>#include<stdlib.h>#include<stdio.h>#define MAXSIZE 1原创 2017-04-24 11:50:49 · 1497 阅读 · 0 评论 -
二叉搜索树---红黑树节点插入
1.红黑树的概念:红黑树是一棵二叉搜索树,它在每个节点上增加一个存储位来表示节点的颜色,可以是red或black,通过对任何一条从根节点到叶子节点上的间单路径来约束,红黑树保证最长路径不超过最短路径的两倍,因而近视平衡。2.红黑树的性质性质1,每个节点不是黑色就是红色性质2,根节点是黑色的;性质3,如果一个根节点是红色的,则它的两个叶子节点是红色的,即没有两个连续节点是红色节点性质4,对于每原创 2017-05-24 22:38:38 · 301 阅读 · 0 评论 -
小型迷宫实现---迷宫算法(递归回溯法)
首先我们来了解迷宫包含的算法—-回溯法 回溯法的基本思想: 对一个包括有很多个结点,每个结点有若干个搜索分支的问题,把原问题分解为若干个子问题求解的算法;当搜索到某个结点发现无法再继续搜索下去时,就让搜索过程回溯(回退)到该节点的前一个结点,继续搜索该节点外的其他尚未搜索的分支;如果发现该结点无法再搜索下去,就让搜索过程回溯到这个结点的前一结点继续这样的搜索过程;这样的搜索过程一致进行到搜索到问原创 2017-04-24 11:14:30 · 18149 阅读 · 0 评论 -
全排列---非递归实现
全排列的非递归实现算法描述实现全排列的非递归的排列,首先我们要明确排列的顺序,这样我们才会不会漏掉任何一个排列,我们按照从小到大的顺序排列,例如:“1234”的下一个就是“1243”,在下一个就是“1324”……首先,对于给定数列,如果不是一个最小数,如1324,则将它转换为最小数,我们先对它进行排序,保证该数列是所有数字组合数列中值最小,可以用快排,或则库函数qsort(s , n , siz原创 2017-04-21 23:07:33 · 703 阅读 · 0 评论 -
全排列和去重全排列---递归实现
一、全排列的概念: 根据360百科,我们知道从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。二、全排列的算法:递归实现全排列(存在重复数字交换问题,于是又有了第二种方法)去重全排列非递归实现全排列(循环交换,由小到大)三、接下来我们学习第一种方法—–递归实现全排列算法实现:#include<s原创 2017-04-21 22:13:04 · 8700 阅读 · 3 评论 -
Huffman树的创建
运用了小堆堆的基本操作#include<stdio.h>#include<iostream>using namespace std;#include"heap.cpp"//引用堆的创建文件template<class T>struct Node{ Node(T weight,T data = T()) :_pLeft(NULL) ,_pRight(NU原创 2017-05-12 12:48:36 · 735 阅读 · 0 评论 -
线索化二叉树的创建及遍历
#include<stdio.h>#include<iostream>using namespace std;enum thread{ LINK, THREAD,};template<class T>struct BinaryTreeThdNode{ BinaryTreeThdNode() :_pLeft(NULL) ,_pRig原创 2017-05-12 12:43:03 · 317 阅读 · 0 评论 -
堆的基本操作
堆的创建及插入删除堆顶元素等基本操作用模板参数来调整大小堆#include<stdio.h>#include<vector>#include<assert.h>#include<iostream>using namespace std;//下面是实现的小堆,同时我们也要实现大堆(只是将交换比较的小于号都改成大于号),为了实现代码的复用率,我们多添加一个模板参数---比较器(容器适配器)原创 2017-05-12 12:38:30 · 294 阅读 · 0 评论 -
优先级队列
优先级的基本概念:优先队列是0个或多个元素的集合,每个元素都有一个优先权或值,对优先队列执行的操作有1) 查找;2) 插入一个新元素;3) 删除.在最小优先队列(min priorityqueue)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素;对于最大优先队列(max priority queue),查找操作用来搜索优先权最大的元素,删除操作用来删除该元素.优先权队列中的元素可以有相原创 2017-05-12 12:32:52 · 288 阅读 · 0 评论 -
二叉搜索树---AVL树删除节点
前面我们写了AVL树的创建AVL树插入节点,即节点的插入,下面我们介绍AVL树节点的删除,与前面调整的 方法相同,在树不平衡时,对树进行调整,具体步骤如下:1. - 判断树是否为NULL,若为NULL,直接返回false; - 判断树是否只有一个节点,且该节点为要删除的节点,直接删除,_pRoot置NULL; - 否则的话找到要删除节点的位值,删除该节点(分三种情况),并用其孩子节点来代原创 2017-05-23 07:29:49 · 1333 阅读 · 0 评论 -
二叉树搜索树---AVL树插入节点
1.AVL树的概念: AVL树或则是空树,或是具有下列性质的二叉搜索树 它的左右子树都是AVL树;左子树和右子树的高度之差简称(平衡因子)的绝对值不超过1;2.AVL树的实现原理 与二叉搜索树的节点插入方法相同,具体步骤如下: 当树不平衡时,我们需要做出旋转调整,有四种调整方法,分别为右单旋、左单旋、先左单旋再右单旋、先右单旋在左单旋左单旋 右单旋 先右旋再左旋 先左旋再右原创 2017-05-22 14:59:58 · 620 阅读 · 0 评论 -
常见的文本压缩算法
1.目前主要的文本压缩算法 文本压缩是根据一定的方法对大量数据进行编码处理以达到信息压缩存储的过程,被压缩的数据应该能够通过解码恢复到以前的状态,而不会发生信息丢失的现象。2.文本压缩的分类 3.算法描述3.1.Huffman编码1.原理简介huffman压缩是数据结构课程中的常见内容, 是典型的贪心算法与二叉树的应用.压缩前, 以ascii文本为例, 每个字符如a,b…都采用等长的8位ac转载 2017-08-15 14:32:18 · 15461 阅读 · 0 评论