data structures and algorithm
黄培龙
你好,我是一名游戏开发者,做过休闲游戏、竞技游戏、mmorpg、战棋游戏、卡牌自走棋,项目中我擅长框架搭建、战斗系统、网络同步(状态同步、帧同步)、物理引擎、AI,熟悉渲染管线、性能优化。我可以教你游戏开发技术,帮你解决项目问题。
展开
-
【数据结构算法】【秒懂计算算法复杂度的方法】
秒懂计算算法复杂度的方法原创 2022-08-13 22:23:15 · 231 阅读 · 0 评论 -
超清晰的——时间负责度、空间负责度都是O(n)的单链表反转
直接贴代码重点看 public ListNode Reverse(ListNode node);其它的代码是辅助用的开发代码所有的源码都可以在我github上找到,欢迎star github地址namespace DataStructure{ public class ReverseSingleLinkedList : BaseSolution { p...原创 2020-02-21 22:52:59 · 222 阅读 · 0 评论 -
c#使用数组实现泛型队列Quque<T>,以循环的方式使用数组提高性能
队列简述一种先进先出的数据结构本文主旨提供一个确定容量的高性能队列的实现更进一步可以对队列做动态扩容,每次队列满了的时候增加队列容量队列也可以使用链表实现实现代码using System;namespace DataStructure{ /// <summary> /// 用数组实现队列 /// 用2个index标记开始合结束 ...原创 2019-12-12 13:51:20 · 803 阅读 · 0 评论 -
冒泡排序和实现
冒泡排序的精髓有多少个元素就做多少次冒泡每次冒泡从前往后遍历元素,把最大的元素放到没排序部分的最后根据需要也可以把最小的元素放到最后所以是2层for循环因为每次都是遍历,把当前的元素和后面一个元素比较,把最大的放到后面那个元素的位置,所以最后面的一定是最大的根据需要也可以是最小的代码namespace DataStructure{ public class B...原创 2019-07-07 11:29:04 · 188 阅读 · 0 评论 -
插入排序 实现 要点 代码 注释
要点要插入的数被暂存,腾出一个空位,用来移动数据如果需要,把已经排序的区域的比要插入元素大的那部分后移一位,腾出一个空位 E把要插入的元素放到空位 E,排序完成精髓已经排序的部分比要插入的大的那部分往后挪,腾出位置实现namespace DataStructure{ public class InsertionSort { /* 形象的说法: ...原创 2019-07-07 15:22:46 · 240 阅读 · 0 评论 -
堆排序 实现 要点 代码 注释
要点构造大根堆,不断移除大根堆堆顶元素,把这些元素逐个放入列表每次移除的都是剩下的数据中最大的,所以最后的列表数据是从大到小排序精髓构建大根堆有关大根堆的参考 https://blog.csdn.net/ak47007tiger/article/details/92765948实现namespace DataStructure{ public class HeapSo...原创 2019-07-07 15:28:09 · 134 阅读 · 0 评论 -
选择排序 实现 要点 代码 注释
要点从未排序的序列中选择最小的放到已经排序的序列的后面因为每次从未排序的元素中找的最小的,那么已经排序的部分一定小于未排序的部分,所以可以直接放到后面实现namespace DataStructure{ public class SelectionSort { /* 从小到大 从未排序的序列中选择最小的放到已经排序的序列的后面 从大到小 ...原创 2019-07-07 15:34:00 · 269 阅读 · 0 评论 -
循环单链表(CircularLinkedList) 实现
/*循环链表是一种链式存储结构,它的最后一个结点指向头结点,形成一个环。因此,从循环链表中的任何一个结点出发都能找到任何其他结点。循环链表的操作和单链表的操作基本一致,差别仅仅在于算法中的循环条件有所不同。 */namespace DataStructure { public class CircularLinkedList { ListNode head; pub...原创 2019-07-12 11:25:52 · 303 阅读 · 0 评论 -
[栈] 数组实现的泛型Stack —— ArrayStack
比较简单,都在代码里namespace DataStructure{ /* stack是一种先进后出的数据结构 有几个基本操作,见代码 用于解决和存取数据的顺序有关的问题 */ public class ArrayStack<T> { private T[] memory; private int _size; publ...原创 2019-07-28 09:33:48 · 815 阅读 · 0 评论 -
[顺序表] 数组实现的泛型List —— ArrayList
代码namespace DataStructure{ /* 顺序表,一种常见的顺序存储结构 */ public class ArrayList<T> { private T[] memory; private int _size; public ArrayList(int capacity) { memory = ...原创 2019-07-28 10:00:05 · 163 阅读 · 0 评论 -
单链表和实现 SinglyLinkedList
/*单向链表(又名单链表、线性链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过从头部开始,依序往下读取。 */namespace DataStructure{ public class SinglyLinkedList { ListNode head; public bool IsEmpty() { return he...原创 2019-07-10 23:27:44 · 270 阅读 · 0 评论 -
无向图 使用邻接表法 实现 LinkedUndigraph
using System.Collections.Generic;namespace DataStructure{ public class LinkedUndigraph : BaseSolution { HashSet<int> valueSet = new HashSet<int>(); Dictionary<int, Node&g...原创 2019-07-12 20:28:27 · 132 阅读 · 0 评论 -
数组实现的大根堆
堆一种树状的数据结构大根堆根节点是所有节点中数值最大的节点父节点的值总比子节点大基本操作Insert 向堆中插入一个值Update 更新Heapify 堆化RemoveTop 删除堆顶元素GetTop 获得堆顶元素辅助操作获得父节点获得左孩子获得右孩子获得当前容量判断一个节点是否是叶子节点交换2个节点的位置数组大根堆用数组实现的大根堆作...原创 2019-06-18 10:21:32 · 1510 阅读 · 0 评论 -
8皇后问题 回溯 递归 代码实现
8皇后问题 回溯 递归 代码实现算法如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。8皇后回溯算法定义a[k] = i:第k个皇后放在第 k行,第 i列皇后从第一行开始摆放1 如果还有没放的位置,把皇后放到这个位置上2 查看是否和之前摆放的皇后冲突,如果冲突到3,否则到43...原创 2019-06-22 21:33:46 · 177 阅读 · 0 评论 -
快速排序 实现 精要 代码 注释
要点把元素分为小于中值的和大于中值的2段元素分别放到数据段的两边在对上面的2段元素分别使用快排当无法分段的时候,因为所有的数据段都是按照由小到大放的,故所有的数据都是由小到大排好序的精要分治,分治是好理解的分割方法,想要理解这个过程,去证明一次原始的快排算法的分割方法能够完成数据分类即可,具体说明看代码注释分割找一个中值,随机找,或者用数据段第一个,或者用数据段最后一个...原创 2019-07-07 16:33:04 · 172 阅读 · 0 评论 -
希尔排序 实现 要点 代码 注释
要点使用步长把数据分组,即每隔几个元素是一组,对着一组元素使用插入排序最后一组的步长是1,是一个插入排序,因为之前的分组和排序已经使整个数组大致有序,所以此时使用插入排序效率高实现namespace DataStructure{ public class ShellSort { /* - 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效...原创 2019-07-07 18:48:11 · 315 阅读 · 0 评论 -
归并排序 实现 要点 代码 注释 内存优化
要点分治,把数组二分成2部分,分别对这两部分排序,合并这两部分合并函数借助新的内存空间内存优化合并函数不借助新的内存,使用插入排序完成合并 /* 使用插入排序优化合并方法 不用创建新的数组,减少内存使用 */ public void Merge2(int[] array, int from, int mid, int to) { ...原创 2019-07-07 18:54:17 · 203 阅读 · 0 评论 -
基数排序 实现 要点 代码 注释
要点从个位开始,十位、百位…直到最高位,分别按照个位,十位、百位,直到最高位排序这样每次排序,依次保证个位大的数在后面,十位大的数在后面、百位大的在后面…直到最高位大的数在后面是在按照某一位的值有序的序列中,按照另一更大的位排序,最后保证所有数都有序实现namespace DataStructure{ using System.Collections.Generic; /*...原创 2019-07-07 20:31:41 · 195 阅读 · 0 评论 -
计数排序 实现 要点 代码 注释
要点获得一个数组统计每个数出现的次数二次计数,统计一个数和这个数之前的数出现的次数倒出数据,根据二次计数的值-1获得数据在有序数组中的index实现/*输入:A新建数组B新建数组C,用index代表value,C[index] = value频率index in 0 to C.length - 1C[index] = C[index] + C[index-1]这个操作是求...原创 2019-07-07 21:01:53 · 109 阅读 · 0 评论 -
桶排序 区间桶排序 实现 要点 代码 注释
要点申请一数组,数组的index中存放数值为index的数在待排序数组中出现的次数从前往后依次倒出桶里面的数据线性排序方法,费内存,速度快,适用那种数据范围固定且不非常大的排序需求实现namespace DataStructure{ using System.Collections.Generic; /* 一般桶排序:区间桶 当数据量很大,数据非常离散,无法一次性...原创 2019-07-07 21:20:24 · 224 阅读 · 0 评论 -
二叉查找树 数组实现 ArrayBinarySearchTree
数组实现的二叉查找树适用查找操作频繁,插入、删除操作较少的情况代码using System;namespace DataStructure{ /* 数组实现的二叉查找树 输入一个数组,获得一颗二叉查找树 找parent 和 child index的数值规律 0 1,2 3,4,5,6 7,8,9,10,11,12,13,14 15,16,17...原创 2019-07-12 17:43:57 · 735 阅读 · 0 评论 -
并查集
并查集作用 判断联通性 标号是否在同一个集合定义操作初始化查找 给一个标号,查找这个标号的顶层父亲合并 给2个标号,合并这两个标号到同一个顶层父亲判断2个数据是否属于同一个集合理解并查集0 1 2 3 4 5 6 7 此时标号是互相独立的0 1 2 3 3 5 6 7 合并了原来的3 4 此时查4可以得到3并查集优化路径压缩rank合并rank un...原创 2019-05-31 09:57:12 · 127 阅读 · 0 评论