
数据结构
文章平均质量分 70
LiQiyaoo
技术改变生活。
展开
-
二叉树中序遍历,非递归,用栈
这个是用非递归形式即栈的形式中序遍历二叉树#include#include#include#includeusing namespace std;typedef struct BiTreeNode{ int data; struct BiTreeNode *lchild; struct BiTreeNode *rchild;}*Bitree,BiTreeNode;stack原创 2016-01-14 22:14:39 · 1013 阅读 · 0 评论 -
二叉树翻转的递归与非递归实现(Java)
二叉树的翻转,即以根所在垂直线为对称线,对称位置的两个节点进行交换。实现这种算法,可以有两种思路,即递归和非递归(栈)。下面给出Java代码实现。import java.util.Stack;/** * Created by Lee on 2017/11/11. *///树节点class Node { int value; Node left; Node原创 2017-11-11 22:19:48 · 1409 阅读 · 0 评论 -
堆排序、快速排序(递归与非递归)、归并排序效率比较
堆排序、快速排序(递归与非递归)、归并排序效率比较为了比较这四种排序的效率,程序中将四种排序算法封装成函数,并且随机生成10000000个随机数,用GetTickCount()函数获取精确到毫秒级的系统时间,通过这个方法,来比较效率。要注意的是递归方式的快速排序因为调用函数太多,所以效率很低,然后本人采用了STL库中的栈来非递归实现,结果效率更低,最后自己手写一个简易栈,效率就变得很高了。原创 2016-12-26 19:33:36 · 2508 阅读 · 0 评论 -
希尔排序(C语言实现)
#includevoid ShellInsert(int L[], int dk, int length)//插入函数 { int i, j; for(i = dk + 1; i <= length; i++) { if(L[i] < L[i - dk]) { L[0] = L[i]; for(j = i - dk; j > 0 && L[0] < L[j]; j -原创 2016-12-17 17:29:18 · 2034 阅读 · 1 评论 -
二叉堆C语言实现
二叉堆C语言实现二叉堆是一种二叉树,其儿子的值一定不小于父亲的值,树的节点是按从上到下,从左到右紧凑排列的。 有两种操作:push(x):将x插入二叉堆,并自动维护使二叉堆变得有序。pop():取出顶部的值(最小值),并返回该值,同时维护二叉堆有序。代码如下:#include#define MAX_N 1000int heap[MAX_N];int sz =原创 2016-07-20 18:36:54 · 1930 阅读 · 0 评论 -
c语言实现最小生成树的普里姆算法(《数据结构》算法7.9)
无向网的最小生成树的普里姆算法是对点进行操作,先把图中的所有点分成两个集合,U(已经加入最小生成树的点),V-U(还未加入最小生成树的点)。先再U中加入一个最小生成树的起点u,然后用一个辅助数组closedge[i]记录从U到V-U中每个点的最小权值。注意:每次新加入一个点到U时,要重新对辅助数组进行赋值。算法的时间复杂度与顶点数量有关,是O(n^2)。所以常对顶点数量少,边数量多的稠密图使用。原创 2016-02-23 16:14:06 · 2415 阅读 · 0 评论 -
【经典算法】——KMP,深入讲解next数组的求解
本文转自:http://www.cnblogs.com/c-cloud/p/3224788.html前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k;但是问题在于如何求出这个最大前后缀长度呢?我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破,后来翻看算法导论,32章 字符串匹配虽然讲到了对前后缀计算的正确性,但是大量的推理证明不转载 2016-03-24 10:39:38 · 561 阅读 · 0 评论 -
c语言实现十字链表储存有向图(《数据结构》算法7.3)
用c语言实现《数据结构》算法7.3的十字链表储存有向图。代码如下:#include#define MAX_VERTEX_NUM 20#includetypedef struct ArcBox{//弧的结构体变量 int tailvex,headvex;//弧尾和弧头的位置,跟输入顺序有关 struct ArcBox *hlink,*tlink;//分别指向弧头和该弧相同,弧尾和该原创 2016-02-20 14:53:25 · 1378 阅读 · 0 评论 -
c语言实现拓扑排序(《数据结构》算法7.12)
邻接表+拓扑排序,输出的是无向图的拓扑有序序列。代码如下:#include#include#include#define MAX_VERTEX_NUM 100using namespace std;int indegree[MAX_VERTEX_NUM];stacks;typedef struct ArcNode{ int adjvex;//该边的另一个顶点的位置 stru原创 2016-03-05 14:06:09 · 3307 阅读 · 2 评论 -
图的邻接矩阵c语言表示(无向网)---《数据结构》算法7.2
邻接矩阵是图的一种表示法,构造具有n个顶点和e条边的无向网G的时间复杂度为(n^2+e*n),代码如下:#include#define infinity 2000000000#define MAX_VERTEX_NUM 100typedef enum{DG,DN,UDG,UDN} GraphKind;typedef struct { int vexs[MAX_VERTEX_NUM];原创 2016-02-18 13:33:58 · 7968 阅读 · 0 评论 -
c语言实现求最短路径(迪杰斯特拉算法,《数据结构》算法7.15)
迪杰斯特拉算法从小到大的求出了从源点到其余各个点的最短路径,用到了邻接矩阵的储存结构。代码如下:#include#define MAX_VERTEX_NUM 100#define INFINITY 2000000000typedef struct { int vexs[MAX_VERTEX_NUM]; int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];原创 2016-03-03 21:13:48 · 9611 阅读 · 0 评论 -
c语言实现赫夫曼树的构建以及生成赫夫曼编码(《数据结构》算法6.12)
这个程序是根据《数据结构》算法6.12用c语言实现的程序,赫夫曼树就不多说了,直接看代码,代码上都有注释。下面代码:#include#include#include#include#include#define MAX_NUM 100#define inf 2000000000using namespace std;typedef struct { unsigned in原创 2016-02-16 15:21:31 · 6856 阅读 · 6 评论 -
c语言实现无向图的邻接表储存
图有一种邻接表储存结构,这里以无向图为例,输入图的参数,构造并输出图的邻接表。#include#include#define MAX_VERTEX_NUM 100typedef struct ArcNode{ int adjvex;//该边的另一个顶点的位置 struct ArcNode *nextarc; //指向下一条边 }ArcNode;typedef struct VN原创 2016-03-02 21:46:51 · 19755 阅读 · 4 评论 -
二叉树的构建,线索化,以及线索二叉树的遍历c++语言表示(《数据结构》算法6.5,6.6,6.7)
下面是用c++代码实现的课本算法。有详细注释。#include #include #include using namespace std; typedef enum PointerTag{Link,Thread};//枚举指针和线索 typedef struct BiThrNode{ int data; struct BiThrNode *lchil原创 2016-02-15 12:52:16 · 759 阅读 · 0 评论 -
二叉树先序建立,先序遍历,中序遍历,后序遍历(递归)
这是递归方式的二叉树建立,以及各种遍历#include#include#includeusing namespace std;typedef struct BiTreeNode{int data;struct BiTreeNode *lchild;struct BiTreeNode *rchild;}*Bitree,BiTreeNode;void C原创 2016-01-14 13:42:08 · 1134 阅读 · 0 评论 -
通俗易懂的红黑树简析
一、基本概念 红黑树本质上是一棵近似平衡的二叉树,它的节点只有两种颜色即红与黑,它满足二叉搜索树的基本性质,即树上的任何节点的值大于其左子节点(若左子节点存在),任何节点的值大于其右子节点的值(若右子节点存在)。 近似平衡:深度最大的节点的深度 红黑树与平衡二叉树比较:因为红黑树只追求近似平衡,所以在插入与删除节点时,翻转次数远远少于平衡树,因此在需要较多插入删除操作的原创 2018-01-31 13:59:54 · 921 阅读 · 1 评论