前言 前面讲了数据结构中最常用、最基础的数组,接下来说一说数据结构中另一个比较基础比较常用的数据结构——链表,相比于数组来说,链表更为复杂一点,在理解和实现上都比较困难。 数组与链表对比 首先数组必须是一段连续的内存空间来进行存储的,即使剩余的内存碎片整合在一起大于所需要
写在前面 这两个东西其实并没有什么联系,但是因为都是由 @dd_d 首创的,所以写在一起。 Update:不想新开博客了,所以以后 dd_d 有什么新发明就直接在这里更新了。 港队线段树 这是一种高效且简便好写的优秀线段树( 由香港队长发明的 ),拥有良好的均摊复杂度。 在同时需要记录多个标
集训总结 收获 学习了一些从未接触的数据结构:线段树, 树状数组, 单调栈, 单调队列可以实现一些基本操作,但与灵活运用还有一定距离,也无法与其他算法相结合使用 提升了图论的掌握水平,学习到了一些技巧,例如在涉及到图的变化时我们可以多建一部分图来存储变化的部分例,还学习了 lca
队列的实现 和栈的实现相似,但是这里使用对象的方式,对象的key是数字的实现,类似数组。 /** * 队列 */ class Queue { #count = 0; //队列最大数量 #lowestCount = 0; //目前第一个元素的下标 #items = {}; //队列 constructor() { } //增加元素 enqueue(element)
字典,又称为符号表、关联数组或映射,是一种用于保存键值对的抽象数据结构。在字典中,一个键可以和一个值进行关联,这些关联的键和值称为键值对。键值对中键是唯一的,我们可以根据键key通过映射查找或者更新对应的值value。 很多高级开发语言有对应集合支持字典这种数据结构,比如Java
有时候想往mysql 或者 redis数据库存点数据结构。尤其是redis,尽量把大块数据打包存起来,减少set 和 get数据次数。再说远点,对分布式数据同步也是有很大的好处。 下面简单介绍一下Java中怎么将一大块数据结构打包存进数据库中。我们将会借用一个桥梁:JSON抽象类 打包数据结构: privat
近半年一直在搞Qt图形界面这一块,体会最深的就是造轮子很重要,一点是因为在造轮子时候可以体会到轮子是怎么运转,第二点是造轮子可以减少关键技术上被卡脖子的风险,拿来主义是不错,但伴随着风险。 第二点就是不要急燥,走急于求成的路线,很多时候做出来只是说明我们工具会用了,会
简介 在二叉树中的叶子结点存在两个左右子树为空的指针域,对于有n个结点的二叉树,就有n+1个空指针域。如果将这些空指针域存放某种遍历次序下该节点的前驱结点和后继节点,则将这些指针的指向称为线索,加上线索的二叉树称为线索化二叉树 例如下图的二叉树中前序遍历结果为 1,3,8,10,6,
一. 概述 数据结构是相互之间存在一种或多种特定关系的数据元素集合 主要包括三个方面:逻辑结构、存储结构和数据的运算 算法的设计取决于逻辑结构,而其实现依赖于存储结构 逻辑结构 线性结构:线性表 非线性结构:集合、树、图 存储结构 顺序存储:逻辑上相邻的元素,物理位置上也相邻,存
题目路径 最小路径和 题目描述 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例1: 输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→3→1→1→1 的总和最小。 题解
题目链接 斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。 斐波那契数列是一个满足 \(fib(x)= \begin{cases} 1 & \text{ if } x= 1,2\\ fib(x-1)+fib(x-2) & \text{ if } x>2 \end{cases}\) 的数列。 数据范围:\(1\le
Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来,享有数据分析“三剑客之一”的盛名(NumPy、Matplotlib、Pandas)。Pandas 已经成为 Python 数据分析的必备高级工具,它的目标是成为强大、灵活、可以支持任何编程语言的数据分析工具。 图1:Pandas Logo Pa
数据结构---总结 没写完 1.线性表 顺序表 typedef int ElemenType; typedef struct { ElemenType *data; // 数据域 int length; }Node; // 顺序表初始化 void InitNode(Node *t){ t->data = (Node *)malloc(sizeof(Node) * 100); if(t->data == NULL) exit(0);
简介 散列表(也称哈希表),是根据关键码值(key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表 它可以快速的进行插入、查找、删除操作,无论数据量有多大,它都能把插入、
在学习数据结构之前,先复习了C语言,凭借着大一较好的基础,复习起来还是很顺利的。尤其是当初并没有学明白的指针部分,现在已经很通透了。其次是通过这次的学习,对于C语言的许多细节处也有了很好的掌握,而且对于C语言的原理也有了一定的了解,不得不说翁凯老师讲的真的非常好。 以下是两个
目录算法和数据结构是编程的灵魂计划语言范围题目来源归档 算法和数据结构是编程的灵魂 算法和数据结构是编程的灵魂,我们需要奠定好基础,才能更好地产出优质、可靠的工程代码。 计划 语言 主要以Go语言为主,有必要的话,也会使用C语言,或者是Python 范围 按标签来,优先算法,其次数据结构
【注意】不要死记结论,理解推导过程及其背后的思路更重要! 目录1 树的性质1.1 非平凡树的性质1.2 非空二叉树的性质1.3 完全二叉树的性质1.4 森林的性质1.5 树、二叉树、森林的遍历性质2 图的性质2.1 无向图的性质2.2 有向图的性质2.3 存储结构的性质 1 树的性质 1.1 非平凡树的性质
根据先序和中序构建二叉树 测试样例: 先序:3,9,20,15,7 中序:9,3,15,20,7 结果:3,9,20,null,null,15,7 二叉树结构: public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }
楔子: 数据结构包括线性结构和非线性结构。 1、线性结构: 1) 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 2) 线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的 3)
题单:LeetCode链表 2. 两数相加 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *
数据结构 存储结构 线性结构 数组(顺序表) 队列 栈 堆 链表 非线性结构 树 图 hash表 数组 声明数组的方式 1,用[]声明数组 var arr = [ ] 2用new关键字声明 var arr = new Array( ) //括号内不写表示数组长度为0,写一位表示长度,写多位表示数组
简介 二分查找又称折半查找、二分搜索、折半搜索等,是在分治算法基础上演变的查找算法 二分查找算法仅适用于有序序列,它只能用在升序序列或者降序序列中查找目标元素 二分查找局限性 依赖数组结构 二分查找需要利用下标随机访问元素,如果使用链表等其他数据结构则无法实现二分查
简介 基数排序是这样一种排序算法,可以从低位(个位)开始,根据个位数排序一次,然后根据十位数排序,再根据百位数进行排序……最终完成整个数组的排序 对于十进制数而言,每一位只会是 0~9 这十个数字,通常使用桶排序(计数排序)来完成每一位数的排序 此种排序一般适用于记录的关键字为整数类型
一、数据结构 个人理解:数据结构的释义,我觉得重点是在结构上,单纯的数据当然也只是数据,但是,如果按照结构内的规则去构造这些数据,并且根据其结构所衍生的算法对数据进行操作,这些数据就会呈现更多形态。有时候我会考虑,数据结构是通过数据填充结构,还是使用数据构造结构,我想应该是后者,因
以前一直对于多个懒标记下传的优先级问题不解,几天前看了某位国集大佬在某谷吹水群的发言恍然大悟。 我们维护多个懒标记,实质上是对于每个 \(x=a_i\) 维护一个 \(f(x)\),所以我们只需写出这个 \(f(x)\),在加标记时观察一下式子 怎么变化,维护相应变化即可。 比如加法和乘法懒标记,实际