• 数组


    数组的顺序存储结构 

    由于数组一般不作插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动。因此,采用顺序存储结构表示数组是自然的事了。

    一、一维数组顺序存储结构
    一维数组a[t]是由元素a[0],a[1],...,a[t-l]组成的有限序列,若数组的每个元素占s个存储单元,并且从地址a开始依次分配数组各元素,则分配情况为: 
      矩阵是科学与工程计算问题中常用的数学对象之一。

     

     

    二、二维数组顺序存储结构
    二维数组顺序存储有两种方式:一种是以行序为主序,另一种是以列序为主序
    1.以行序为主序进行存储分配的方法
    首先存储行号为0的n个元素,对于这n个元素按列号从小到大依次存储:紧接着存储行号为1的n个元素…最后存储行号为m-1的n个元素。



    地址计算
    LOC(a[i][j])=LOC(a[0][0])+(i*n+j)*s=a+(i*n+j)*s

    2.以列序为主序进行存储分配的方法

    首先存储列号为0的m个元素,对于这m个元素按行号从小到大依次存储:紧接着存储列号为1的m个元素…最后存储列号为n-1的m个元素。


    地址计算
    LOC(a[i][j])=LOC(a[0][0])+(j*m+i)*s=a+(j*m+i)*s

    多维数组的顺序存储

    1.存放规则 

    以上规则可以推广到多维数组的情况:行优先顺序也称为低下标优先或左边下标优先于右边下标。具体实现时,按行号从小到大的顺序,先将第一行中元素全部存放好,再存放第二行元素,第三行元素,依次类推 …… 
    在BASIC语言、 PASCAL语言、 C/C++语言等高级语言程序设计中,都是按行优先顺序存放的。
    列优先顺序也称为高下标优先或右边下标优先于左边下标。具体实现时,按列号从小到大的顺序,先将第一列中元素全部存放好,再存放第二列元素,第三列元素,依次类推 ……

    在FORTRAN语言程序设计中,数组是按列优先顺序存放的。

    按上述两种方式顺序存储的序组,只要知道开始结点的存放地址(即基地址),维数和每维的上、下界,以及每个数组元素所占用的单元数,就可以将数组元素的存放地址表示为其下标的线性函数。因此,数组中的任一元素可以在相同的时间内存取,即顺序存储的数组是一个随机存取结构。

    稀疏矩阵 

         设矩阵Amn中有s个非零元素,若s远远小于矩阵元素的总数(即s<<m×n),则称A为稀疏矩阵。

    1、稀疏矩阵的压缩存储
         为了节省存储单元,可只存储非零元素。由于非零元素的分布一般是没有规律的,因此在存储非零元素的同时,还必须存储非零元素所在的行号、列号,才能迅速确定一个非零元素是矩阵中的哪一个元素。稀疏矩阵的压缩存储会失去随机存取功能。
         其中每一个非零元素所在的行号、列号和值组成一个三元组(i,j,aij),并由此三元组惟一确定。
         稀疏矩阵进行压缩存储通常有两类方法:顺序存储和链式存储。链式存储方法【参见参考书目】。

    2、三元组表
         将表示稀疏矩阵的非零元素的三元组按行优先(或列优先)的顺序排列(跳过零元素),并依次存放在向量中,这种稀疏矩阵的顺序存储结构称为三元组表。

     

    ①三元组表表示的矩阵转置的思想方法
      第一步:根据A矩阵的行数、列数和非零元总数确定B矩阵的列数、行数和非零元总数。
      第二步:当三元组表非空(A矩阵的非零元不为0)时,根据A矩阵三元组表的结点空间data(以下简称为三元组表),将A的三元组表a->data置换为B的三元组表b->data。

     

    十字链表的构成

    1、非零元素的结点结构 
    十字链表为稀疏矩阵中的链接存储中的一种较好的存储方法,在该方法中,每一个非零元用一个结点表示,结点中除了表示非零元所在的行(row)、列(col)和值(val)的域外,还需增加两个链域:行指针域(right),用来指向本行中下一个非零元素;列指针域(down) ,用来指向本列中下一个非零元素。

    2.表头结点结构
    对于矩阵中每一行,分别设置一个行链表表头结点。为处理方便,使表头结点和非零元素结点结构相同,其中row和col域的值均为∞,right域指向该行非零元素的第一个结点,next(与val域共用结构中相同空间)域指向下一行的表头结点。
    对于矩阵中每一列,分别设置一个列链表表头结点。dowm域指向该列非零元素的第一个结点,next域指向下一列的表头结点,其他域同行链表表头结点。

     

     

  • 相关阅读:
    CSP-S2020总结
    题解-P6687 论如何玩转 Excel 表格
    题解-UVA12995 【Farey Sequence】
    题解-P4159 [SCOI2009] 【迷路】
    题解-SP2916【GSS5
    102. 二叉树的层序遍历
    力扣 160 相交链表 快慢指针 双指针
    3. 无重复字符的最长子串 滑动窗口
    最大连续1的个数 III
    B树和B+树
  • 原文地址:https://www.cnblogs.com/finger/p/2535450.html
Copyright © 2020-2023  润新知