Java数据结构与算法
文章平均质量分 86
数据结构与算法
sun cat
只有让自己变得更优秀,才无所畏惧
展开
-
常用数据结构简介
这些类均在java.util包中,结构如下: Collection 1.List 子接口 LinkedList ArrayList Vector Stack 2.Set接口 Map Hashtable HashMap WeakHashMap Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Co...原创 2019-08-13 23:14:36 · 156 阅读 · 0 评论 -
链表翻转
即:翻转一个单项链表 算法:单向链表逆序 递归反转法: 遍历反转法:原创 2019-09-10 22:53:55 · 156 阅读 · 0 评论 -
判断单链表成环与否?
利用P2比P1走得快的原理,以此形成差距,对比其内部特定数值,如果如果相同,则表示闭环原创 2019-08-13 23:31:05 · 427 阅读 · 0 评论 -
讲一下对树,B+树的理解
B树是为磁盘或其他直接存取的辅助存储设备而设计的一种平衡搜索树。B树类似于红黑树,但它们在降低磁盘I/O操作数方面要更好一些 B+树是B树的一种变形,它把所有的卫星数据都存储在叶节点中,内部节点只存放关键字和孩子指针,因此最大化了内部节点的分支因子,所以B+树的遍历也更加高效(B树需要以中序的方式遍历节点,而B+树只需把所有叶子节点串成链表就可以从头到尾遍历)。 以下先放一张我所依据的B+树的...原创 2019-08-13 23:30:03 · 1349 阅读 · 0 评论 -
手写链表逆序代码
Node 是org.w3c.dom包下定义接口其子接口很多 获取两个数,将第一个数放在第二个数的后面,也就是链表后面 比如先获取了1,2两个数,将1放在2后面,形成链表A(2,1) 当继续原列表中不为空时,继续读,并将链表A放在其后。如不为空,再读出来是3,将A放在3后面,形成新的链表P2(3,2,1,),以此类推 Head.next = p2.next 只是将列表的数往...原创 2019-08-13 23:28:07 · 457 阅读 · 0 评论 -
什么是深拷贝和浅拷贝
浅拷贝:所谓的浅拷贝就是拷贝指向对象的指针(拷贝出来的目标对象的指针和源对象的指针指向的内存空间是同一块空间)。 浅拷贝只是一种简单的拷贝,让几个对象公用一个内存,然而当内存销毁的时候,指向这个内存空间的所有指针需要重新定义,不然会造成野指针错误 深拷贝:所谓的深拷贝指拷贝对象的具体内容,其内容地址是自助分配的,拷贝结束之后,内存中的值是完全相同的,但是内存地址是不一样的,两个对象之间相互不影...原创 2019-08-13 23:26:47 · 610 阅读 · 0 评论 -
堆和栈在内存中的区别是什么?
(解答提示:可以从数据结构方面以及实际实现方面两个方面去回答) java中的内存,分为两种,一为堆内存,二为栈内存。 栈内存 在函数中定义的基本类型的变量和对象的引用变量都是在函数的栈内存中分配。 当在一段代码块中声明了一个变量时,java就会在栈内存中为这个变量分配内存空间,当超过变量的作用域之后,java也会自动释放为该变量分配的空间,而这个回收的空间可以即刻用作他用。 堆内存 堆...原创 2019-08-13 23:26:14 · 2475 阅读 · 0 评论 -
堆和树的区别
来一个离题的开头: heap和tree结合,生了个孩子叫treap。中文名叫树堆。 首先它每个节点有2个值value和weight 其中只看weight的话,满足heap二叉堆的特性(父亲比儿子都小/大),只看value的话,满足排序二叉树特性(以左儿子为根的子树元素都比父亲小,右儿子为根的子树都比父亲大) value是要维护的值,weight是随机生成的值。由于随机生成的堆使整棵trea...原创 2019-08-13 23:24:44 · 922 阅读 · 0 评论 -
详细解说堆的结构
知道堆这种数据结构吗? 建堆的过程是什么样的? 堆是一颗完全二叉树。 在这棵树中,所有父节点都满足大于等于其子节点的堆叫大根堆。 所有父节点都满足小于等于其子节点的堆叫小根堆。 堆虽然是一颗树,但是通常存放在一个数组中,父节点和孩子节点的父子关系通过数组下标来确定。如下图的小根堆及存储它的数组: 创建 除了知道怎么计算一个节点的父节点和孩子节点的索引外,我们还需要两个算法,...原创 2019-08-13 23:23:42 · 3719 阅读 · 0 评论 -
二叉树的深度优先遍历和广度优先遍历的具体实现
二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。 1.深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次。要特别注意的是,二叉树的深度优先遍历比较特殊,可以细分为先序遍历、中序遍历、后序遍历。具体说明如下: (1)先序遍历:对任一子树,先访问根,然后遍历其左子树,最后遍历其右子树。 (2)中序遍历:对任一子树,先...原创 2019-08-13 23:19:44 · 516 阅读 · 0 评论 -
数组和链表的区别
1.从内存存储角度: 数组从栈中分配空间,对程序员方便快速,自由度小。 链表从堆中分配内存。自由度大但申请管理比较麻烦。 2.从逻辑结构角度: 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减情况(数据插入、删除比较麻烦)。当数据增加时,可能会超出数组的最大空间(越界);当数据减少时,造成内存浪费。 链表动态地进行存储分配,可以适应数据动态地增减情况(数据插入删除简单)...原创 2019-08-13 23:15:00 · 144 阅读 · 0 评论 -
合并多个单有序链表(假设都是递增的)
大体思路:使用递归 步骤: 判断L1,L2是否为空 创建一个头指针 判断当前L1,L2指向的节点值的大小.根据结果,让头指针指向小节点,并让这个节点往下走一步,作为递归函数调用的参数放入,返回的就是新的两个值的比较结果,则新的比较结果放入头结点的下一个节点. 返回头结点 /** * Definition for singly-linked list. * struct ListN...原创 2019-09-10 22:54:10 · 749 阅读 · 0 评论