精华内容
下载资源
问答
  • 常用的数据结构有哪些
    2019-12-12 17:18:35

    1. 常见的数据结构有哪些?

    1.1 数组

    数组是最常用的数据结构,数组的特点是长度固定,可以用下标索引,并且所有的元素的类型都是一致的数组常用的场景有:从数据库里读取雇员的信息存储为 EmployeeDetail[ ];把一个字符串转换并存储到一个字节数组中便于操作和处理等等。尽量 把数组封装在一个类里,防止数据被错误的操作弄乱。另外,这一点也适合其他的数据结构。

    1.2 栈

    栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。

    java中的new出来的对象存储在栈中, 但是对应的地址值在堆中.

    1.3 堆

    堆是一种比较特殊的数据结构,可以被看做一棵树的数组对象,具有以下的性质:

    • 堆中某个节点的值总是不大于或不小于其父节点的值;
    • 堆总是一棵完全二叉树。

    1.4 队列

    队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。从一端放入元素的操作称为入队,取出元素为出队.

    1.5 链表

    链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。

    • 链表的优点:
      链表是很常用的一种数据结构,不需要初始化容量,可以任意加减元素;
      添加或者删除元素时只需要改变前后两个元素结点的指针域指向地址即可,所以添加,删除很快;
    • 缺点:
      因为含有大量的指针域,占用空间较大;
      查找元素需要遍历链表来查找,非常耗时。
    • 适用场景:
      数据量较小,需要频繁增加,删除操作的场景

    1.6 树

    树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

    • 每个节点有零个或多个子节点;
    • 没有父节点的节点称为根节点;
    • 每一个非根节点有且只有一个父节点;
    • 除了根节点外,每个子节点可以分为多个不相交的子树;
      在日常的应用中,我们讨论和用的更多的是树的其中一种结构,就是二叉树。

    1.7 散列表(哈希表)

    散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。

    记录的存储位置=f(key)

    这里的对应关系 f 成为散列函数,又称为哈希 (hash函数),而散列表就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里,这种存储空间可以充分利用数组的查找优势来查找元素,所以查找的速度很快。

    哈希表在应用中也是比较常见的,就如Java中有些集合类就是借鉴了哈希原理构造的,例如HashMap,HashTable等,利用hash表的优势,对于集合的查找元素时非常方便的,然而,因为哈希表是基于数组衍生的数据结构,在添加删除元素方面是比较慢的,所以很多时候需要用到一种数组链表来做,也就是拉链法。拉链法是数组结合链表的一种结构,较早前的hashMap底层的存储就是采用这种结构,直到jdk1.8之后才换成了数组加红黑树的结构,

    1.8 图

    图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
    按照顶点指向的方向可分为无向图和有向图

    更多相关内容
  • 数据结构是一门研究非数值计算的程序设 计问题中计算机的操作对家以及它们之间 的关系和操作的学科 2.数据结构研究数据的逻辑结构存储结构 及数据的运算与实现数据项是数据 不可分割的最小单 3.通常设计一个好的算法...
  • java常用数据结构有哪些

    千次阅读 2022-03-31 14:04:18
    Java常见数据结构 这 8 种数据结构什么区别呢? ①、数组 优点: 按照索引查询元素的速度很快; 按照索引遍历数组也很方便。 缺点: 数组的大小在创建后就确定了,无法扩容; 数组只能存储一.

    java数据结构有:1、数组;2、链表,一种递归的数据结构;3、栈,按照“后进先出”、“先进后出”的原则来存储数据;4、队列;5、树,是由 n(n>0)个有限节点组成的一个具有层次关系的集合;6、堆;7、图;8、哈希表。

    本教程操作环境:windows7系统、java8版、DELL G3电脑。

    Java常见数据结构

    这 8 种数据结构有什么区别呢?

    ①、数组

    优点:

    按照索引查询元素的速度很快;

    按照索引遍历数组也很方便。

    缺点:

    数组的大小在创建后就确定了,无法扩容;

    数组只能存储一种类型的数据;

    添加、删除元素的操作很耗时间,因为要移动其他元素。

    ②、链表

    《算法(第 4 版)》一书中是这样定义链表的:

    链表是一种递归的数据结构,它或者为空(null),或者是指向一个结点(node)的引用,该节点还有一个元素和一个指向另一条链表的引用。

    Java 的 LinkedList 类可以很形象地通过代码的形式来表示一个链表的结构:

    public class LinkedList {
    
        transient Node first;
    
        transient Node last;
    
     
    
        private static class Node {
    
            E item;
    
            Node next;
    
            Node prev;
    
     
    
            Node(Node prev, E element, Node next) {
    
                this.item = element;
    
                this.next = next;
    
                this.prev = prev;
    
            }
    
        }
    
    }

     这是一种双向链表,当前元素 item 既有 prev 又有 next,不过 first 的 prev 为 null,last 的 next 为 null。如果是单向链表的话,就只有 next,没有 prev。

     由于不必按照顺序的方式存储,链表在插入、删除的时候可以达到 O(1) 的时间复杂度(只需要重新指向引用即可,不需要像数组那样移动其他元素)。除此之外,链表还克服了数组必须预先知道数据大小的缺点,从而可以实现灵活的内存动态管理。

    有些小伙伴不知道本文内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【000】即可免费获取


    优点:

    不需要初始化容量;

    可以添加任意元素;

    插入和删除的时候只需要更新引用。

    缺点:

    含有大量的引用,占用的内存空间大;

    查找元素需要遍历整个链表,耗时。

    ③、栈

    栈就好像水桶一样,底部是密封的,顶部是开口,水可以进可以出。用过水桶的小伙伴应该明白这样一个道理:先进去的水在桶的底部,后进去的水在桶的顶部;后进去的水先被倒出来,先进去的水后被倒出来。

    同理,栈按照“后进先出”、“先进后出”的原则来存储数据,先插入的数据被压入栈底,后插入的数据在栈顶,读出数据的时候,从栈顶开始依次读出。

     

    ④、队列

    队列就好像一段水管一样,两端都是开口的,水从一端进去,然后从另外一端出来。先进去的水先出来,后进去的水后出来。

    和水管有些不同的是,队列会对两端进行定义,一端叫队头,另外一端就叫队尾。队头只允许删除操作(出队),队尾只允许插入操作(入队)。
     

    ⑤、树

    树是一种典型的非线性结构,它是由 n(n>0)个有限节点组成的一个具有层次关系的集合。 

    之所以叫“树”,是因为这种数据结构看起来就像是一个倒挂的树,只不过根在上,叶在下。树形数据结构有以下这些特点:

    每个节点都只有有限个子节点或无子节点;

    没有父节点的节点称为根节点;

    每一个非根节点有且只有一个父节点;

    除了根节点外,每个子节点可以分为多个不相交的子树。

    下图展示了树的一些术语:

     

     

     

     

     

     

    基于二叉查找树的特点,它相比较于其他数据结构的优势就在于查找、插入的时间复杂度较低,为 O(logn)。假如我们要从上图中查找 5 个元素,先从根节点 7 开始找,5 必定在 7 的左侧,找到 4,那 5 必定在 4 的右侧,找到 6,那 5 必定在 6 的左侧,找到了。

    理想情况下,通过 BST 查找节点,所需要检查的节点数可以减半。

    平衡二叉树:当且仅当任何节点的两棵子树的高度差不大于 1 的二叉树。由前苏联的数学家 Adelse-Velskil 和 Landis 在 1962 年提出的高度平衡的二叉树,根据科学家的英文名也称为 AVL 树。

    平衡二叉树本质上也是一颗二叉查找树,不过为了限制左右子树的高度差,避免出现倾斜树等偏向于线性结构演化的情况,所以对二叉搜索树中每个节点的左右子树作了限制,左右子树的高度差称之为平衡因子,树中每个节点的平衡因子绝对值不大于 1。

    平衡二叉树的难点在于,当删除或者增加节点的情况下,如何通过左旋或者右旋的方式来保持左右平衡。

    Java 中最常见的平衡二叉树就是红黑树,节点是红色或者黑色,通过颜色的约束来维持着二叉树的平衡:

    1)每个节点都只能是红色或者黑色

    2)根节点是黑色

    3)每个叶节点(NIL 节点,空节点)是黑色的。

    4)如果一个节点是红色的,则它两个子节点都是黑色的。也就是说在一条路径上不能出现相邻的两个红色节点。

    5)从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

     

    ⑥、堆

    堆可以被看做是一棵树的数组对象,具有以下特点:

    堆中某个节点的值总是不大于或不小于其父节点的值;

    堆总是一棵完全二叉树。

    将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。

     

    在线性结构中,数据元素之间满足唯一的线性关系,每个数据元素(除第一个和最后一个外)均有唯一的“前驱”和“后继”;

    在树形结构中,数据元素之间有着明显的层次关系,并且每个数据元素只与上一层中的一个元素(父节点)及下一层的多个元素(子节点)相关;

    而在图形结构中,节点之间的关系是任意的,图中任意两个数据元素之间都有可能相关。

    ⑧、哈希表

    哈希表(Hash Table),也叫散列表,是一种可以通过关键码值(key-value)直接访问的数据结构,它最大的特点就是可以快速实现查找、插入和删除。

    数组的最大特点就是查找容易,插入和删除困难;而链表正好相反,查找困难,而插入和删除容易。哈希表很完美地结合了两者的优点, Java 的 HashMap 在此基础上还加入了树的优点。

     

    哈希函数在哈希表中起着⾮常关键的作⽤,它可以把任意长度的输入变换成固定长度的输出,该输出就是哈希值。哈希函数使得一个数据序列的访问过程变得更加迅速有效,通过哈希函数,数据元素能够被很快的进行定位。

    若关键字为 k,则其值存放在 hash(k) 的存储位置上。由此,不需要遍历就可以直接取得 k 对应的值。

    对于任意两个不同的数据块,其哈希值相同的可能性极小,也就是说,对于一个给定的数据块,找到和它哈希值相同的数据块极为困难。再者,对于一个数据块,哪怕只改动它的一个比特位,其哈希值的改动也会非常的大——这正是 Hash 存在的价值!

    尽管可能性极小,但仍然会发生,如果哈希冲突了,Java 的 HashMap 会在数组的同一个位置上增加链表,如果链表的长度大于 8,将会转化成红黑树进行处理——这就是所谓的拉链法(数组+链表)。

    总结:

     有些小伙伴不知道本文内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。

     

    展开全文
  • 常用数据结构有哪些

    千次阅读 2018-12-07 13:27:18
    (1)线性数据结构:元素之间一般存在元素之间存在一对一关系,是最常用的一类数据结构,典型的:数组、栈、队列和线性表。 (2)树形结构:结点间具有层次关系,每一层的一个结点能且只能和上一层的一个结点相关...

    我们之前已经知道,数据结构就是计算机存储,组织数据的方式。我们根据存储方式可将数据结构大概分成图1所示以下几种:

         图1

    (1)线性数据结构:元素之间一般存在元素之间存在一对一关系,是最常用的一类数据结构,典型的有:数组、栈、队列和线性表。

    (2)树形结构:结点间具有层次关系,每一层的一个结点能且只能和上一层的一个结点相关,但同时可以和下一层的多个结点相关,称为“一对多”关系,常见类型有:树、堆。

    (3)图形结构:在图形结构中,允许多个结点之间相关,称为“多对多”关系。

    (4)哈希表结构:称为散列表,是根据关键字值(key value)而直接进行访问的数据结构。也就是说,它通过把关键字值映射到一个位置来访问记录,以加快查找的速度。这个映射函数称为哈希函数(也称为散列函数),映射过程称为哈希化,存放记录的数组叫做散列表。

    不管什么样的数据结构,它们基本上都有如下的基本功能:

      ①、如何插入一条新的数据项

      ②、如何寻找某一特定的数据项

      ③、如何删除某一特定的数据项

      ④、如何迭代的访问各个数据项,以便进行显示或其他操作

    图2所示是各种数据结构的异同,大家先有个印象,后面我会逐一去介绍。

      图2

    注:以上图片来源于网络。

     

    展开全文
  • 前端常用的八种数据结构

    千次阅读 2021-08-25 10:08:36
    数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合。 传统上,我们把数据结构分为逻辑结构和物理结构。 逻辑结构:是指数据对象中数据元素之间的相互关系,也是我们今后最需要关注和...

    数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合

    • 传统上,我们把数据结构分为逻辑结构和物理结构。
    • 逻辑结构:是指数据对象中数据元素之间的相互关系,也是我们今后最需要关注和讨论的问题。
    • 物理结构:是指数据的逻辑结构在计算机中的存储形式。

    1.数组(Array)

    数组是最简单、也是使用最广泛的数据结构。数组是可以在内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。

    • 数组:查询快,增删慢
    • 查询快:数组的地址是连续的,我们通过数组的首地址可以找到数组,通过数组的索引可以快速查找某一个元素
    • 增删慢:数组的长度是固定的,我们想要增加/删除一个元素,必须创建一个新的数组,把原数组的数据复制过来

    2.栈(Stack)

    栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。

    • 栈: 先进后出(入口出口在同一侧)

    3.队列(Queue)

    队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。从一端放入元素的操作称为入队,取出元素为出队。

    • 队列:先进先出(入口出口在两侧,分开的)

    4.链表(Linked List)

    链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。

    5.散列表(Hash)

    散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。

    Hash表是一种特殊的数据结构,它同数组、栈、链表等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。

    哈希表是基于键值对的一种数据存储结构,key值不可以重复,value可以重复,后面添加的重复的key值的时候,会把之前key值对应的value给覆盖掉,JavaScript中的对象具有天然的哈希特性。

    6.树(Tree)

    树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。在日常的应用中,我们讨论和用的更多的是树的其中一种结构,就是二叉树。

    7.堆(Heap)

    堆是一种比较特殊的数据结构,可以被看做一棵树的数组对象,具有以下的性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。

    8.图(Graph)

    图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

    展开全文
  • 数据结构可以从两个方面分析:逻辑结构与物理结构(存储结构)。 其中逻辑结构指的是数据的组织方式,物理结构指的是数据在内存上的存储方式。 逻辑结构分为四种类型:集合结构,线性结构,树形结构,图形结构。 ...
  • Java的数据结构有那些?

    千次阅读 2022-03-29 23:58:26
    顺序储存结构是用数组来保存数据的, 线性表也就是数组的一种特殊储存方式:从头到尾依次储存数据。 下面这种情况就不是线性表 java中以ArrayList为例 数组扩容:ArrayList的底层是Object类的数组,默认
  • 九大常见数据结构

    千次阅读 多人点赞 2020-10-16 14:44:54
    数据结构想必大家都不会陌生,...数据结构种类繁多,本文将通过图解的方式对常用数据结构进行理论上的介绍和讲解,以方便大家掌握常用数据结构的基本知识。 1、数组 数组可以说是最基本最常见数据结构。数组
  • 常见数据结构有哪些?

    千次阅读 2020-06-09 19:01:16
    1.一共八大数据结构分类 1.数组 2.队列 3.链表 i.单链表 ii.双向链表 iii.循环链表 4.树 5.散列表 6.堆 7.栈 8.图 辅助理解 1、详细说下几个数据结构 数组 简单 栈 先进后出 队列 先进先出 链表 ...
  • 编程中五大常用算法..,算法数据结构 五大常用算法
  • java常见数据结构

    2022-05-17 11:43:21
    数据结构
  • 常用数据结构有哪些

    千次阅读 2015-11-29 20:39:33
    线性结构:元素之间存在一对一关系常见类型: 数组,链表,队列,栈,它们之间在操作上有所区别.例如:链表可在任意位置插入或删除元素,而队列在队尾插入元素,队头删除元素,栈只能在栈顶进行插 入,删除操作. 树形...
  • 索引常用数据结构

    2021-12-12 00:22:19
    一文看懂索引常用数据结构:Hash表、B-Tree、B+Tree。mysql为什么使用B+Tree
  • 常见数据结构总结(8种)

    千次阅读 2022-07-05 16:55:34
    常用数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示: 1. 顺序表(数组 Array) 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成...
  • 上次在面试时被面试官问到学了哪些数据结构,那时简单答了栈、队列/(ㄒoㄒ)/~~其它就都想不起来了,今天有空整理了一下几种常见数据结构,原来我们学过的数据结构有这么多~ 首先,先来回顾下C语言中常见的基本数据...
  • 【数据结构】八种常见数据结构介绍

    万次阅读 多人点赞 2021-02-05 13:59:44
    数据结构是计算机存储、组织数据的方式。一种好的数据结构可以带来更高的运行或者存储效率。数据在内存中是呈线性排列的,但是我们可以使用指针等道具,构造出类似“树形”的复杂结构。下面介绍八个常见数据结构
  • 通过上节我们知道,数据结构是学习数据存储方式的一门学科,那么,数据存储方式哪几种呢?本节将对数据结构的学习内容做一个简要的总结。 数据结构大致包含以下几种存储结构: 线性表,还可细分为顺序表、链表、栈...
  • 数据结构是计算机存储、组织数据的方式。对于特定的数据结构(例如数组),有些操作效率很高(读某个数组元素),有些操作效率很低(删除...常用数据结构有:数组、栈、队列、链表、图、树、前缀树、哈希表。 ...
  • 数据结构有哪些

    2019-09-30 18:02:01
    常见数据结构: 数据存储的常用结构:栈、队列、数组、链表和红黑树。 栈: stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其 他任何位置进行添加、查找、删除等...
  • 数据结构:八大数据结构分类

    万次阅读 多人点赞 2018-09-05 18:23:28
    常用数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示: 每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。 1、数组 数组是可以再内存中连续存储多个元素的...
  • 几个常用数据结构

    2015-12-25 23:21:41
    几个常用数据结构封装,Vector List HashSet HashMap Queue
  • 数据结构有什么用? 常见数据结构 栈 队列 数组 链表 红黑树
  • 数据结构:八大常见数据结构

    千次阅读 2019-11-26 14:42:39
    数据结构目录: ...常用数据结构有:数组、栈、队列、链表、树、散列表、堆、图。 一、结构分类: 数据结构大多是以三种分类方式分类,分别是逻辑结构,物理结构,存储结构,一般来讲大多是以逻辑结...
  • 数据结构常用的算法

    千次阅读 2022-07-21 19:12:54
    这可以用递归函数来实现 代码实现: 二、查找算法 1、遍历查找 这种查找方式就是遍历所有元素进行查找,是最常见的也最好理解的查找方式,这我们在之前顺序表、链表之类的数据结构中查找已经经常用到,就是依次与...
  • 常见数据结构类型

    千次阅读 2021-10-08 15:28:55
    常用数据结构可根据数据访问的特点分为线性结构和非线性结构。线性结构包括常见的链表、栈、队列等,非线性结构包括树、图等。如图所示: 数据结构分类 1、数组 数组一般用来存储相同类型的数据,可通过数组名和...
  • 数据结构在实际应用中非常常见,现在各种算法基本都牵涉到数据结构,因此,掌握数据结构算是软件工程师的必备技能。 一、什么是数据结构 数据结构,直白地理解,就是研究数据的存储方式。 我们知道,数据存储只有一...
  • JavaScript中的常见数据结构

    千次阅读 2021-09-27 12:31:30
    JavaScript中的常见数据结构 队列 栈 链表 集合 树 堆
  • C++几种常见数据结构

    千次阅读 2022-07-25 22:26:06
    由于vector是顺序存储结构,所以如果发生了扩容,需要重新申请一块更大的连续内存空间,并将原数据复制过去,所以存储地址可能发生变化。顺序表相邻(逻辑地址相邻)的两个节点,在内存中具有相邻的物理地址。...
  • 整理了一些面试当中遇到的数据结构与算法的常用问题
  • 数据结构是组织数据的方式,以便能够更...Python中常见数据结构可以统称为容器。序列(如列表和元组)、映射(如字典)以及集合(set)是三类主要的容器。线性数据结构分类:栈(stack)--*后出、队列(queue)-*先出、双端...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,795,659
精华内容 718,263
热门标签
关键字:

常用的数据结构有哪些

数据结构 订阅