数据结构
PengPengBlog
激光雷达 点云处理 测绘 遥感 GIS 机器学习 深度学习
展开
-
时间复杂度
算法的时间复杂度和空间复杂度合称为算法的复杂度。1.时间复杂度(1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或转载 2016-11-29 10:57:51 · 345 阅读 · 0 评论 -
哈夫曼树的构建
定义哈夫曼树,又称最优树,是一类带权路径长度最短的树。树的带权路径长度,是树中所有叶子 节点的带权路径长度之和。通常记做WPL=W1*L1+W2*L2+...+Wn*Ln。例如:节点ABCDE的权值分别为:1,2,4,5,6。对于图1,WPL=4*3+2*3+1*3+5*3+6*1=42。对于图2,WPL=1*3+2*3+4*2+5*2+6*2=39。以上节点还可以列出其他的树转载 2017-03-04 10:08:03 · 906 阅读 · 0 评论 -
选择排序
/*选择排序*///就是在一个数组中所有数中,选择一个最小的和前面的那个数交换。#includevoid SelectSort(int k[], int n){ int i, j, temp, min; for(i =0 ; i<n-1;i++) { min = i; for(j = i+1; j<n; j++) { if(k[j]<k[min]) {原创 2017-02-10 11:15:50 · 272 阅读 · 0 评论 -
双向链表的操作(插入和删除)
http://wenku.baidu.com/view/423ad3d126fff705cc170a1d.html转载 2017-03-08 16:28:18 · 674 阅读 · 0 评论 -
二路归并排序算法
将两个按值有序序列合并成一个按值有序序列,则称之为二路归并排序,下面有自底向上和自顶向下的两种排序算法,自顶向下的排序在本文末讲述,使用递归实现,代码较简洁,经供参考。1. 归并子算法:把位置相邻的两个按值有序序列合并成一个按值有序序列。例如把序列 X[s..u] = {3, 12, 23, 32}和 序列 X[u+1..v] = {2, 5, 8, 99} 合并成序列 Z[s..转载 2017-03-05 22:13:00 · 1683 阅读 · 0 评论 -
AOE网
AOE网:在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,边上的权值表示活动的持续时间,称这样的有向图叫做边表示活动的网,简称AOE网。AOE网中没有入边的顶点称为始点(或源点),没有出边的顶点称为终点(或汇点)。AOE网的性质:⑴ 只有在某顶点所代表的事件发生后,从该顶点出发的各活动才能开始;⑵ 只有在进入某顶点的各活动都结束,该顶点所代表的事件才能发生。转载 2017-03-09 21:43:59 · 1745 阅读 · 0 评论 -
Prim算法(最小生成树) 我TM只能先做到这儿了 后面继续补充
//邻接矩阵的广度遍历算法void MiniSpanTree_Prim(MGraph G){ int min, i, j, k; int adjvex[MAXVEX]; // 保存相关顶点下标[0,0,1,0,0,0,1,0,1] 这个值表示什么呢?表示0和0之间的连线,1:表示2和1之间有联系,接下来1代表顶点元素6和1之间有联系。 1:8和1有联系;因为是从1出发的顶点看看各点和1的原创 2017-02-22 21:45:57 · 633 阅读 · 0 评论 -
后缀表达式的求值的算法
1 后缀表达式的求值将中缀表达式转换成等价的后缀表达式后,求值时,不需要再考虑运算符的优先级,只需从左到右扫描一遍后缀表达式即可。具体求值步骤为:从左到右扫描后缀表 达式,遇到运算符就把表达式中该运算符前面两个操作数取出并运算,然后把结果带回后缀表达式;继续扫描直到后缀表达式最后一个表达式。 例如,后缀表达式(abc*+def*/-) 的求值2 后缀表达式的求值的算法设置一个栈,开转载 2017-02-27 20:54:51 · 5050 阅读 · 0 评论 -
C++中的容器类详解
C++中的容器类包括“顺序存储结构”和“关联存储结构”,前者包括vector,list,deque等;后者包括set,map,multiset,multimap等。若需要存储的元素数在编译器间就可以确定,可以使用数组来存储,否则,就需要用到容器类了。1、vector 连续存储结构,每个元素在内存上是连续的; 支持高效的随机访问和在尾端插入/删除操作,但其他位置的转载 2017-04-24 11:11:12 · 497 阅读 · 0 评论 -
STL中set用法详解
set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交转载 2017-04-24 12:56:28 · 641 阅读 · 0 评论 -
堆排序
#include/*非递增排序*/void swap(int k[], int i, int j){ int temp; temp = k[i]; k[i] = k[j]; k[j] = temp;}void Heapadjust(int k[], int s, int n){ int i, temp; temp = k[s]; //临时变量存放当前需要调整的双亲结点。原创 2017-02-12 22:03:56 · 2810 阅读 · 0 评论 -
冒泡排序
/*冒泡排序*/#includevoid BubbleSort(int k[], int n){ int i,j,temp; for(i=0;i<n-1;i++) //外层循环一次拿到外层循环的每一个元素。 { for(j=i+1;j<n;j++) //然后再和内存循环所有元素相比。 { if(k[i] > k[j]) //重的就往下沉。 { temp =原创 2017-02-09 21:27:44 · 450 阅读 · 0 评论 -
链队列的建立、判空、入队、出队、求长、访头、清空和销毁
队列是从屁股进去 从头出来!一:是不是Q.front只是记录队列的头结点的地址,里面没有data,Q.rear的是记录队列的末节点地址,里面有data? 二: Qnode *p; p=(QNode*)malloc(sizeof(QNode)); if(p==NULL) exit(OVERFLOW); p->next=NULL p->data=e; Q.rear->next=p;转载 2016-12-06 11:08:26 · 1926 阅读 · 0 评论 -
二叉树建立,前序遍历,中序遍历,后序遍历 思路
#include#includetypedef char ElemType;typedef struct BiTNode{ char data; struct BitNode *lchild, *rchild;}BiTnode,*BiTree;//创建一颗二叉树,约定用户用前序遍历的方式输入数据CreateBiTree(BiTree *T){ char c; scan原创 2017-02-18 21:44:49 · 495 阅读 · 0 评论 -
堆
堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值。根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆。 根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆。原创 2017-02-28 10:40:25 · 401 阅读 · 0 评论 -
二叉树前序、中序、后序遍历相互求法(code留着看,概念先看了)
今天来总结下二叉树前序、中序、后序遍历相互求法,即如果知道两个的遍历,如何求第三种遍历方法,比较笨的方法是画出来二叉树,然后根据各种遍历不同的特性来求,也可以编程求出,下面我们分别说明。首先,我们看看前序、中序、后序遍历的特性: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树转载 2017-02-28 20:53:08 · 376 阅读 · 0 评论 -
C语言折半查找
C语言二分查找(折半查找)算法及代码二分査找也称折半査找,其优点是查找速度快,缺点是要求所要査找的数据必须是有序序列。该算法的基本思想是将所要査找的序列的中间位置的数据与所要査找的元素进行比较,如果相等,则表示査找成功,否则将以该位置为基准将所要査找的序列分为左右两部分。接下来根据所要査找序列的升降序规律及中间元素与所查找元素的大小关系,来选择所要査找元素可能存在的那部分序列,对其采用同样的方转载 2017-02-08 22:59:57 · 546 阅读 · 0 评论 -
快速排序法!!
#includeusing namespace std;int AdjustArray(int s[], int L, int R){int i=L, j=R, x=s[i]; while(i{// from right to leftwhile(i=x){j--;}if (i{s[i]=s[j];i++; //i++意思是本坑已原创 2016-09-19 22:29:35 · 423 阅读 · 0 评论 -
插入排序
非递减排序:#includevoid Insertsort(int k[], int n){ int i,j, temp; for(i=1;i<n;i++) //为什么i=1而不是i=0呢? 因为我们需要锥指向它前一个元素。 //那么什么时候需要它排序呢? { if(k[i]<k[i-1]) { temp = k[i]; for(j = i-1; k[j]>te原创 2017-02-08 22:10:59 · 330 阅读 · 0 评论 -
归并排序
#include#define MAXSIZE 10/*非递增排序*//*归并是递归算法,刚开始拆成两部分,然后每部分再拆成两部分,递归到最后只有一个元素,没办法继续拆 */// 实现归并,并把最后的结果存在list1里。void merging(int *list1, int list1_size, int *list2, int list2_size){ int i,j, k,m原创 2017-02-12 23:12:05 · 294 阅读 · 0 评论 -
希尔排序
#include/**基于插入排序修改的希尔排序**/void InsertSort(int k[], int n){ int i, j, temp; int gap = n; //本来跨度是一,现在我们将跨度变成n; 初始化为n。 do { gap = gap/3 + 1; for(i = gap; i< n; i++) //将i=1修改为i=gap;原创 2017-02-09 21:05:24 · 362 阅读 · 0 评论 -
数据结构 最短路径之—迪杰斯特拉算法
#define MAXVEX 9#define INFINITY 65535typedef int PathMatrix[MAXVEX] //用于存储最短路径下标的数组typedef int ShortPathTable[MAXVEX] //用于存储到各点最短路径的权值和 比如V0到V2的权值是4 void ShortestPath_DIJ(MGraph G, int V0,原创 2017-02-23 20:16:34 · 1096 阅读 · 0 评论