zoukankan      html  css  js  c++  java
  • 数据结构详解

    前言:平时我们敲代码都会涉及到数据结构,但是真正深入数据结构的时候,又有一种模糊感,下面让我们来详细理解下。

    说到数据结构,我们都会谈到线性结构和非线性结构。

    1.线性结构:是一个有序数据元素的集合。它应该满足下面的特征:

    • 集合中必存在唯一的一个“第一个元素”
    • 集合中必存在唯一的一个“最后的元素”

    • 除最后一元素之外,其它数据元素均有唯一的“后继
    • 除第一个元素之外,其它数据元素均有唯一的“前驱”

    我们知道符合条件的数据结构就有栈、队列和其它。

    2.非线性结构:其逻辑特征是一个节点元素可以有多个直接前驱或多个直接后继。

    那么,符合条件的数据结构就有图、树和其它。

    好了,下面进入正题

    一、数组

    数组是一种线性结构,以十二生肖(鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪)排序为例:如下图

    优点:
      1、存储多个元素,比较常用
      2、访问便捷,使用下标[index]即可访问

    缺点:
      1、数组的创建通常需要申请一段连续的内存空间,并且大小是固定的(大多数的编程语言数组都是固定的),所以在进行扩容的时候难以掌控。
      2、一般情况下,申请一个更大的数组,会是之前数组的倍数,比如两倍。然后,再将原数组中的元素复制过去
      3、插入数据越是靠前,其成本很高,因为需要进行大量元素的位移。

    二、栈

    栈是一种后进先出(LIFO)线性表,是一种基于数组的数据结构。(ps:其实后面讲到的数据结构或多或少有数组的影子)

    说明:
      1、LIFO(Last In First Out)表示后进先出,后进来的元素第一个弹出栈空间。类似于自动餐托盘,最后放上去的托盘,往往先被拿出来使用。
      2、仅允许在表的一端进行插入和移除元素。这一端被称为栈顶,相对地,把另一端称为栈底。如下图的标识。
      3、向一个栈插入新元素称作进栈、入栈或压栈,这是将新元素放在栈顶元素上面,使之成为新的栈顶元素。
      4、从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

      示意图

      

    三、队列

    队列是一种先进先出(FIFO)受限的线性表。受限体现在于其允许在表的前端(front)进行删除操作,在表的末尾(rear)进行插入【优先队列这些排除在外】操作。

      示意图

    四、链表

    链表是由一组节点组成的集合。每个节点都使用一个对象的引用指向它的后继。

    和数组的区别:
      1、链表亦可以存储多个元素,而且存储的元素在内容中不必是连续的空间。
      2、在插入和删除数据时,时间复杂度可以达到O(1)。
      3、在查找元素的时候,还是需要从头开始遍历的,比数组在知道下标的情况下要快,但是数组如果不确定下标的话,那就另说。

      示意图

      

    五、字典

    字典的主要特点是键值一一对应的关系。可以比喻成我们现实学习中查不同语言翻译的字典。
    
    这里字典的键(key)理论上是可以使用任意的内容,但还是建议语意化一点

      示意图

    六、集合

    集合通常是由一组无序的,不能重复的元素构成,一些常见的集合操作。

      示意图

    七、散列表/哈希表

    说明:Hash 表又称散列表,通过把关键字Key 映射到数组中的一个位置来访问记录,以加快查找速度。这个映射函数称为Hash函数,存放记录的数组称为Hash表。

    散列是一种常用的存储技术,散列使用的数据结构叫做散列表/哈希表。 在散列表上插入、删除和取用数据都非常快,但是对于查找操作来说却效率低下,比如查找一组数据中的最大值和最小值。查找的这些操作得求助其它数据结构。

      示意图

    八、树

    树(Tree):n(n >= 0)个节点构成的有限集合。
        1、当`n = 0`时,称为空树。
        2、对任意一棵空树`(n > 0)`,它具备以下性质:
        3、树中有一个称为根(Root)的特殊节点,用`r(root)`表示;
        4、其余节点可分为`m(m > 0)`个互不相交的有限集`T1,T2,…Tm`,其中每个集合本省又是一棵树,称为原来树的子树(SubTree)
    
    注意:
        1、子树之间`不可以相交`;
        2、除了根节点外,每个节点有且仅有一个父节点;
        3、一个`N`个节点的树有`N-1`条边。

      示意图

    九、图

    定义:图由边的集合及顶点的集合组成。

    关于相关术语,请自行查找

      示意图

    以上就是本篇文章的全部内容了,仅供自己学习。

    参考文章:

    作者:嘉明

    来源 | https://github.com/reng99/blogs

  • 相关阅读:
    OAF[1]开发环境的配置
    XAF如何开始学习XAF
    XPO开发指南简要
    XAF 如何使用AlertControl?
    企业邮箱及邮件服务器架设
    Excel的SUM函数9种公式设置
    XAF 如何显示非持久类数据列表
    分上下半月统计 SQL
    XAF中实现类型转换(ValueConverter)
    在XAF中如何自定义用户、角色、权限、资源、事件(复杂权限)
  • 原文地址:https://www.cnblogs.com/chenhaoyu/p/10761678.html
Copyright © 2011-2022 走看看