• 八、数据结构


    数据结构:

      数据元素的集合(数据对象)及元素间的相互关系(逻辑结构)、构造方法

      目标:学会从问题出发,分析、研究计算机加工的数据结构的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储结构、相应的操作方法,为提高用计算机解决问题的效率服务。

      是算法设计的基础。

      按逻辑关系分类:线性结构、非线性结构(树结构、图结构)  

    1.线性结构

      对客观世界中具有单一的前驱、后继的数据关系进行描述

      特点:数据元素之间呈现一种线性关系,即元素"一个接一个地排列"

      存储方法:

        1.顺序存储:用一组地址连续的存储单元依次存储线性表中的数据元素

        

        插入时移动的概率:

        删除时移动的概率:

        2.链式存储:用节点来存储数据元素

        节点:。数据域:存储数据元素的值;指针域:指针,链。存储直接前驱、直接后继的信息

        不能对数据随机访问,但是插入、删除不需要移动元素

        分类:线性链表、双向链表、循环链表、静态链表

        线性链表:单链表。节点中只有一个指针域

        添加、删除:

          示例:

        

        

        

        

        

      栈:“后进先出”。只能通过访问它的一端(栈顶)来实现数据存储、检索的一种线性数据结构

        相关概念:栈底、空栈

        存储结构:

        1.顺序存储:预先定义,容量有限,插入需判断是否栈满

        2.链式存储:不必设置头节点,链表的头指针就是栈顶指针

        

      队列:“先进先出”。只允许在表的一端(队尾)插入元素,另一端(队首)删除元素

         存储结构:

        1.顺序存储:预先定义,容量有限,插入需判断队尾指针是否到达上限。

          队列空、满,队头、队尾都指向相同的位置,区分?:1.设置标志位,指示队列空?满?2.牺牲一个存储单元,约定以“队尾指针所指的位置的下一个位置是队头指针”,表示队满

        

        

        2.链式存储:链队添加一个头节点,并另头指针指向队头

          队列空、满,队头、队尾都指向相同的位置,区分?:头指针和尾指针的值相同,且均被头节点指向,则为空

        

        示例:

        

        

       串(字符串):一种特殊的线性列表,数据元素为字符。

        仅由字符构成的有序序列,是取值范围受限的线性表

        相关概念:空串、空格串、字串、串相等、串比较(ASCII码值比较,第一个值开始比较,相等则继续比较第二个值)

        存储结构:

        1.定长存储:静态存储、顺序存储。可事先定义存储空间,也可根据串长的需要动态申请字符串的空间

        2.链式存储:每个节点可以存储一个字符、多个字符。节点大小决定对串的处理效率

        匹配模式:子串的定位操作

        1.朴素的模式匹配算法:布鲁特-福斯算法。从第一个位置比较,相等,则逐字对后续字符比较。不等,则从第二个位置比较。

        

        最好情况下匹配:,时间复杂度 O(m+n)

        最坏情况下匹配:,时间复杂度 O(m*n),因为n>>m

        2.改进的模式匹配算法:KMP算法。匹配结果不相等,不需要回溯主串的字符位置指针,而是利用已经得到的“部分匹配”结果,将其向右“滑动”尽可能远的距离,再继续进行比较 

        原理:一句模式串的next函数值实现子串的滑动。若next[j]=k,表示当模式串中的Pj与主串中相应的字符不想等时令模式串的Pk与主串的相应字符进行比较。

        

        示例:

        ????

        

        

    2.数组、矩阵、广义表

    数组:定长线性表在维数上的扩张,即线性表中的元素又是一个线性表。n维数组是一种“同构”的数据结构,其每个数据元素类型相同,结构一致

      特点:

      1.数目固定,一旦定义了一个数组结构,就不再有元素个数的增减变化。

      2.数据元素具有相同的类型

      3.数据元素的下标关系具有上下界的约束且下标有序

      存储:顺序存储

        why:数组一般不做插入、删除运算,一旦定义,数据个数、元素间关系不再发生变动。

        how:计算机内存结构是一维线性的,因此多维数组必须今年习惯降维处理,将数组元素排列成一个线性序列

          一旦确定了维数、各维长度,便可为它分配存储空间

          存储结构:以行为主序,以列为主序

          

          a[m,n]的存储地址计算:

    矩阵:

      为了节省存储空间,可以对矩阵进行压缩:多个值相同的元素只分配一个存储单元,对0不分配存储单元

      分类:

      1.特殊矩阵:矩阵中元素的分布有一定的规律。

      包括:对称矩阵、三角矩阵、对角矩阵……

      n阶对称矩阵:n²个元素存放在 n(n+1)/2 个元素udall存储空间中

        (1<=k<=n(n+1)/2)

      对角矩阵:所有非0元素都集中在以主对角线为中心的带状区域中,其余元素都为0

           (1<=k<=3n-2)  ???

      2.稀疏矩阵:非0元素的的个数远远少于0元素的个数,且非0元素的分布没有规律

        常用的顺序存储结构:三元组顺序表

        常用的链式存储结构:十字链表

        

        三元组表:

    广义表:由0个或多个单元素或子表组成的有限序列。是线性表的推广

      表头:非空表的第一个元素

      表尾:除表头外,其余元素构成的表

      特点:

      1.多层次结构。元素的可以是子表,子表的元素还可以是子表

      2.可被其他广义表共享。元素可以是已经定义的广义表的名字

      3.一个递归的表。元素可以是本广义表的名字

      存储结构:链式存储结构

        why:元素本身又可以具有结构,是一种带有层次的非线性结构

        

    树:非线性结构

      递归的(元素可由子树构成,子树又更小的子树构成)

      元素间有明显的层次关系

      凡是分等级的分类方案都可以用具有严格层次关系的树结构来描述。

      

      二叉树:树节点最大度为2。要区分左子树、右子树

        

        

        存储结构:

        1.顺序存储:多用于完全二叉树。

        一般二叉树也要完全按照完全二叉树的形式存储,因此要添加许多并不存在的“虚结点”,造成空间浪费

        

        2.链式存储:三叉链表、二叉链表

        

        遍历:先序、中序、后序。

          树中每个节点,且仅访问一次。

          对一个非线性结构进行线性化的过程

        

        

        时间复杂度O(n)

        借助一个栈,可将二叉树的递归遍历算法转换为非递归算法

        

        

        层序遍历

        

      线索二叉树:在每个节点中增加两个指针来存放前驱、后继信息。缺点:降低存储空间的利用率

        why:二叉链表存储结构中,只能找到一个节点的左、右孩子,不能直接得到节点在任一遍历序列中的前驱、后继,这些信息只有在遍历的动态过程中才可以得到。

        

        

        

        

          

      

    3.树

    4.图

    5.查找

    6.排序

  • 相关阅读:
    MSSQL Rebuild(重建)索引
    网络爬虫原理
    Twitter Storm:单机环境的安装与配置
    1079 回家
    Win2003 Server磁盘配额揭密之补遗篇
    Win2003 Server磁盘配额揭密之启用篇
    编译mapnik(win7 环境下vs2008编译mapnik 0.7.1 成功)
    Writing a Windows Shell Extension(marco cantu的博客)
    Android学习之一:Cygwin简介
    Linux 进程间通信(一)
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/5709646.html
Copyright © 2020-2023  润新知