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