AlgorithmsDataStructures
添加一些数据结构和算法的知识点和实战总结
TaoistQu
剧怜高处多风雨,莫到琼楼最上层。
展开
-
利用大根堆实现堆排序
大根堆的结构为完全二叉树 任意一颗子树的最大值在树根上,其根节点和子节点的坐标索引关系为,i位置的节点的:具体大根堆的介绍和实现参考另外一篇文章左子节点索引为:2*i+1右子节点索引坐标为:2*i+2父节点坐标为: (i-1)/2用大根堆实现堆排序实现的思路为,利用大根堆的特点将最后一个节点元素和0位置元素进行交换,然后将0位置元素下沉,保持大根堆结构即可完成。其中在建立大根堆时有两种方式:采用由上到下的形式建立大根堆采用由下到上的方式建立大根堆其中由下自上的形式建立的大根堆时间复杂度原创 2021-05-16 19:06:49 · 597 阅读 · 0 评论 -
大根堆和堆排序
堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。大根堆和小根堆介绍:大根堆:任意一颗子树,其最大值在树根处的堆结构小根堆:任意一颗子树,其最小值在树根处的堆结构堆结构根节点和叶子节点坐标索引关系任意i位置的节点其左子节点的坐标索引为:2*i+1任意i位置的节点其右子节点的坐标索引为:2*i+2任意i位置的节点其父节点的索引坐标为 :(i-1)/2 (向下取整)对于一个堆结构,需要实现两个基本的方法用来维护堆的特点,一个向上调整,即原创 2021-05-16 18:45:44 · 365 阅读 · 0 评论 -
用双向链表和数组实现栈和队列
1.栈和队列概念栈和队列是一种逻辑上的数据结构:"栈”(Stack)的本意是干草堆;描述一种数据后入先出 LIFO (LastInput First Out)“队列”(Queue)就是等待做某事而排成的队;描述一种先入先出 FIFO(First Input First Out)参考:《计算机是怎么跑起来的》-[日]矢泽久雄 第6.4章节2.实现方式用双向链表import ja...原创 2020-04-20 23:30:37 · 283 阅读 · 0 评论 -
XOR的一些性质理解和骚操作
1.异或运算异或运算:相同为0,不同为1同或运算:相同以1,不同为0以上概念能长期记住的概率接近于0。所以,异或运算就记成无进位相加!实例:6 对应的二进制:0 1 1 04对应的二进制: 0 1 0 0异或操作的结果:0 0 1 02.异或的性质0^N == NN^N == 0异或运算满足交换律和结合率以上的三个性质用无进位相加来理解就非常的容易(第三个按照加...原创 2020-04-19 01:38:07 · 579 阅读 · 0 评论 -
二叉查找树的简单实现
二叉查找树的性质是:对于树中的每个节点X,它的左子树中所有项的值小于X项的值,而它的右子树中所有的项的值大于X项的值。对于二叉树要求所有的项都要可以排序,因此应当实现Comparable接口,在树的构建中使用迭代的方法,以及查找删除均使用迭代的方式实现。主要实现:定义了二叉树的节点,采用了嵌套类的方式(nest class)包含元素节点、左子节点、右子节点。 包含contain(an...原创 2018-08-11 15:04:40 · 162 阅读 · 0 评论 -
LinkedList的理解和代码自己实现
在实现LinkedList的时候主要考虑三个类:1.MyLinkedList类本身,它包含了两端的链、标的大小以及一些方法,在链的两端加了两个额外的节点,头结点(header node)和尾节点(tail node)用来标示链头和链尾。2.Node类,它可能是一个私有的嵌套类。一个节点包含数据以及前一个节点的连接和道下一个节点的连接,还有一个构造方法。3.LinkedListItera...原创 2018-08-06 19:07:05 · 192 阅读 · 0 评论