
数据结构
文章平均质量分 88
dev晴天
接下来需要花一段时间把博客重新整理下,重新巩固下知识点,,,,加油!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构#哈希表
HashTabble基础 啥是哈希函数? 数组的查询、修改时间复杂度为O(1),若是物体的属性间存在映射关系,则可以借鉴数组的优势把“键”转化为数组的索引这就是哈希函数要做的事情。 从生活中的“键”转化为索引引起的思考 假如一个班级有30名学生,学号为1-30。这时可以以学号减一作为数组的索引即可顺利存储30名学生的信息,这样的从“键”转化为索引的方式还是相对简单的。 不过大多数情况下我们处理的数据都比较复杂,如我们对居民的信息感兴趣,居民的唯一识别标识可能是身份证号(18位的数字)由于身份证的数字太大了超原创 2022-05-06 19:50:22 · 938 阅读 · 0 评论 -
数据结构之字典树(Trie)
字典树又叫前缀树,一种专门针对字典设计的数据结构,通常使用这种数据结构来处理字符串。 知识点 产生背景 假如有n个单词,放入map中(底层以树实现)搜索时时间复杂度为o(logn)假如有100万个单词logn 大约为20,而字典树这种数据结构做到了与个数n无关,只与单词的个数有关,单词有几个字母,时间复杂度就是几。优于单词的字母一般都是20以内,大大提高了效率。 设计推导 1、字典树 1、字典树是一个多叉树,树的内部存储了每个单词的字母。 2、我们可以设计如下节点从根节点开始,每个节点都有26个.原创 2020-08-29 18:40:39 · 503 阅读 · 0 评论 -
数据结构之线段树(SegmentTree)
线段树是一种高级的数据结构,一般我们根本接触不到他,然而他的出现解决了特定的问题。这种数据结构的设计还是值得我们学习的。 目录 一、分析与拓展 1、线段树的设计栗子 假如给定数组A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7] 这些数组用区间表示可为A[0…7],则我们可以吧这些元素使用线段树形式表示。 待续!!! ...原创 2020-08-19 21:36:14 · 369 阅读 · 0 评论 -
数据结构之Set和Map的简单实现
Set与Map是 javaSE api中的两个重要接口,Set中元素的不重复性,Map中存放Key value,今天我们就先简单的实现下这两种数据结构。(至于TreeMap,TreeSet什么底层使用平恒二叉树了我们以后再实现) 声明本文的实现借助了链表二分搜索树这两种数据结构。 参考文章:数据结构之二分搜索树(BST) 参考文章:数据结构之链表 项目参考:DataStructure看这个也...原创 2019-03-07 18:46:48 · 373 阅读 · 0 评论 -
数据结构之堆(最大堆)
堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。接下来我们就探讨下常见的堆,最大堆。 要点 一、 二叉树补充 满二叉树:除了孩子节点其他的节点左右孩子都不为空。(如下图) 完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。 完全二...原创 2019-03-09 16:32:58 · 2610 阅读 · 0 评论 -
数据结构之二分搜索树(BST)
树是一种十分重要的数据结构,树的设计来源生活,生活中就处处可见(如下图),由于树的天然组织结构,在处理数据上可以达到高效,所以我们有必要学习一下树,本文主要介绍二分搜索树(binary search tree)。 要点 树科普 如上图:这是我们见得典型的树结构 --------二叉树。 二叉树的性质: 1 根节点 唯一 2 每个节点最多有两个孩子 3 每个节点最多只有一个父亲节点 叶子...原创 2019-02-19 17:12:19 · 428 阅读 · 0 评论 -
数据结构之链表
我们经常会使用到动态数组为底层封装的数据结构,比如ArrayList,然而其底层真是动态的吗?其实动态数组的内部是通过一个“resize”方法进行的处理,算不上真正的动态,接下来我们就来探究下真正的动态数据结构基础–链表。 要点 链表基础 概念: 通过节点存储数据,通过节点内的节点引用使节点间联系起来形成一条链。 节点介绍: Node{ E e;// 泛型成员 Node next; } ...原创 2019-02-10 14:59:15 · 394 阅读 · 0 评论 -
数据结构之栈
我们都知道栈是一种比较重要的数据结构然而他重要在哪呢?有何用处?如何设计我们自己的栈?本章将会探究解开栈的神秘面纱。 本文要点 了解栈 1 概念: 一种后进先出(LIFO)的数据结构,属于线性数据结构。 2 特点: 其实相对于数组来说栈操作的是数组的子集。只需要对数组添加约束便形成栈的特有功能。 添加约束: 1 规定只能向栈的末尾添加元素 2 规定只能从栈的末尾(栈顶)取出元素 ps:通...原创 2019-02-05 17:34:20 · 205 阅读 · 0 评论 -
数据结构之队列
“后进先出”,“先进先出“ 我们经常会听见这两句。然而这两句话代表了两种不同的数据结构,前者我们已经熟悉,接下来我们就探究一下后者。 要点 一、队列(以数组队列为例) 概念: 队列是一种先进先出(FIFO)的数据结构。 特点: 队列内的数据,先入队的取元素时先出去(参考下生活实例图理解)。 与栈的区别(模型) 表面区别 1 相同之处 :规定好首端尾端后,都是把数据添加到尾端(没有数据时默认...原创 2019-02-07 12:37:58 · 199 阅读 · 0 评论 -
数据结构#递归
经常会听到递归的概念,然而什么是递归呢?程序调用自身的编程技巧称为递归( recursion),百度上有这样一句定义,言简意赅,但是“递归”这个东西想要灵活运用,还真不好说。 要点 概念 递归:程序调用自身的编程技巧称为递归( recursion) 递归本质:原来的问题转化为同一的更小的问题 案例引申 demo1、 数组求和之递归 题目:给定数组有n个元素,求这n个元素的和 分析:看过题...原创 2019-02-15 16:47:24 · 285 阅读 · 0 评论 -
数据结构#数组
前言 写过一些程序,搞过一些项目我们或许会发现,数组其实还是很牛逼的,Java中的集合框架就是用到了数组的封装,比如Arraylist使用到了Object数组作为底层进行了封装,再比如String这个类底层使用了char数组进行了封装,这些东西在我们开发中可谓是屡见不鲜。俗话说万丈高楼平地起,数组作为这些东西的基石我们有必要来探索下。(以下都是围绕自定义数组来搞事的) 探究内容 科普 数组...原创 2019-02-01 19:53:10 · 369 阅读 · 0 评论 -
数据结构#前言
为什么要学数据结构: 计算机专业的同学都知道数据结构是十分重要的学科,他的重要性毋庸置疑,考研需要,然而当你想阅读一些框架的源代码时,缺少它你或许理解的不够透彻。当然通往高级程序员甚至架构师大佬的道路,这些知识也是必须掌握的(出来混迟早要还的哈哈)。 研究内容 数据结构研究的是数据如何在计算机中进行组织和存储,使我们可以高效的获取数据或者修改数据。 数据结构分类 数据结构的应用举例 1 数据库 ...原创 2019-02-01 16:18:33 · 249 阅读 · 0 评论