当前位置: 首页 > news >正文

数据结构基础

将节点构建成树

  • 数据的结构
    • 逻辑结构
      • 集合
      • 线性结构
      • 树形结构
      • 图状结构
    • 存储结构
    • 合理的创建标题,有助于目录的生成
    • 如何改变文本的样式
    • 插入链接与图片
    • 如何插入一段漂亮的代码片
    • 生成一个适合你的列表
    • 创建一个表格
      • 设定内容居中、居左、居右
      • SmartyPants
    • 创建一个自定义列表
    • 如何创建一个注脚
    • 注释也是必不可少的
    • KaTeX数学公式
    • 新的甘特图功能,丰富你的文章
    • UML 图表
    • FLowchart流程图
    • 导出与导入
      • 导出
      • 导入

数据的结构

数据的结构存在逻辑结构和储存结构两个方面;逻辑结构有集合、线性结构、树形结构、图状结构;存储结构有顺序、链式和索引。

逻辑结构

集合

线性结构

树形结构

  1. 节点接口
import java.util.List;/*** 定义了节点需要的基本接口* @author samson bruce*/
public interface ListTreeNode<T> {/*** 节点标志** @return 标志*/String getNodeId();/*** 父节点的标志** @return 标志*/String getNodeParentId();/*** 设置父节点* @param parent 父节点*/void setNodeParent(ListTreeNode<T> parent);/*** 获取节点后代** @return 节点列表*/List<ListTreeNode<T>> getNodeChildren();/*** 设置节点后代* @param listTreeNodes 节点后代*/void setNodeChildren(List<ListTreeNode<T>> listTreeNodes);
}
  1. 构建树的工具类
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;/*** @author Samson bruce*/
public class SimpleListTree<T> {/*** 使用两个map将链表构建成树** @param listTreeNodes 所有的节点* @param pid           父节点的标记* @return 构建出树结构的链表*/public List<ListTreeNode<T>> buildTree(List<ListTreeNode<T>> listTreeNodes, String pid) {Map<String, ListTreeNode<T>> parentMap = new HashMap<>(10);for (ListTreeNode<T> parent : listTreeNodes) {parentMap.put(parent.getNodeId(), parent);}Map<String, List<ListTreeNode<T>>> childrenMap = listTreeNodes.stream().filter(node -> node.getNodeId() != null).collect(Collectors.groupingBy(ListTreeNode::getNodeParentId));listTreeNodes.forEach(node -> node.setNodeChildren(childrenMap.get(node.getNodeId())));listTreeNodes.forEach(node -> node.setNodeParent(parentMap.get(node.getNodeParentId())));return listTreeNodes.stream().filter(node -> Objects.equals(node.getNodeParentId(), pid)).collect(Collectors.toList());}/*** 通过递归的方式将链表构建成树** @param listTreeNodes 所有的节点* @param pid           父节点的标记* @return 构建出树结构的链表*/public List<ListTreeNode<T>> buildTreeRecursion(List<ListTreeNode<T>> listTreeNodes, String pid) {List<ListTreeNode<T>> tree = new ArrayList<>();for (ListTreeNode<T> node : listTreeNodes) {if (Objects.equals(node.getNodeParentId(), pid)) {tree.add(findChild(node, listTreeNodes));}}return tree;}public ListTreeNode<T> findChild(ListTreeNode<T> node, List<ListTreeNode<T>> listTreeNodes) {for (ListTreeNode<T> item : listTreeNodes) {if (Objects.equals(item.getNodeParentId(), node.getNodeId())) {if (node.getNodeChildren() == null) {node.setNodeChildren(new ArrayList<>());}item.setNodeParent(node);node.getNodeChildren().add(findChild(item, listTreeNodes));}}return node;}
}
  1. 测试类
