
数据结构
文章平均质量分 61
以Java实践,穿插算法记录
_Tunan
I am coding in 优快云.
展开
-
数据结构(十三)——二叉排序树
二叉排序树(BST): (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点, 要求左子节点的值比当前节点的值小, 右子节点的值比当前节点的值大。特别说明: 如果有相同的值, 可以将该节点放在左子节点或右子节点比如针对数据 (7, 3, 10, 12, 5, 1, 9) , 对应的二叉排序树为:二叉排序树的建立与遍历package binarysorttreee;public class BinarySortTreeDemo { public stat原创 2021-08-20 19:17:43 · 796 阅读 · 0 评论 -
数据结构(十二)——赫夫曼树
给定 n 个权值作为 n 个叶子结点, 构造一棵二叉树, 若该树的带权路径长度(wpl)达到最小, 称这样的二叉树为最优二叉树, 也称为霍夫曼树(Huffman Tree)。在正式介绍霍夫曼树之前,先介绍一下带权路径长度WPL(weighted pathlength):树的带权路径长度规定为所有叶子结点的带权路径长度之和, 记为 WPL ,权值越大的结点离根结点越近的二叉树才是最优二叉树。路径和路径长度: 在一棵树中, 从一个结点往下可以达到的孩子或孙子结点之间的通路, 称为路径。 通路中分支的数目称原创 2021-08-17 21:02:17 · 330 阅读 · 0 评论 -
数据结构(十一)——顺序存储二叉树
目录顺序存储二叉树特点前序遍历顺序存储二叉树从数据存储来看, 数组存储方式和树的存储方式可以相互转换, 即数组可以转换成树, 树也可以转换成数组,看下面的示意图。特点顺序二叉树通常只考虑完全二叉树第 n 个元素的左子节点为 2 * n + 1第 n 个元素的右子节点为 2 * n + 2第 n 个元素的父节点为 (n-1) / 2n : 表示二叉树中的第几个元素(按 0 开始编号如图所示)前序遍历//编写ArrayBinaryTree,实现顺序存储二叉树class ArrBina原创 2021-08-16 21:07:34 · 241 阅读 · 0 评论 -
数据结构(十)——二叉树遍历
目录二叉树二叉树的遍历二叉树遍历代码二叉树二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分 。二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也原创 2021-08-15 15:23:31 · 236 阅读 · 0 评论 -
数据结构(九)——哈希表
文章目录一、HashSet、HashMap、HashTableHashMap和HashTable的区别HashMap和HashSet的区别二、模拟哈希表哈希表的介绍模拟题目一、HashSet、HashMap、HashTable首先Set表示了集合的无序元素,set中不允许有重复元素Map代表一种由多个key-value组成的集合,map集合是set集合的扩展HashMap基于hashing原理,通过put()和get()方法储存和获取对象。创建一个HashMapMap<String,.原创 2021-08-14 20:01:00 · 313 阅读 · 0 评论 -
数据结构(八)——后缀表达式
目录关于中缀与后缀表达式中缀转后缀表达后缀表达的计算程序实现今天是很闷热的一天,还是坚持着学完既定课程并做好总结关于中缀与后缀表达式所述的 中缀表达式就是人们平时所看到的数学表达式形式,以人们易读的形式展现(数字之间夹杂着运算符)并且要考虑括号的优先计算。这样的表达式其实是不利于计算机计算的,关于中缀表达式的计算机计算实现可以看我上一篇博客伟大的计算机学者发明出一种后缀表达式,使计算机更容易计算数学式子,我们需要做的有两部分,第一部分是中缀转后缀表达,第二部分是后缀表达的计算中缀转后缀表达将中原创 2021-07-31 21:45:45 · 5389 阅读 · 1 评论 -
数据结构(七)——栈
目录栈栈的用处数组进行模拟栈实现计算器操作今天记录栈的相关学习栈栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。 允许插入和删除的一端, 为变化的一端, 称为栈顶(Top), 另一端为固定的一端, 称为栈底(Bottom)。栈的用处子程序的调用: 在跳往子程序前, 会先将下个指令的地址存到堆栈中, 直到子程序执行完后再将地址取出, 以回到原来的程序中。原创 2021-07-30 18:41:53 · 514 阅读 · 0 评论 -
数据结构(六)——环形链表
今天记录一下环形链表的学习,通过单向链表的分析,将一般的单向链表首位相接,也就是lastNode.next = firstNode用图示解释一下就是,没有准确意义上的头节点了。环形链表通常用来解决的问题就是约瑟夫问题问题描述如下一群小孩坐到一起围成一个圈做丢手帕游戏从某一个指定小孩开始,规定循环几个小孩的位置,循环到某个小孩就将其出圈以此循环往复,直到将所有小孩出圈问题描述的很形象,反正就是这样的一个算法,他的实现流程是1、首先创建一个节点,让first指向该节点,并自身形成环形he原创 2021-07-29 20:05:43 · 689 阅读 · 0 评论 -
数据结构(五)——双向链表之插入顺序
双向链表这里不做赘述,其特性已经普及遍了。可以参考之前博客的单向链表进行回顾学习。在这里记录一个问题点,就是双向链表的有序插入时,赋值顺序是什么?首先什么是有序插入,插入分为头部插入和尾部插入和按顺序插入,由于前两种比较简单,所以不会出现什么问题。这里所记录的有序插入(或者有序添加),是最特殊的一种情况。比如要插入2节点到1和3之间,因此需要对4个指针进行赋值,这里面的赋值顺序是什么,这是我们需要讨论的。首先贴出代码在进行分析,代码解析可以看注释//按节点排序添加 public void a原创 2021-07-24 20:42:23 · 5346 阅读 · 7 评论 -
数据结构(四)——腾讯面试题:反转单链表
一个小小的面试题记录题目要求:给定一个有头节点的单链表,对其进行反转,使顺序变成由后到前的链表问题分析:首先我们给出一个单链表如下图,头节点head指向第一个节点的index1,第一个节点的值是value1,指向第二个节点index2...原创 2021-07-23 09:47:46 · 322 阅读 · 0 评论 -
数据结构(三)——链表类详解
目录链表节点类add()方法流程:总结链表链表是一种存储起来不需要顺序内存地址的数据结构它是以节点的方式来存储(也就是链式存储)链表分为值域(数据域)和引用(指针域)值域是指这个节点所存储的内容,引用是指指向的下个节点的内存位置(或编号)分为双向链表和单向链表,为了讨论其中一些细节,我们在这只讨论单向列表节点类通常,java实现的节点类写法如下//定义一个HeroNode,每一个HeroNode对象就是一个节点class HeroNode { public int no;//值域(编号原创 2021-07-21 20:28:24 · 1028 阅读 · 0 评论 -
数据结构(二)——数组模拟队列
目录队列数组模拟队列顺序队列缺陷什么是假溢出数组模拟环形队列代码实现队列1)队列是一个有序列表,可以用数组或是链表来实现2)遵循先入先出原则,即:先存入队列的数据,要先取出。后存入的要后取出3)数组模拟队列的示意图其中的front是队首数据的指针,rear是队尾数据的指针。maxSize是队列容量。队列这样的数据结构实际的一个应用场景就是银行排队叫号。数组模拟队列1)如上图,队列本身是有序列表,使用数组的结构来存储队列的数据,需要front、rear分别记录队列前后端的下标2)front转载 2021-07-20 16:52:18 · 415 阅读 · 0 评论 -
数据结构(一)—— 稀疏数组
目录稀疏数组定义稀疏矩阵非零元素三元组程序实现稀疏数组定义稀疏数组又称为稀疏矩阵,是指矩阵中非零元素个数远远小于矩阵元素个数,且非零元素分布没有规律。设m * n的矩阵有t个非零元素,则称 σ=t/(m * n) 为矩阵的稀疏因子,通常σ<=0.05的矩阵称为稀疏矩阵。比如下面的二维数组就是稀疏数组,它是11*11的这样的数据结构往往会占用大量的内存,并且大多数的元素为0就造成了内存浪费,我们需要解决这样稀疏数据结构,采用一种更加便捷高效的数据结构——稀疏矩阵非零元素三元组稀疏矩阵非零元素三原创 2021-07-19 17:58:16 · 877 阅读 · 0 评论