数据结构
Mr.chen108
本人毕业于华南师范大学软件工程。希望可以多与大家进行学术上的交流!
展开
-
堆和栈的概念和区别
Java程序在运行时都要开辟空间,任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空间的。JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区域中进行更细致的划分,因为虚拟机中每一片内存处理的方式都不同,所以要单独进行管理。      JVM内存的划分有五片:   &a转载 2018-09-11 01:48:24 · 152 阅读 · 0 评论 -
树的高度和深度
用到树的数据结构时,经常会考虑树的高度和深度,但是lz总是搞混了,总虽然比较简单,就是个定义,记住就行了,但是因为长时间总是弄错,所以写一篇博文,加深一下印象1、树的深度树的深度可以这样理解,计算一个节点的深度,从根节点算起(记住从1开始计数,而不是0,程序员的通病在这不好使),到该节点所经过的节点数(包括此节点)为树的深度,如下图B的深度为2,k的深度为5.树中最大深度的节点的深度为树的深度...转载 2019-03-12 14:25:34 · 16096 阅读 · 2 评论 -
关于hashCode方法的作用
想要明白hashCode的作用,你必须要先知道Java中的集合。 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。 你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。 那么这里就有一个比较严重的问题了:要想保证元素不...转载 2018-11-20 09:30:11 · 116 阅读 · 0 评论 -
hash算法原理详解
转载自:http://blog.csdn.net/tanggao1314/article/details/51457585一.概念哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。哈希的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值...转载 2018-11-20 01:13:30 · 297 阅读 · 0 评论 -
SkipList跳表基本原理
SkipList跳表基本原理 为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。用跳表吧,跳表是一种随机...转载 2018-11-19 10:23:02 · 128 阅读 · 0 评论 -
BTree和B+Tree
B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。二叉查找树二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大于根...转载 2018-11-19 10:19:25 · 362 阅读 · 0 评论 -
图的深度优先遍历(非递归+递归,详解)
图的深度优先遍历#include<iostream>#include<stack>using namespace std;const int MaxSize=100;class MGraph{//邻接矩阵的构建 public: int adj[MaxSize][MaxSize],visited[MaxSize];原创 2018-09-14 20:16:59 · 43551 阅读 · 5 评论 -
最小生成树算法:Prim、Kruskal
Prim算法实现完整代码:#include<iostream>using namespace std;const int Max=100;class MGraph{ public: MGraph(){ } MGraph(int n,int e); ~MGraph(){ } ...原创 2018-09-11 01:47:17 · 253 阅读 · 0 评论 -
拓扑排序详细解读
1、拓扑排序的介绍对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。 拓扑排序对应施工的流程图具有特别重要的作用,它可以决定哪些子工程必须要先执行,哪些子工程要在某些工程执行后才可以执行。为了形象地反映出整个工程中各个子工程(活动)之...原创 2018-09-13 00:59:20 · 947 阅读 · 0 评论 -
简单实现计算器(数据结构)
文章转载自:https://blog.csdn.net/gebushuaidanhenhuai/article/details/62932960 要想实现计算器,我们可以首先把中缀表达式转化为后缀表达式,再计算中缀表达式的值。具体的理论分析请查看:http://blog.csdn.net/gebushuaidanhenhuai/article/details/6294...转载 2018-09-16 01:46:27 · 5542 阅读 · 0 评论 -
Dijkstra算法
我们用一个例子来具体说明Dijkstra算法的流程。 定义源点为0,dist[i]为源点0到顶点i的最短路径。其过程描述如下:步骤 dist[1] dist[2] dist[3] dist[4] 已找到的集合 第1步 8 1 2 +∞ { 2 } 第2步 8 × 2 4 { 2, 3 } 第3步 5 × × 4 { 2, 3, 4 }...原创 2018-09-11 13:16:39 · 12822 阅读 · 3 评论 -
数据结构和内存中堆和栈的区别
特别声明:本文参考了博客:http://blog.csdn.net/wolenski/article/details/7951961#comments       堆和栈在 我的眼里一直是很模糊的概念,只...转载 2018-08-30 20:00:54 · 5981 阅读 · 1 评论 -
归并排序(递归实现、非递归实现)
public class Solution { // 子环节,归并两个有序的数组 public void MergeSort(int[] arr, int left, int mid, int right){ int[] arr2 = new int[mid - left + 1]; int[] arr3 = new int[right - mid]; int length1 ...原创 2019-07-15 08:36:30 · 340 阅读 · 0 评论