数据结构
文章平均质量分 70
ZWE7616175
这个作者很懒,什么都没留下…
展开
-
二叉树
一、二叉树的概念二叉树:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上左右两棵子树的二叉树组成的。二叉树的特点:1.每个结点最多有两棵子树(即二叉树不存在度大于2的结点,度为0、1、2);2.二叉树的子树有左右之分,其子树的次序不能颠倒。二叉树是通过上述几个情况的组合或嵌套形成的。满二叉树:在一棵二叉树中,如果所有的分支结点都存在左右子树,并且所...原创 2017-12-02 14:49:45 · 334 阅读 · 0 评论 -
模拟实现容器适配器栈和队列
stack.h #pragma once#include "Vector.h"#include <iostream>using namespace std;#if 0//方法一template<class T>class stack{public: stack() :_pData(new T[3]) , size(0) , capa...原创 2017-10-30 21:06:06 · 334 阅读 · 0 评论 -
模拟实现容器List(迭代器)
#include <iostream>using namespace std;template<class T>struct ListNode{ ListNode(const T& data = T()) : _pPre(0) , _pNext(0) , _data(data) {} ListNode* _pPre; ListNode* ...原创 2017-10-28 23:41:11 · 290 阅读 · 0 评论 -
用模板实现顺序表Vector
#pragma once#include <iostream>using namespace std;#include <assert.h>template <class T>class Vector{public: /*typedef T* Iterator;*/ Vector()//构造函数 :_start(0) , _fi...原创 2017-10-23 22:02:23 · 330 阅读 · 0 评论 -
AVL树的旋转剖析、插入实现、以及判断是不是一棵平衡树或二叉搜索树
AVL树(平衡树)是绝对平衡的。1.概念:左右子树的高度之差的绝对值不超过1。 一棵AVL树可以为空树,或者具有以下性质的树: (1)左右子树都为AVL树。 (2)左右子树的高度之差的绝对值不超过1。 2.旋转 旋转 场景 左单旋 较高右子树的右侧 右单旋 较高左子树的左侧 先右旋后左旋 插入结点在较高左子树的右侧...原创 2018-05-26 16:30:24 · 495 阅读 · 0 评论 -
图的广度优先遍历&深度优先遍历
图的广度优先遍历广度优先搜索(Breadth_First Search) 遍历类似于树的按层次遍历的过程。假设从图中某顶点v 出发,在访问了v 之后依次访问v 的各个未曾访问过和邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾...原创 2018-05-05 20:47:00 · 2322 阅读 · 0 评论 -
图的基本概念及实现
线性表中的元素是“一对一”的关系,树中的元素是“一对多”的关系,而图释“多对多”的关系。图是一种复杂的非线性的结构,图中的每个元素可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系式任意的。一、图的概念定义:图其实是由顶点集合和顶点间的关系组成的一种数据结构。通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。图的分类 图可...原创 2018-05-05 18:45:55 · 251 阅读 · 0 评论 -
图的最小生成树(Kruskal算法&Prim算法)
最小生成树在生活中,我们可能会遇到如下的情景。在某个地方分布着N个村庄,现在需要在N个村庄之间修路,每个村庄之间的距离不同,问怎么修最短的路,将各个村庄连接起来。这个问题可以归纳为最小生成树问题,用正则表达式的表述方式描述为:给定一个无向的带权图G=(V,E),最小生成树的集合为T,T是最小代价连接V中所有顶点所用变E的最小集合,集合T中的边能够形成一棵树,这是因为每个结点(除根节点外)都能向...原创 2018-05-11 21:00:42 · 596 阅读 · 0 评论 -
并查集(小米16年笔试题朋友圈问题)
我们先来看一道16年小米校招笔试题假如已知n个好友和m对好友关系(存于数字r),如果两个人是直接或间接的好友(好友的好友的好友…),则认为他们属于同一个朋友圈,请写程序求出这n个人里面一共有多少个朋友圈。 假如:n=5,m=3,r={{1,2},{2,3},{4,5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个朋友圈,4、5属于另一个朋友圈,结果为2个朋友...原创 2018-04-26 12:49:32 · 982 阅读 · 0 评论 -
map和set原理和使用
《C++Primer》中列举了标准库的8个关联容器,这8个容器间的不同体现在三个维度上: 1.或者是一个set,或者是一个map; 2.或者要求不重复的关键字,或者允许重复关键字; 3.按顺序保存,或无序保存。允许重复关键字的容器的名字中都包含单词multi;不保持关键字按顺序存储的容器的名字都以unordered开头。类型map和multimap定义在头文件map中;set和multi...原创 2018-04-26 10:32:11 · 1343 阅读 · 0 评论 -
哈希常见面试题剖析
问题实例(海量数据处理) hash 表在海量数据处理中有着广泛的应用,我们来看一道百度面试题:题目:海量日志数据,提取出某日访问百度次数最多的那个IP。 方案:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。方法介绍 对于海量数据而言,由于无法一次性装进内存处理,导致我们不得不把海量的数据通过hash映射分割成相应的小块数据,然后再针...原创 2018-03-30 12:53:38 · 893 阅读 · 0 评论 -
Top K算法详解
问题描述百度面试题:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。必备知识:什么是哈希表?哈希表(H...转载 2018-03-30 10:44:32 · 274 阅读 · 0 评论 -
经典排序算法分析及实现
一、排序概念1. 排序:将一组杂乱无章的数据按照一定的规律组织起来,就称为排序。2. 数据表:待排序的数据元素的有限集合。3. 排序码:通常数据元素有多个属性域,其中有一个属性域可以用来区分元素,作为排序依据,该域即为排序码。* 若在数据表中各个元素的排序码各不相同,这种排序码称为主排序码。* 按照主排序码进行排序,排序的结果是唯一的。* 按照次排序码进行排序,排序结果不唯一。...原创 2018-03-05 20:58:55 · 2390 阅读 · 3 评论 -
深入理解二叉搜索树
二叉搜索树 二叉搜索树是一以二叉树来组织的,可以用链表的数据结构来表示,每一个结点就是一个对象,包括以下的结构:BSTNode<K, V>* _pLeft;BSTNode<K, V>* _pRight;BSTNode<K, V>* _parent;K _key;V _value;二叉搜索树或者是一棵空树,或者是具有以下性质的二叉树: 1、若它...原创 2018-03-17 17:19:20 · 299 阅读 · 0 评论 -
大堆和小堆的实现
堆的概念如果有一个关键码的集合,将这个集合中的所有元素按照完全二叉树的顺序存储在一个一维数组中,并满足最小堆或最大堆的性质。最小堆:任一结点的关键码均小于等于它的左右孩子的关键码,其中堆顶的元素最小。(任一路径中的元素降序排列)最大堆:任一结点的关键码均大于等于它的左右孩子的关键码,其中堆顶的元素最大。(任一路径中的元素升序排列)一、堆的创建(以最小堆为例)堆的创建按照完全二叉原创 2018-01-22 14:59:01 · 498 阅读 · 0 评论 -
[栈的应用]动态顺序栈的实现、逆波兰表达式
动态顺序栈的实现#define N 5#define M 2template class Stack{public: Stack() :_array(new T[N]) , _capacity(N) , _size(0) {} void Push(const T& data) { CheckCapacity(); _array[_size++] = dat原创 2017-11-25 15:08:58 · 414 阅读 · 0 评论 -
矩阵
对称矩阵稀疏矩阵原创 2017-12-02 15:01:04 · 273 阅读 · 0 评论 -
为什么数据库索引使用B+树实现
数据库索引通常使用B树及其变种B+树。数据库索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。为了弄清楚数据库索引为B+树的原因,我们先来介绍B+树几个“近亲”。1.二叉树二叉树是每个结点只能有两个子树的树结构。特点:* 每个结点最多有两棵子树;* 二叉树有左右子树之分。二叉树逻辑上分为5种形态:空树、一个结点、只有左子树、只有右子树...原创 2018-08-25 09:55:19 · 1368 阅读 · 0 评论