1. 数组与一般线性表之间的差异
答:二维数组可以看做每个数据元素都是相同类型的一维数组的一维数组。以此类推,任何多维数组都可以看成一线性表,此时线性表中的每个元素也是一个线性表。多维数组是线性表的推广。
2. 数组的特点
答:① 数组中各元素具有统一的类型
② d维数组中非边界元素具有d个前驱元素和d个后继元素
③ 数组维数确定后,数组元素个数和元素之间的关系不再发生改变,特别适合于顺序存储(按照顺序存储的数组都具有“随机存取”的特性)
④ 每组有意义的下标都存在一个与其相对应的数组元素值
3. 二维数组a顺序存储
答:两种方式:按行存;按列存,已知二维数组的行上下界为c1,d1;列上下界为c2,d2
按行:loc(aij) = loc(ac1d1) + [ (i - c1) * (d2 - c2 +1 ) + (j - c2) ] * k
按列:loc(aij) = loc(ac1d1) + [ (j - c2) * (d1 - c1 +1 ) + (i - c1) ] * k
4. 特殊矩阵的压缩存储
答:压缩存储:对方阵中0元素和相同的元素不分配存储空间,有对称矩阵、对角矩阵、稀疏矩阵(三元组表示顺序表存储、链式存储:十字链表存储时,都不再具有随机存储功能)用十字链表存储稀疏矩阵时,共有Max{m, n}+1个头结点,m+n+1个单链表。相同的行列共用一个表头结点,各个表头结点再链接成链表,这个链表上再用一个表头结点并存储表示行和列的数量
5. 广义表定义和特性
答:
定义:广义表是线性表的推广,是n个元素的一个有限序列。广义表GL表示与线性表相同
GL=(a1, a2, ... , an)。若ai是单个数据元素,这称之为广义表的原子;如果是一个广义表,则称之为广义表的一个子集。
特性:GL=(a, (b, (c), (#))),head=a,tail=((b, (c), (#)))
① 一个广义表中的数据既可以是原子,也可以是子表
② 广义表中的数据元素有相对次序,数据元素个数有限
③ 其长度定义为最外层包含的元素个数
④ 深度定义为所包含的括号的重数,原子深度为0,空表深度为1
⑤ 可以共享,共享的广义表称为再入表
⑥ 可以是一个递归的表,一个广义表可以是自己的子表。这种称为递归表,深度是无穷值,长度是有限值。
⑦ 任何一个广义表均可分解为表头和表尾两部分。空表不能求表头表尾。表尾总是一个广义表
存储结构:很难为其分配一个固定大小的空间,只能采用动态链式存储结构。
6. 简述广义表、数组和线性表的关系
答:多维数组、广义表是线性表的推广,线性表是其特殊情况。将线性表中的元素变为一维数组或者广义表的子表,则推广到了多维数组和广义表。