数据结构
文章平均质量分 76
Shining-LY
这个作者很懒,什么都没留下…
展开
-
二叉树相关面试题
一、什么是二叉树在计算机科学中,二叉树是每个节点最多有两个子树的树结构,通常子树被称为左子树和右子树,左右子树又是一个二叉树,其次序不能任意颠倒。二、二叉树的相关操作1、二叉树结点的定义二叉树的存储结构一般采用二叉链表的方式,每一个结点都有一个数据域_data和指向左右子树的两个指针域,通过这两个指针域就可以建立二叉树中的上下层关系。下面就是二叉树结点的定义:templ...原创 2018-03-13 21:28:17 · 1192 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历
在前面那篇文章中,只写了关于连通图的广度优先遍历算法和深度优先遍历算法,没有考虑到非连通图的情况 :https://blog.csdn.net/qq_37964547/article/details/80100975 那么现在对之前的代码进行优化,我们可以先来理一下思路:1、图的广度优先遍历算法所谓广度,就是一层一层的,向下遍历,层层堵截,BFS(){ 输入起始点;...原创 2018-05-07 20:44:07 · 849 阅读 · 0 评论 -
最小生成树的Kruskal算法
给定一个无向图,如果它任意两个顶点都联通并且是一棵树,那么我们就称之为生成树(Spanning Tree),如果是带权值的无向图,所有权值之和最小的树就称之为最小生成树。1、最小生成树的基本准则若连通图由n个顶点组成,则其生成树必含n个顶点和n-1条边。因此构造最小生成树的准则有三条: 1. 只能使用图中的边来构造最小生成树 2. 只能使用恰好n-1条边来连接图中的n个顶点 3....原创 2018-05-12 22:42:02 · 714 阅读 · 0 评论 -
数据结构【图】
一、图的基本概念1、图的定义图是由顶点集合及顶点间的关系组成的一组数据结构,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。 我们称之为顶点(Vertex),顶点集合有穷非空。在图中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的。2、图的分类图按照边的有无方向分为无向图和有向图。无向图由顶点和边组成,有向图由顶...原创 2018-04-26 22:27:36 · 512 阅读 · 1 评论 -
栈的实现及其应用
一、栈1、什么是栈栈(Stack)是一种线性存储结构,它具有如下特点: (1)栈中的数据元素遵守”先进后出”(First In Last Out)的原则,简称FILO结构。 (2)限定只能在栈顶进行插入和删除操作。2、栈的基本操作栈主要有以下几种基本操作: (1)push(): 向栈内压入一个成员; (2)pop(): 从栈顶弹出一个成员; (3)empty(): 如果栈...原创 2018-05-03 21:05:25 · 17842 阅读 · 4 评论 -
堆的简单操作实现
1、堆的基本概念关键码的集合按完全二叉树的顺序存储方式存储在一维数组中,并满足:对于所有节点它的父节点关键码都大于子节点(或都小于它的子节点),这样的堆称为最大堆(或最小堆)。2、堆的特性(1)父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。(2)每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。(3) 当父结点的键值总是大于或等于任何一个子节点的键值...原创 2018-05-03 22:00:36 · 483 阅读 · 0 评论 -
数据结构【并查集】解决朋友圈问题
首先我们先来看一个栗子: 朋友圈问题: 1、已知,有n个人和m对好友关系(存于一个集合r中) 2、如果两个人是直接的或者间接的好友(好友的好友的好友。。。),那么他们属于一个集合,就是一个朋友圈里的。 3、写出程序,求这n个人中一共有多少个朋友圈。 例如: n=5,m=3; r={{1,2},{2,3},{4,5}}; 因为集合{1,2}和集合{2,3}中有共同的朋友2,所以1,2...原创 2018-04-24 22:03:04 · 1471 阅读 · 0 评论 -
交换排序--冒泡排序&快排
利用交换元素的位置进行排序的方法称作交换排序。常用的交换排序的方法有冒泡排序和快速排序。快速排序是一种分区交换排序方法。一、冒泡排序它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 算法步骤: 冒泡排序算法的运作如下:(从后往前) (1)比较相邻的元素。如果第一个比第二个大...原创 2018-04-03 08:19:11 · 210 阅读 · 0 评论 -
排序算法---选择排序&归并排序
一、选择排序基本思想:每一趟(第i趟,i=0,1,…,n-2)在后面n-i个待排序的数据元素集合中选出关键码最小的数据元素,作为有序元素序列的第i个元素。待到第n-2趟做完,待排序元素集合中只剩下1个元素,排序结束。1、直接选择排序算法步骤: 1、在元素集合array[i]–array[n-1]中选择关键码最小的数据元素; 2、若它不是这组元素中的第一个元素,则将它与这组元素中的第...原创 2018-04-02 22:46:02 · 519 阅读 · 0 评论 -
排序算法---插入排序&希尔排序
一、直接插入排序直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。 在讲解直接插入排序之前,先让我们脑补一下我们打牌的过程。先拿一张5在手里, 摸到一张4,比5小,插到5前面, 摸到一张6,比5大,插到5后面, 摸到一张8,比6大,插到6后面, 这就是一个关于直接...原创 2018-04-02 21:29:56 · 184 阅读 · 0 评论 -
布隆过滤器的简单实现
一、布隆过滤器1、基本概念它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。2、基本思想如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路. 但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢。不过世界上还有一种叫作散列表(又叫...原创 2018-04-09 21:46:32 · 382 阅读 · 0 评论 -
【位图】的实现和应用
一、位图所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。 在这里我们可以借助vector作为位图底层实现载体,具体实现方式如下:#pragma once#include<vector>#include<iostream>using namespace std;class Bit...原创 2018-04-08 23:01:17 · 407 阅读 · 0 评论 -
二叉搜索树
一、二叉搜索树的概念二叉搜索树,又称二叉排序树、二叉查找树,它或者是一棵空树;或者是具有下列性质的二叉树:若左子树不空,则左子树上所有结点的值均小于它的根结点的值;若右子树不空,则右子树上所有结点的值均大于它的根结点的值;左、右子树也分别为二叉排序树。如下图所示就是一个二叉搜索树的示例结构 二、二叉搜索树的简单操作1、二叉搜索树的节点结构struct BSTNode...原创 2018-03-08 18:29:21 · 147 阅读 · 0 评论 -
C++实现AVL树
一、AVL树概念在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。二、导致AVL树不平衡的几种情况(1)LL:插入一个新节点到根节点的左子树(Left)的左子树(Left),导致根节点的平衡因...原创 2018-03-13 16:45:19 · 279 阅读 · 0 评论 -
STL 一级空间配置器
一、STL介绍STL(Standard Template Library,标准模板库),从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。 首先呢,让我们一起来理解一下STL的六大组件:1、STL六大组件简单介绍(1)容器(Container):作为STL的最主要组成部分--容器,分为序列式容器和关联式...原创 2018-05-27 23:36:58 · 825 阅读 · 0 评论