import lombok.Data;import java.util.LinkedList;
import java.util.List;public class Test {public static void main(String[] args) {TimNode sichuan = new TimNode("1", "0", "四川");TimNode chengdu = new TimNode("2", "1", "成都市");TimNode whq = new TimNode("21", "2", "武侯区");TimNode chq = new TimNode("22", "2", "成华区");TimNode dazhou = new TimNode("3", "1", "达州市");TimNode dz = new TimNode("31", "3", "大竹县");TimNode guangan = new TimNode("4", "1", "广安市");List<ListTreeNode<TimNode>> cities = new LinkedList<>();cities.add(sichuan);cities.add(chengdu);cities.add(dazhou);cities.add(guangan);cities.add(whq);cities.add(chq);cities.add(dz);SimpleListTree<TimNode> simpleListTree = new SimpleListTree<>();
//        List<ListTreeNode<TimNode>> listTreeNodes = simpleListTree.buildTreeRecursion(cities, "0");List<ListTreeNode<TimNode>> listTreeNodes = simpleListTree.buildTree(cities, "0");System.out.println(listTreeNodes.size());}@Datapublic static class TimNode implements ListTreeNode<TimNode> {@Overridepublic String toString() {return this.name;}public TimNode(String id, String parentId, String name) {this.id = id;this.parentId = parentId;this.name = name;}String id;String parentId;ListTreeNode<TimNode> parent;String name;List<ListTreeNode<TimNode>> children = new LinkedList<>();@Overridepublic String getNodeId() {return id;}@Overridepublic String getNodeParentId() {return parentId;}@Overridepublic void setNodeParent(ListTreeNode<TimNode> parent) {this.parent = parent;}@Overridepublic List<ListTreeNode<TimNode>> getNodeChildren() {return children;}@Overridepublic void setNodeChildren(List<ListTreeNode<TimNode>> listTreeNodes) {this.children = listTreeNodes;}}
}

图状结构

存储结构

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。1

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. 注脚的解释 ↩︎

相关文章:

数据结构基础

将节点构建成树 数据的结构逻辑结构集合线性结构树形结构图状结构 存储结构合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如…...

深度学习中数据处理相关的技巧

文章目录 提取隐蔽特征惰性加载数据集类别分布不均衡 提取隐蔽特征 在某些任务中&#xff0c;一些类别的特征可能相对较为罕见或难以捕捉。由于这些特征在数据集中出现的频率较低&#xff0c;模型可能无法充分学习它们&#xff0c;从而导致对这些类别的辨别能力较弱。为了解决…...

wkhtmltopdf 与 .Net Core

wkhtmltopdf 是使用webkit引擎转化为pdf的开源小插件. 其有.NET CORE版本的组件,DinkToPdf,但该控件对跨平台支持有限 。 是由于各系统平台会产生不同的编译结果,故windows上使用.dll,而Linux上的动态链接库是.so 所以你需要在Linux系统上安装相关wkhtmltox软件。 我这里准备了…...

Linux Mint 21.3 计划于 2023 年圣诞节发布

Linux Mint 项目近日公布了基于 Ubuntu 的 Linux Mint 发行版下一个重要版本的一些初步细节&#xff0c;以及备受期待的基于 Debian 的 LMDE 6&#xff08;Linux Mint Debian Edition&#xff09;版本。 近日&#xff0c;Linux Mint 项目负责人克莱门特-勒菲弗&#xff08;Clem…...

腾讯云3年轻量应用服务器2核4G5M和2核2G4M详细介绍

腾讯云轻量应用服务器3年配置&#xff0c;目前可以选择三年的轻量配置为2核2G4M和2核4G5M&#xff0c;2核2G4M和2核4G5M带宽&#xff0c;当然也可以选择选一年&#xff0c;第二年xufei会比较gui&#xff0c;腾讯云百科分享腾讯云轻量应用服务器3年配置表&#xff1a; 目录 腾…...

rabbitmq中的消息确认

如何保证消息被全部消费 应用场景&#xff1a;我们不想丢失任何任务消息。如果一个工作者&#xff08;worker&#xff09;挂掉了&#xff0c;我们希望任务会重新发送给其他的工作者&#xff08;worker&#xff09;。 为了防止消息丢失&#xff0c;RabbitMQ提供了消息响应&…...

jenkins一键部署github项目

个人目前理解jenkins部署分为两步&#xff1a; 构建项目&#xff0c;如生成jar自动执行sh脚本 如果没有jenkins&#xff0c;我们可能需要将jar移动到服务器&#xff0c;然后执行java -jar跑程序&#xff0c;jenkins可以替代我们执行这些东西&#xff0c;下面从0开始&#xff0…...

岩土工程安全监测隧道中使用振弦采集仪注意要点?

岩土工程安全监测隧道中使用振弦采集仪注意要点&#xff1f; 岩土工程的安全监测是非常重要的&#xff0c;它可以帮助工程师及时发现可能存在的问题&#xff0c;并及时解决&#xff0c;保障施工进度以及施工质量&#xff0c;保障工程的安全运行。其中&#xff0c;振弦采集仪是…...

第四章nginx组件精讲

nginx配件location匹配的规则和优先级&#xff08;重点面试题&#xff09; RUI&#xff1a;统一资源标识符&#xff0c;是一种字符串标识&#xff0c;用于标识抽象的或者物理资源&#xff08;文件&#xff0c;图片&#xff0c;视频&#xff09; nginx当中&#xff1a;uri ww…...

LlamaGPT -基于Llama 2的自托管类chatgpt聊天机器人

LlamaGPT一个自托管、离线、类似 ChatGPT 的聊天机器人&#xff0c;由 Llama 2 提供支持。100% 私密&#xff0c;不会有任何数据离开你的设备。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 1、如何安装LlamaGPT LlamaGPT可以安装在任何x86或arm64系统上。 首先确保…...

常见的跨域解决方案

常见的跨域解决方案&#xff1a; 跨域问题可以分为两种情况&#xff1a;前端跨域和后端跨域。以下是针对这两种情况的跨域解决方案&#xff1a; 前端跨域解决方案&#xff1a; JSONP&#xff1a; 适用于前端向不同域名下的服务器请求数据&#xff0c;通过添加回调函数名称来…...

分布式websocket解决方案

1、websocket问题由来 websocket基础请自行学习,本文章是解决在分布式环境下websocket通讯问题。 在单体环境下,所有web客户端都是连接到某一个微服务上,这样消息都是到达统一服务端,并且也是由一个服务端进行响应,所以不会出现问题。 但是在分布式环境下,我们很容易发现…...

奥威BI财务数据分析方案:借BI之利,成就智能财务分析

随着智能技术的发展&#xff0c;各行各业都走上借助智能技术高效运作道路&#xff0c;财务数据分析也不例外。借助BI商业智能技术能够让财务数据分析更高效、便捷、直观立体&#xff0c;也更有助于发挥财务数据分析作为企业经营管理健康晴雨表的作用。随着BI财务数据分析经验的…...

Android12之com.android.media.swcodec无法生成apex问题(一百六十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

Xcode build和version

参考 一个叫做Version&#xff0c;一个叫做Build&#xff0c;&#xff08;version是版本号&#xff0c;build是打正式包每次Archive时的都增加的值&#xff09;这两个值都可以在Xcode中选中target&#xff0c;点击“Summary”后看到。 Version在plist文件中的key是“CFBundleSh…...

前端面试:【原型链】代码世界的家族传承

嗨&#xff0c;亲爱的代码探险家&#xff01;在JavaScript的奇妙世界里&#xff0c;有一个令人惊叹的概念&#xff0c;那就是原型链。这个概念就像是代码世界的家族传承&#xff0c;允许对象之间分享属性和方法&#xff0c;让你的代码更加高效和灵活。 1. 什么是原型链&#xf…...

2D应用开发是选择WebGL 还是选择Canvas?

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 在介绍WebGL和Canvas的区别和联系之前&#xff0c;需要先了解它们各自的定义和特点。 WebGL是一种基于标准HTML5的技术&#xff0c;用于在Web浏览器中实时渲染3D图形。它是由Khronos Group开发的一套…...

Android Framework 常见解决方案(20)UDP广播无效问题

1 现象描述和原理解读 该问题同时存在于android App和Framework系统中。最终效果是在Android系统中直接使用UDP广播无效&#xff0c;有意思的是有的android系统可以&#xff0c;有的Android 系统不行。然而该部分代码自己在Linux上测试时是有效的&#xff0c;代码不变&#xf…...

VINS-Mono中的边缘化与滑窗 (4)——VINS边缘化为何是局部变量边缘化?

文章目录 0.前言1.系统构建1.1.仿真模型1.2.第一次滑窗优化1.3.第二次全局优化 2.边缘化时不同的舒尔补方式2.1.边缘化时舒尔补的意义2.2.不同的边缘化方式 3.边缘化时不同的舒尔补方式实验验证3.1.全局schur的操作方式3.2.VIO或VINS中局部边缘化的方式3.3.两种方式和全局优化方…...

真·VB.NET彻底释放Interop.Excel对象

使用 Microsoft.Office.Interop.Excel 虽然有速度慢的缺点&#xff1b;但是作为自带引用&#xff0c;兼容性最好&#xff0c;而且是COM对象模型也很熟悉(Excel里直接录个宏&#xff0c;很方便把VBA代码转成VB.NET)。所以处理几百上千条的小数据时还是很方便的。 而 Microsoft.…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...