
数据结构
sdoyuxuan
高产似母猪 一月20篇~ ~
展开
-
顺序表实现之C语言(附加各种顺序表排序问题)
seqlist.h:#include <stdio.h>#include <assert.h>#ifndef _SEQLIST_H#define _SEQLIST_H#define MAX 10typedef int Datatype;typedef struct { Datatype array[MAX]; Datatype size;}seqlist;void原创 2017-11-02 14:05:53 · 1394 阅读 · 0 评论 -
Trie 树实现与应用 与 Double Array Trie 进阶
Trie树基本概念 Trie树又称字典树,它是用来查询字符串的一种数据结构。一般它每一个节点都有26个子节点,所以是26叉树。优点查询字符串的时候速度快,缺点浪费大量空间。但是也可以实现255个子节点对应ASCII码0~255,具体看需求吧。 当一个字符串长为M的时候,假设数据结构中已经有了N个字符串了。对于平衡树而言,查找一个字符串 O(log^n)。对于字典树来说就O(M)。...原创 2018-01-24 20:52:02 · 1008 阅读 · 0 评论 -
B-树
B树 它是多叉平衡树。 我们知道二叉搜索树、平衡二叉树、红黑树都是动态查找树,典型的二叉搜索树结构,查找的时间复杂度和树的高度相关为O(log2N)。 当我们查找时数据时一般可分为如下三情况: 数据无序 -----> 线性搜索 O(n) 有数数据 -----> 二分查找原创 2017-06-05 15:00:35 · 407 阅读 · 0 评论 -
常见排序之逻辑风暴与视觉冲击
排序的分类插入排序 在一组数据中,把无序数据一个一个插入到有序序列中(刚开始的时候默认无序数列中第一个元素为有序数列),并每次插入时通过把元素不断前后搬移使之排成有序序列。不断插入无序数列的数据到有序数列,最终无序序列成为有序序列。希尔排序 希尔排序是在插入排序中进行了改进,每次排序时都定义了个gap(它为分组中元素的偏移量)。每次进行排序时,将无序数列分为多个分组,将原创 2017-07-02 22:50:46 · 778 阅读 · 0 评论 -
图的实现(带有深度/广度优先遍历/最小生成树算法)
#pragma once#include<string>#include<iostream>#include<vector>#include<unordered_map>#include<queue>#include"Union.h"using namespace std;struct Edge{ Edge( size_t src, size_t dst,int weigh原创 2017-11-27 15:08:54 · 1102 阅读 · 0 评论 -
unordered_set/map 实现
闭散列#include&amp;lt;iostream&amp;gt;#include&amp;lt;vector&amp;gt;using namespace std;enum State{ EMPTY = 1, EXITS = 2, DELETE = 3,};const int _PrimeSize = 28;static const unsigned int _PrimeList[原创 2017-11-03 21:29:19 · 820 阅读 · 0 评论 -
链表面试题 解法总结
从尾打印链表1 用递归的方法,如果当前节点不为空,继续调打印函数传过去的参数下一个节点。If(PNode){ Print_list(PNode->PNext); Printf(“%d->”,PNode->data);}2 删除一个非头节点的非尾节点(不能遍历链表) 用代替法,把当前节点的下一个节点的值赋值给当前节点,在delete掉当前节点的下一个节点原创 2017-04-04 15:10:33 · 1411 阅读 · 0 评论 -
并查集
并查集用于集合合并的一种数据结构原理 它的原理是最开始的时候把所有集合的元素都初始化为-1。所有元素中值为负的元素,都代表一个小集合的根元素。合并的时候,如果要将俩个子元素合并,则要把俩个子元素的所在集合合并,则先找到这俩个元素的根,然后把它们所代表的元素值累加到另一个当中,然后更新另一个的下标为被累加元素的下标,从此之后俩个元素的所在的俩个集合得到了合并。 这样合并后,之前另一个根的子元素原创 2017-11-23 16:08:44 · 200 阅读 · 0 评论 -
堆
堆建堆用向下调整法,调整堆也要用向下调整法,但是插入用向上调整法。#ifndef HEAP_H#define HEAP_Htemplate<class T>struct Less{ bool operator()(const T & left , const T & right) { return left < right; }};template<c原创 2017-11-15 22:24:53 · 225 阅读 · 0 评论 -
堆之C++实现
#ifndef HEAP_H#define HEAP_Htemplate<class T>struct Less{ bool operator()(const T & left , const T & right) { return left < right; }};template<class T>struct Greater { boo原创 2017-10-22 19:23:50 · 182 阅读 · 0 评论 -
海量数据处理
题目1给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址 。解法 思路就是先哈希切割哈子,可以先用字符串哈希函数,对每一个 Ip 地址 进行切割,因为是100G , 那么我们就切割成1000份吧,每个文件就100MB 。 当第一步完成哈希切割后,不同的ip地址落到了不同的文件中,然后我们进行对单个文件的读取计数,用一个map去统计。map<原创 2017-11-19 20:30:06 · 251 阅读 · 0 评论 -
vector/List 实现 (顺序表与双向循环链表实现)
实现#include&lt;iostream&gt;#include&lt;string&gt;#include&lt;assert.h&gt;#include &lt;cstring&gt;using namespace std;struct TrueType{};struct FalseType{};template &lt;原创 2017-11-19 17:45:55 · 427 阅读 · 0 评论 -
布隆过滤器与位图
代码第一个是位图,第二个是布隆过滤器,第三个 Twobitmap,是能表示4个状态的位图,因为普通位图一个位只能表示一个状态。ifndef _BITMAP_H#define _BITMAP_H#include<vector>#include<iostream>#include<assert.h>using namespace std;class bitmap{public:原创 2017-11-12 20:24:57 · 258 阅读 · 0 评论 -
红黑树
红黑树概念它是一个平衡树,查找效率为O(log2n),中序遍历时为有序序列。我只实现了unique_insert,对于equal_insert,stl是把键值相同的节点当做到该节点的右孩子。所以遍历muti_map时遍历一个键值对应的多个时值的时候,应该先find找到第一个K的位置,在调用count函数找到该K有多少个键值相同的节点。从第一个find返回第一个key位置的迭代器,然后每遍历一个节点,原创 2017-09-02 10:33:03 · 306 阅读 · 0 评论 -
AVL树
以下图的平衡因子统一为左子树高度减去右子树高度。附上:单个节点声明的代码struct AVLTreeNode{ AVLTreeNode(const K& key, const V& value) : _pLeft(NULL) , _pRight(NULL) , _pParent(NULL) , _key(key) , _value(value)原创 2017-10-21 23:30:29 · 243 阅读 · 0 评论 -
跳表 SkipList 实现
skiplist最近发现很多kv都使用到了skiplist,所以自己也就实现一个skipList.它的优点平衡时变动小,不像红黑树可能插入一个新节点可能影响从它开始上溯到的所有节点。比如现在插入一个子节点,局部影响的就是父亲节点、叔叔节点、爷爷节点,此时可能发生旋转但是局部的平衡后,可能爷爷节点的颜色会改变,导致爷爷的局部不平衡,所以可能引起上溯的所有节点可能都需要发生相应的变化,所以并发...原创 2018-11-23 14:52:29 · 316 阅读 · 0 评论