数据结构

数据结构与算法知识点总结(4)各类排序算法

1. 插入排序 1.1 直接插入排序 直接插入排序的特点: 时空效率: 时间复杂度为O(n^2),空间复杂度为O(1)。最好情况下是元素基本有序,此时每插入一个元素,只需比较几次而无需移动,时间复杂度为O(n) 稳定性: 保证相等元素的插入相对位置不会变化,稳定排序 void insertion_s ... »

数据结构 - AVL 树

简介 基本概念 AVL 树是最早被发明的自平衡的二叉查找树,在 AVL 树中,任意结点的两个子树的高度最大差别为 1,所以它也被称为高度平衡树,其本质仍然是一颗二叉查找树。 结合二叉查找树,AVL 树具有以下特性: 若任意结点的左子树不为空,则左子树上所有结点的值均小于它的根结点的值 若任意结点的右 ... »

二叉树与堆

树 树的定义 树是一种数据结构,树结构只有一个根节点,除根节点外,其余节点被分成M(M>0) 个互不相交的集合T1,T2,T3,......,Tm. 其中每一个集合Ti(1 < i < m)又是一颗与树结构类似的子树。每个子树的根节点有且只有一个前驱,可以有0个或多个后继。因此,树是递归定义的。 如 ... »

最长递增子序列

作者:Grey 原文地址: 最长递增子序列 问题描述 LeetCode 300. 最长递增子序列 说明:这里的递增指的是严格递增,相等的时候不算递增。 暴力解法 dp[i]表示: 必须以i位置结尾的最长递增子序列是多少,如果求出了每个位置的dp[i]值,最大的dp[i]值,就是最长递增子序列的长度 ... »

共读《redis设计与实现》-数据结构篇

准备将之前攒下的书先看一遍,主要是有个大概的了解,以后用的时候也知道在哪里找。所以准备开几篇共读的帖子,激励自己多看一些书。 Redis 基于 简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合等基础的数据结构,创建了一个对象系统,这个对象系统包含:字符串对象(String)、列表对象(L ... »

自底向上:从可变对象、不可变对象到深浅拷贝再到数据结构

一、不可变对象和可变对象** Python 在 heap 中分配的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的内容是可变的,例如 list。而不可变的对象则相反,表示其内容不可变。 不可变对象 :int,string,float,tuple -- 可理解为C中,该参数为值传递 可变对 ... »

cs-markdown10086

数据结构 - 跳表

简介 有序的数组可以使用二分查找的方法快速检索一个数据,但是链表没有办法使用二分查找。 对于一个单向链表来说,即使链表中存储的是有序的数据,但如果想要从中查找某个数据时,也只能从头到尾遍历链表,其时间复杂度是 \(O(n)\)。 为了提高链表的查询效率,使其支持类似“二分查找”的方法,对链表进行多层 ... »

数据结构之堆 → 不要局限于堆排序

开心一刻 一天,一个演讲老师正在演讲正确的爱情观 情到深处,老师激动的说道:你一个月挣三千,凭什么让一个月挣三万的人喜欢你? 结果底下站起来一个女孩,说道:因为我骚呀 堆结构 定义:堆就是用数组实现的完全二叉树,并且根据堆属性来排序,决定节点在树中的顺序 信息量是不是有点大? 欸,有这些疑问就对了, ... »

使用加强堆结构解决topK问题

作者:Grey 原文地址: 使用加强堆结构解决topK问题 题目描述 LintCode 550 · Top K Frequent Words II 思路 由于要统计每个字符串的次数,以及字典序,所以,我们需要把用户每次add的字符串封装成一个对象,这个对象中包括了这个字符串和这个字符串出现的次数。 ... »

Java-学习路线

有不足或者问题大家可以在评论中留言,谢谢大家。 以 Java 后端为主,扩展/基础 部分可以根据需要自行调整顺序。 初学者强烈建议先阅读计算机体系部分!! 人都有一个遗忘规律,很多时候我们都是在和遗忘做斗争。欢迎大家友善的交流。 博客文章分类:https://www.cnblogs.com/zwtb ... »

zwtblog

数据结构——堆

堆 堆的概念 堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象,即是一种顺序储存结构的完全二叉树。1 提示:完全二叉树 完全二叉树:对一棵深度为k、有n个结点二叉树编号后,各节点的编号与深度为k的满二叉树相同位置的结点的编号相同,这颗二叉树就被称为完全二叉 ... »

如何在 Java 中实现 Dijkstra 最短路算法

定义 最短路问题的定义为:设 \(G=(V,E)\) 为连通图,图中各边 \((v_i,v_j)\) 有权 \(l_{ij}\) (\(l_{ij}=\infty\) 表示 \(v_i,v_j\) 间没有边) ,\(v_s,v_t\) 为图中任意两点,求一条道路 \(\mu\),使得它是从 \(v_ ... »

zhiyiYo Java

数据结构与算法知识点总结(1)数组与链表

1. 动态数组 它的基本思路是使用如malloc/free等内存分配函数得到一个指向一大块内存的指针,以数组的方式引用这块内存或者直接调用动态数组的接口,根据其内部的实现机制自行扩充空间,动态增长并能快速地清空数组,对数据进行排序和遍历。 它的数据结构定义如下: typedef struct { v ... »

数据结构笔记——树与二叉树

好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star ⭐⭐⭐⭐⭐转载请注明出处:https://blog.csdn.net/weixin_43461520/article/details/124003408 5. ... »

如何在 Java 中实现最小生成树算法

定义 在一幅无向图 \(G=(V,E)\) 中,\((u, v)\) 为连接顶点 \(u\) 和顶点 \(v\) 的边,\(w(u,v)\) 为边的权重,若存在边的子集 \(T\subseteq E\) 且 \((V,T)\) 为树,使得 \[ w(T)=\sum_{(u,v)\in T}w(u,v ... »

zhiyiYo Java

二维数组与稀疏数组的互转

二维数组与稀疏数组的互转 转换思路 二维数组转稀疏数组的思路: 遍历原始的二维数组,得到有效数据的个数sum,根据sum就可以创建稀疏数组sparseArr int[sum+1][3] 将二维数组的有效数据存入到稀疏数组 稀疏数组转原始的二维数组的思路: 先读取稀疏数组的第一行,根据第一行的数据,创 ... »

H-scholar

线性表(python实现)

线性表 1 定义 ​ 线性表是由 $n(n>=0)$个数据元素(节点)\(a1、a2、a3、…、an\) 成的有限序列。该序列中的所有节点都具有相同的数据类型。其中,数据元素的个数 \(n\) 称为线性表的长度。 当n=0时,称为空表。当n>0时,为非空的线性表,记作(a1,a2,…,an)。 线性 ... »