![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
不务正业的土豆
知行合一 止于行善
展开
-
数据结构-并查集
1、 概述并查集(Disjoint set或者Union-find set)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。2、 基本操作并查集是一种非常简单的数据结构,它主要涉及两个基本操作,分别为:A. 合并两个不相交集合B. 判断两个元素是否属于同一个集合(1) 合并两个不相交集合(Union(x,y))合并操作很简单:先设置一个数原创 2017-03-22 10:09:50 · 363 阅读 · 0 评论 -
数据结构-线段树详解(含java源代码)
1 线段树的定义 首先,线段树是一棵二叉树。它的特点是:每个结点表示的是一个线段,或者说是一个区间。事实上,一棵线段树的根结点表示的是“整体”区间,而它的左右子树也是一棵线段树,分别表示区间的左半边和右半边。树中的每个结点表示一个区间[a,b]。每一个叶子结点表示一个单位区间。对于每一个非叶结点所表示的结点[a,b],其左孩子表示的区间为[a,(a+b)/2],右孩子表示的区间为[(a原创 2017-09-05 23:18:28 · 9743 阅读 · 1 评论 -
数据结构-AVL二叉平衡树
1.AVLTreeNode.h#ifndef DATASTRUCTURE_AVLTREENODE_H#define DATASTRUCTURE_AVLTREENODE_Htemplate<class T>class AVLTreeNode {public: AVLTreeNode(T value, AVLTreeNode<T> *l, AVLTreeNode<T> *r)原创 2017-07-12 13:31:24 · 478 阅读 · 0 评论 -
二叉排序树(二叉查找树)
1.相关概念 节点的度:一个节点拥有子树的数目。 树的高度:也称为树的深度,树中节点的最大层次。 二叉树或者为空集,或者由一个根节点和两棵互不相交的、分别称为左子树和右子树的二叉树组成。从定义可以看出一棵二叉树: 二叉树是有序树,区分左子树与右子树,不可以随意交换子树位置。 二叉树共有5种形态 所有节点都只有左子树的二叉树叫做左斜树,所有节点都只有右子树的二叉树叫做右斜树。左斜树和右子树原创 2017-05-31 01:21:48 · 966 阅读 · 0 评论 -
双向循环链表-DoubleList
注意:循环链表含有头结点#include <iostream> using namespace std; template<class Type> struct Node { Type data; Node<Type> *next; }; template<class Type> class Circlist { protected:原创 2017-05-05 19:22:24 · 1475 阅读 · 0 评论 -
带头结点与不带头结点的单链表-LinkList
1.辅助文件包Assistance.h#ifndef __ASSISTANCE_H__ // 如果没有定义__ASSISTANCE_H__#define __ASSISTANCE_H__ // 那么定义__ASSISTANCE_H__// 辅助软件包// ANSI C++标准库头文件#include <cstring>原创 2017-05-04 21:10:05 · 6296 阅读 · 0 评论 -
单循环链表-Circlist
#include <iostream>using namespace std;template<class Type>struct Node{ Type data; Node<Type> *next;};template<class Type>class Circlist{protected: int len;//链表中结点个数 Node<Type>*原创 2017-05-05 15:03:38 · 952 阅读 · 0 评论 -
向量-Vector
Vector.h#ifndef ALGOTEST_VECTOR_H#define ALGOTEST_VECTOR_Htypedef int Rank;//秩,为类型起别名#define DEFAULT_CAPACITY 3 //默认的初始容量(实际应用中可设置为更大)template <class T>class Vector {//向量模板类protected: //规模、容量、原创 2017-05-04 15:58:23 · 516 阅读 · 0 评论 -
线段树
线段树是一棵完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),由于二叉结构的特性,它基本能保持每个操作的复杂度为O(lgN),从而大大减少耗时。树中的每一个结点表示了一个区间[a,b]。a,b通常是整数。每一个叶子节点表示了一个单位区间。对于每一个非叶结点所表示的结点[a,b],其左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2,b](除法去尾取整),线段树需要原创 2017-03-26 10:37:35 · 392 阅读 · 0 评论 -
数据结构-最小生成树-Prim算法
MST(Minimum Spanning Tree,最小生成树)问题有两种通用的解法,Prim算法就是其中之一,它是从点的方面考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;以此类推,现在的集合V={a,b},再从集合U-V中找到另一点c使得点c到V中任意原创 2017-03-23 10:28:01 · 2226 阅读 · 1 评论 -
树状数组详解(含排兵布阵例子)
1 树状数组简介 树状数组,其实就是物理上存储是连续的,以数组的形式存储,逻辑上可以得到树形的父子关系。对于两个数组下标x,y(x < y),如果y=x + 2^k (k等于x的二进制表示中末尾0的个数),那么定义(y, x)为一组树上的父子关系,其中y为父结点,x为子结点。 如上图所示,其中A为普通数组,C为树状数组(C在物理空间上和A一样都是连续存储的,其实真正的数组A我们是不需要的原创 2017-09-06 16:27:32 · 1387 阅读 · 0 评论