数据结构与算法
With__Sunshine
这个作者很懒,什么都没留下…
展开
-
程序员小灰的漫画算法和知识总结,高品质强推
https://www.cnblogs.com/lcy0515/p/10807820.html转载 2019-12-10 16:43:34 · 224 阅读 · 0 评论 -
浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树。2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key。维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。与自平衡二叉查...转载 2019-12-10 11:16:05 · 105 阅读 · 0 评论 -
通俗易懂,漫画:B-树?B+树?
漫画:什么是B-树?https://mp.weixin.qq.com/s/rDCEFzoKHIjyHfI_bsz5Rw漫画:什么是B+树?https://mp.weixin.qq.com/s/jRZMMONW3QP43dsDKIV9VQ数据库索引B树、B+树、Hash索引https://www.iteye.com/blog/uule-2429508...转载 2019-12-10 10:52:51 · 353 阅读 · 0 评论 -
B树Java代码实现以及测试
B树Java代码实现以及测试转载 2019-12-03 17:54:23 · 273 阅读 · 0 评论 -
LeetCode——第92题:指定区间内翻转链表(反转链表 II)
题目:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。输入:1->2->3->4->5->NULL, m = 2, n = 4输出:1->4->3->2->5->NULL这道题的重点是:找到需要翻转的区间总共需要4个指针,其中1个是添加一个虚拟的头指针(主要是防止需要翻转的是头...转载 2019-11-20 10:02:28 · 163 阅读 · 0 评论 -
单链表反转
实现一public class Node{ public int value; public Node next;}//反转单链表 public static Node reverseList(Node head) { Node next = null;//指向当前节点的后继 Node pre = null;//指向当前节点的前驱 while (hea...转载 2019-11-19 15:57:10 · 99 阅读 · 0 评论 -
平衡二叉树-AVL树(LL、RR、LR、RL旋转)
平衡二叉树的定义: 任意的左右子树高度差的绝对值不超过1,将这样的二叉树称为平衡二叉树,二叉平衡树前提是一个二叉排序树。平衡二叉树的插入: 二叉平衡树在插入或删除一个结点时,先检查该操作是否导致了树的不平衡,若是,则在该路径上查找最小的不平衡树,调节其平衡。 4种平衡调整如下(结点的数字仅作标记作用): ①LL:右单旋转 ②RR:左单旋转 ③...转载 2019-11-18 17:32:07 · 1171 阅读 · 2 评论 -
单链表反转
struct node{ int data; struct node *next;}Node;void reverse(Node *node){ Node *head = NULL; Node *pre = NULL; Node *cur = node; while(cur != null){ Node *tmp = cur -> next; if(tmp == N...原创 2019-11-01 16:48:12 · 104 阅读 · 0 评论 -
一个人有10元钱,买啤酒2元钱一瓶,两个啤酒瓶换一瓶,四个啤酒盖换一瓶,请问此人一个喝了多少瓶?
可以喝到15瓶或者20瓶,因为有两种计算方式,所以有两种结果1、不许借的话,可以喝到15瓶:第一轮,买5瓶,(得到5空瓶,5盖)第二轮,可以换3瓶,(剩余4空瓶,4盖)第三轮,可以换3瓶,(剩余3空瓶,3盖)第四轮,可以换1瓶,(剩余2空瓶,4盖)第五轮,可以换2瓶,(剩余2空瓶,2盖)第六轮,可以换1瓶,(剩余1空瓶,3盖)这样共喝到5+3+3+1+2+1=15(瓶)2、允许借...原创 2019-11-01 15:32:42 · 3866 阅读 · 0 评论 -
森林、树与二叉树相互转换
1、森林转二叉树 (1)、把每棵树转换为二叉树 (2)、第一棵二叉树不动,从第二棵二叉树开始,一次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来。转换规则:兄弟相连,长兄为父,孩子靠左。 2、树转二叉树 (1)、加线。在所有的兄弟结点之间加一条线。 (2)、去线。树中的每个结点,只保留它与第一个孩子结点的连...转载 2019-10-24 14:13:26 · 180 阅读 · 0 评论 -
Union-Find-005-UnionFind
UnionFind1.h#ifndef UNIONFIND_UNIONFIND_H#define UNIONFIND_UNIONFIND_H#include <cassert>using namespace std;// Quick Findnamespace UF1{ class UnionFind{ private: int*...转载 2019-04-19 14:07:20 · 142 阅读 · 0 评论 -
Graph-004-DFS-and-Components
DenseGraph.h#ifndef INC_05_DFS_AND_COMPONENTS_DENSEGRAPH_H#define INC_05_DFS_AND_COMPONENTS_DENSEGRAPH_H#include <iostream>#include <vector>#include <cassert>using namespace ...转载 2019-04-24 10:30:25 · 149 阅读 · 0 评论 -
Union-Find-004-Optimize-by-Rank
UnionFind1.h#ifndef INC_05_OPTIMIZE_BY_RANK_UNIONFIND1_H#define INC_05_OPTIMIZE_BY_RANK_UNIONFIND1_H#include <iostream>#include <cassert>using namespace std;namespace UF1 { c...转载 2019-04-19 10:40:13 · 135 阅读 · 0 评论 -
Union-Find-003-Optimize-by-Size
UnionFind1.h#ifndef INC_04_OPTIMIZE_BY_SIZE_UNIONFIND1_H#define INC_04_OPTIMIZE_BY_SIZE_UNIONFIND1_H#include <iostream>#include <cassert>using namespace std;namespace UF1 { c...转载 2019-04-19 10:36:28 · 259 阅读 · 0 评论 -
Union-Find-001-Quick-Union
UnionFind1.h#ifndef INC_03_QUICK_UNION_UNIONFIND1_H#define INC_03_QUICK_UNION_UNIONFIND1_H#include <cassert>using namespace std;namespace UF1 { class UnionFind { private: ...转载 2019-04-19 10:32:39 · 103 阅读 · 0 评论 -
Union-Find-001-Quick-Find
UnionFindTestHelper.h#ifndef INC_02_QUICK_FIND_UNIONFINDTESTHELPER_H#define INC_02_QUICK_FIND_UNIONFINDTESTHELPER_H#include <iostream>#include <ctime>#include "UnionFind1.h"using n...转载 2019-04-19 10:29:50 · 241 阅读 · 0 评论 -
Graph-007-Graph
DenseGraph.h#ifndef GRAPH_DENSEGRAPH_H#define GRAPH_DENSEGRAPH_H#include <iostream>#include <vector>#include <cassert>using namespace std;// 稠密图 - 邻接矩阵class DenseGraph{p...转载 2019-04-24 10:57:58 · 143 阅读 · 0 评论 -
Binary-Search-010-Tree
BST.h#ifndef BINARY_SEARCH_TREE_BST_H#define BINARY_SEARCH_TREE_BST_H#include <iostream>#include <queue>#include <cassert>using namespace std;template<typename Key, typ...转载 2019-04-19 10:24:31 · 103 阅读 · 0 评论 -
Graph-001-Graph-Representation
DenseGraph.h#ifndef INC_02_GRAPH_REPRESENTATION_DENSEGRAPH_H#define INC_02_GRAPH_REPRESENTATION_DENSEGRAPH_H#include <iostream>#include <vector>#include <cassert>using namesp...转载 2019-04-19 14:48:05 · 249 阅读 · 0 评论 -
Graph-002-Vertex Adjacent Iterator
DenseGraph.h#ifndef INC_03_VERTEX_ADJACENT_ITERATOR_DENSEGRAPH_H#define INC_03_VERTEX_ADJACENT_ITERATOR_DENSEGRAPH_H#include <iostream>#include <vector>#include <cassert>usin...转载 2019-04-19 14:50:28 · 116 阅读 · 0 评论 -
Graph-003-Read-Graph
DenseGraph.h#ifndef INC_04_READ_GRAPH_DENSEGRAPH_H#define INC_04_READ_GRAPH_DENSEGRAPH_H#include <iostream>#include <vector>#include <cassert>using namespace std;// 稠密图 - 邻...转载 2019-04-19 14:55:41 · 297 阅读 · 0 评论 -
Graph-005-Finding-a-Path
Path.h#ifndef INC_06_FINDING_A_PATH_PATH_H#define INC_06_FINDING_A_PATH_PATH_H#include <vector>#include <stack>#include <iostream>#include <cassert>using namespace std...转载 2019-04-24 10:45:36 · 145 阅读 · 0 评论 -
Graph-006-BFS-and-Shortest-Path
DenseGraph.h#ifndef INC_07_BFS_AND_SHORTEST_PATH_DENSEGRAPH_H#define INC_07_BFS_AND_SHORTEST_PATH_DENSEGRAPH_H#include <iostream>#include <vector>#include <cassert>using name...转载 2019-04-24 10:50:42 · 137 阅读 · 0 评论 -
Minimum-Span-Trees-001-Weighted-Graph
DenseGraph.h#ifndef INC_01_WEIGHTED_GRAPH_DENSEGRAPH_H#define INC_01_WEIGHTED_GRAPH_DENSEGRAPH_H#include <iostream>#include <vector>#include <cassert>#include "Edge.h"using ...转载 2019-04-24 11:04:38 · 196 阅读 · 0 评论 -
一篇文章搞懂红黑树的原理及实现
2-3-4 Tree(2-3-4树)二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,它的左子节点的值比父节点的值要小,右节点的值要比父节点的值大。它的高度决定了它的查找效率。我们知道二叉查找树。每个节点只可以有一个key,而2-3-4树就是将节点的key的数量增加,可以有多个key,并且2-3-4树可以保持完美平衡(Perfect balance. Every p...转载 2019-05-27 10:29:55 · 647 阅读 · 0 评论 -
单链表反转
单链表反转是链表的一种基本操作。网上看了一些文章,介绍的还是都很详细。自己也尝试着写了一些代码,调试通过。链表的反转方法有很多种。采用游标指针遍历,修改next指针是常用的方法。一般地,需要定义三个指针,比如本文中,定义为Node *cur,*pNext,*pre;其中,cur用来保存反转后的头指针;pNext是游标,用来遍历链表并将各个节点的next指针值修改为前一个节点地址;而pre...转载 2019-06-10 16:00:30 · 368 阅读 · 0 评论 -
双向链表反转
本文中的双向链表,具有一个首指针h,但没有尾指针,不是循环链表。链表反转时,要做两件事情,一是将数据部分的pre指针和next指针交换值;二是将h指针指向反转后的头数据节点指针,并将新链表的尾数据节点指针的next(即原链表头数据指针的next)置空。上代码:DLinkedNode.h#ifndef DLINKEDNODE_H_INCLUDED#define DLINKEDNODE...转载 2019-06-10 19:10:31 · 2121 阅读 · 0 评论 -
排序-005-Merge-Sort-02-Advance
MergeSort.h#include <iostream>using namespace std;// 将arr[l...mid]和arr[mid+1...r]两部分进行归并template<typename T>void __merge(T arr[], int l, int mid, int r){ // 经测试,传递aux数组的性能效果并...转载 2019-04-16 18:49:32 · 113 阅读 · 0 评论 -
Binary-Search-009-The-Disadvantages-of-Binary-Search-Tree-and-More-Trees
FileOps.h#ifndef INC_10_THE_DISADVANTAGES_OF_BINARY_SEARCH_TREE_AND_MORE_TREES_FILEOPS_H#define INC_10_THE_DISADVANTAGES_OF_BINARY_SEARCH_TREE_AND_MORE_TREES_FILEOPS_H#include <string>#incl...转载 2019-04-19 10:16:33 · 123 阅读 · 0 评论 -
Binary-Search-008-Tree-Remove
main.cpp#include <iostream>#include <queue>#include <cassert>using namespace std;template <typename Key, typename Value>class BST{private: struct Node{ Ke...转载 2019-04-18 14:33:55 · 121 阅读 · 0 评论 -
Heap-001-Max-Heap-Class-Define
main.cpp#include <iostream>#include <algorithm>#include <string>#include <ctime>#include <cmath>#include <cassert>using namespace std;template<typenam...转载 2019-04-17 10:41:57 · 103 阅读 · 0 评论 -
排序-006-Quick-Sort-04-Three-Ways
QuickSort.h#ifndef INC_07_QUICK_SORT_THREE_WAYS_QUICKSORT_H#define INC_07_QUICK_SORT_THREE_WAYS_QUICKSORT_H#include <iostream>#include <ctime>#include <algorithm>#include "In...转载 2019-04-17 10:37:34 · 110 阅读 · 0 评论 -
排序-006-Quick-Sort-03-Deal-With-Identical-Keys
main.cpp#include <iostream>#include <algorithm>#include <ctime>#include "SortTestHelper.h"#include "MergeSort.h"#include "InsertionSort.h"using namespace std;template <...转载 2019-04-17 10:33:36 · 97 阅读 · 0 评论 -
排序-006-Quick-Sort-02-Deal-With-Nearly-Ordered-Array
main.cpp#include <iostream>#include <algorithm>#include <ctime>#include "SortTestHelper.h"#include "MergeSort.h"#include "InsertionSort.h"using namespace std;template <...转载 2019-04-17 10:32:31 · 157 阅读 · 0 评论 -
排序-006-Quick-Sort-01
main.cpp#include <iostream>#include <algorithm>#include "SortTestHelper.h"#include "MergeSort.h"#include "InsertionSort.h"using namespace std;// 对arr[l...r]部分进行partition操作// 返回p,...转载 2019-04-17 10:30:50 · 119 阅读 · 0 评论 -
排序-005-Merge-Sort-03-Bottom-Up
main.cpp#include <iostream>#include "SortTestHelper.h"#include "MergeSort.h"using namespace std;template <typename T>void mergeSortBU(T arr[], int n){// for( int sz = 1; sz &...转载 2019-04-16 18:55:54 · 275 阅读 · 0 评论 -
排序-005-Merge-Sort-01
main.cpp#include <iostream>#include "SortTestHelper.h"#include "InsertionSort.h"using namespace std;// 将arr[l...mid]和arr[mid+1...r]两部分进行归并template<typename T>void __merge(T arr[...转载 2019-04-16 18:47:10 · 98 阅读 · 0 评论 -
排序-004-shell-Sort
main.cpp#include <iostream>#include "SortTestHelper.h"#include "SelectionSort.h"#include "InsertionSort.h"#include "BubbleSort.h"using namespace std;template<typename T>void she...转载 2019-04-16 18:45:38 · 113 阅读 · 0 评论 -
排序-003-Bubble-Sort
SortTestHelper.h#ifndef OPTIONAL_01_BUBBLE_SORT_SORTTESTHELPER_H#define OPTIONAL_01_BUBBLE_SORT_SORTTESTHELPER_H#include <iostream>#include <algorithm>#include <ctime>#include...转载 2019-04-16 18:43:47 · 142 阅读 · 0 评论 -
排序-002-Insertion--02-Sort-Advance
SelectionSort.h#ifndef INC_04_INSERTION_SORT_ADVANCE_SELECTIONSORT_H#define INC_04_INSERTION_SORT_ADVANCE_SELECTIONSORT_H#include <iostream>#include <algorithm>using namespace std;...转载 2019-04-16 16:47:03 · 112 阅读 · 0 评论