数组与广义表

1 数组的概念、多维数组的实现

1)数组的概念

  • 数组的特点:元素数目固定;下标有界。
  • 数组的操作:按照下标进行读写。

2)多维数组的实现

行优先顺序

存储时先按行从小到大的顺序存储,在每一行中按列号从小到大存储。

列优先顺序

存储时先按列从小到大的顺序存储,在每一列中按行号从小到大存储。

2 矩阵的压缩存储

矩阵的压缩存储就是存储数组时,尽量减少存储空间,但数组中每个元素必须存储。

在矩阵中,如果有规律可寻,只要存储其中一部分,而另外一部分的存储地址可以通过相应的算法将它计算出来,从而占有较少的存储空间达到存储整个矩阵的目的。

矩阵的压缩存储仅能针对特殊矩阵使用,对于没有规律可循的二维数组则不能使用。

1)对称矩阵

只需对对称矩阵中n(n+1)/2个元素进行储存表示

2)三角矩阵

以主对角线划分,三角矩阵有上三角和下三角两种。上三角矩阵它的下三角中的元素均为常数。下三角矩阵正好相反,它的主对角线上方均为常数。

3)稀疏矩阵

if 一个 m * n 的矩阵含有 t 个非零元素,且 t 远远小于 m * n,则称这个矩阵为稀疏矩阵

除了记录非零元素的值之外,还必须同时几下它所在的行和列的位置。稀疏矩阵的存储方法一般有三种:三元组法、行逻辑连接顺序表和十字链表法。

三元组法

用三项内容表示稀疏矩阵中的每个非零元素,形式为:(i,j,value)。
其中,i 表示行序号,j 表示列序号,value 表示非零元素的值

3 广义表的基本概念

1)定义

  • 广义表:是线性表的扩展,具体定义为n(n≥0)个元素的有限集合。
    n的值是广义表的长度,如果n=0称广义表为空表。
  • 长度:广义表中含有元素的个数称
  • 深度:广义表中含有的括号对数
数据元素

广义表的数据元素有两种类型:一个是不可再分的元素(原子元素);一个是可以再分的元素(子表)。

  • 如果所有的元素都是原子元素,则称为线性表。
  • 如果数据元素中含有子表元素,则称为广义表。
记法

广义表一般记作:LS=(a1,a2,……,an)

常见的广义表为:A=()、B=(())、C=(a,b)、D=(A,B,C)、E=(a,E)

特点

广义表有三个重要的特点:

  • 第一:广义表的元素可以是子表,而子表的元素还可以是子表,广义表是一个多层次的结构。
  • 第二:广义表可以为其他广义表所共享。
  • 第三:广义表可以是一个递归表,即表也可以是其本身的一个子表。

2)存储方式

广义表的存储方法有很多种,一般采用链表存储。

flag表示标志位。当flag为0时,表示该结点为原子元素,info表示原子元素的值;当flag为1时表示该结点为子表,info表示指针,指向该子表的第一个结点。 link表示指针,指向广义表的下一个元素。

Author: iMine
Link: https://imine141.github.io/2020/08/24/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E6%95%B0%E7%BB%84%E5%92%8C%E5%B9%BF%E4%B9%89%E8%A1%A8/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.