数据结构
空指针异常1
这个作者很懒,什么都没留下…
展开
-
【数据结构10】二叉排序树详解
二叉排序树概述二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。是数据结构中的一类。在一般情况下,查询效率比链表结构要高。二叉排序树是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的结点。即,父节点的值大于其左子节点,小于其右子节点如图即为一棵原创 2020-07-29 21:42:42 · 1521 阅读 · 0 评论 -
【数据结构09】哈夫曼树(最优二叉树)详解,及Java实现
哈夫曼树(最优二叉树概述哈夫曼树又称为最优树.1、路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。2、结点的权及带权路径长度若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。3、树的带权路径长度树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL。给定N个原创 2020-07-27 19:12:01 · 759 阅读 · 1 评论 -
【数据结构08】二叉树、顺序存储二叉树、线索二叉树详解及Java实现
目录二叉树树一些概念遍历实现思路代码实现顺序存储二叉树概述代码实现线索二叉树概述二叉树树数组的优点是通过下标访问元素效率比较高、对于有序数组,还可以通过二分法提高检索效率,而缺点是,插入、删除时,会整体移动一部分数据,效率较低链式存储优点则是插入删除时,效率很高,而检索效率比较低这时,树应运而生。树,能够提高数据存储、检索的效率。二叉树既可以保证数据的检索效率,也保证了插入删除的效率一些概念满二叉树:所有叶子节点都在最后一层,且节点数=2^n-1,n为层数。完全二叉树:所有叶子节点都在最后一原创 2020-07-26 21:05:57 · 221 阅读 · 0 评论 -
【数据结构07】Java实现哈希表HashTable及其详解(数组+链表)
哈希表概述散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。就是以 key : value 的形式储存数据的一种数据结构。而对于key原创 2020-07-25 17:42:29 · 1165 阅读 · 0 评论 -
【数据结构06】栈 概述及java实现
栈其实jdk中自带stack,自己实现一遍是为了加深理解概述遵循先进后出原则限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。实现思路需要一个top指针,用来指向栈顶元素,初始值为-1,当有元素入栈时top++出栈时top–使用数组来模拟栈,所以这个top代表的就是栈顶元素的原创 2020-07-21 15:17:58 · 76 阅读 · 0 评论 -
【数据结构05】单向环形链表、约瑟夫问题 概述及java实现
环形链表及约瑟夫问题概述环形链表就是在普通链表的基础上,最后一个节点的next域指向了第一个节点,从而形成一个环约瑟夫问题:设有n个人围成一圈,从第k个人开始报数m下,数到m的人出列,他的下一个人继续数,数到m的人出列…以此类推,直到所有人出列,要求 按出列的顺序用编号形成一个序列实现思路由于环形链表没有头节点,所以需要一个first指针节点指向人为约定的第一个节点为了编写容易,我选择直接在构造函数中初始化一个指定长度,数据仅为int no 节点的链表。需要一个辅助指针,一开始指向第一个节点,原创 2020-07-20 22:12:12 · 103 阅读 · 0 评论 -
【数据结构04】双向链表概述及Java实现
双向链表概述在单链表的基础上,每个节点多了一个pre域,用来指向该节点的前趋节点。双向链表的第一个节点的前趋节点为null,最后一个节点的后继节点为null实现思路大多数思路和单链表差不多,唯独有两处:删除、排序添加。以上两个功能实现的时候,要考虑遍历到最后一个节点才符合条件的情况,要判断临时节点的next是否为空,防止空指针异常。因为与单链表的情况不同的是,向两个节点中间插入、删除节点的时候,除了next要处理,还需要后继节点的pre域要处理,这时临时节点如果指向末尾的节点,即temp.next原创 2020-07-20 16:41:10 · 145 阅读 · 0 评论 -
【数据结构3.1】单链表反转、反向打印链表等功能的java实现
1、有效节点的个数,不包含头节点//查找有效节点数 public int getLength(){ SingleNode tempNode = headNode; int count = 0; while (tempNode.next != null){ count++; tempNode = tempNode.next; } return count; }2原创 2020-07-19 21:56:15 · 171 阅读 · 0 评论 -
【数据结构03】Java实现单向链表及其概述
单链表概述在内存中不是连续的,以节点储存的,每个节点包含data域(存储数据),next域(存储下一个节点的内存地址)其中头节点:不存放数据,仅有next域。作用就是表示单链表的头部最后一个节点的 next域的值为null实现思路需要一个节点的bean类,节点类包含你需要储存的数据和一个节点类型的 next需要一个操作链表的类添加节点分为添加到末尾,和添加到中间添加到末尾:需要一个临时节点作为指针,开始时指向头节点,遍历时根据节点的next找到下一个节点,每次让temp=temp.next原创 2020-07-19 12:04:57 · 238 阅读 · 0 评论 -
【数据结构02】队列、环形队列概述及Java实现
队列概述有序列表,可以用数组、链表实现。先进先出原则。队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。(百度百科)数组实现需要一个maxSize来表示队列的长度需要front、rear 记录队列的头和尾的数据的下标数据加入队列需要rear尾指针向后移,raer++当raer = front 时,队列为空当rear = maxSize - 1 时,队列满数据出队原创 2020-07-18 16:14:33 · 131 阅读 · 0 评论 -
【数据结构01】稀疏数组 Java实现
稀疏数组概述当一个数组中重复元素居多的时候,可以使用稀疏数组保存。比如:五子棋,白子为1、黑子为2、无子为0,大多数数据都是0,则可以使用稀疏数组进行保存。原理将二维数组中的有效数据转换为稀疏数组保存稀疏数组记录的数据有:编号行列值0共有几行共有几列共几个有效值1第几行第几列值为多少…………如: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0原创 2020-07-18 10:44:34 · 162 阅读 · 2 评论