矩阵 - 习题

二维数组 A 的元素是 6 个字符组成的串,行下标 i 的范围从 0 到 8,列下标 j 的范围从 1 到 10。从供选择的大难中选出应填入下列关于数组存储的描叙述中 ( ) 内的正确答案

(1) 存放 A 至少需要 ( ) 个字节
(2) A 的第 8 列和第 5 行共占 ( ) 个字节
(3) 若 A 按行存放,元素 A[8, 5] 的起始地址与 A 按列存放时的元素 ( ) 的起始地址一致

(1) A. 90            B. 180            C. 240            D. 270            E. 540
(2) A. 108         B. 114            C. 54             D. 60             E. 150
(3) A. A[8, 5]     B. A[3, 10]      C. A[5, 8]       D. A[0, 9]

解:

  • E, A, B
  • (2) 中横竖加起来中间有一块是交叉区域重复需要减掉一次

数组通常具有的两种基本操作是 ( )

A. 查找和修改            B. 查找和索引            C. 索引和修改            D. 建立和删除

解: 数组定长只能查找和修改不能插入删除,故选 A

稀疏矩阵的三元组存储方法 ( )

A. 实现转置运算很简单,只需将每个三元组的行标和列标交换
B. 是一种链式存储方法
C. 矩阵的非零元素个数和位置在操作过程中变化不大时较有效
D. 比十字链表法更高效

解:

  • 在矩阵的三元组中,元素的排列是有规则的,规则为先行后列。所以在将数组的 行下标与列下标的值互换,并把m和n的值互换后,还需要重排三元组间的次序,这样才能实现矩阵的转置,A 错误。三元组是顺序存储,十字链表是链式存储,B 错误。选 C

有一个 100*90 的稀疏矩阵,非 0 元素有 10 个,设每个整型数占 2 字节,则用三元组表示该矩阵时,所需字节数是 ( )

A. 60            B. 60            C. 18000            D. 33

解:

  • 三元组的每个元素包括行值,列值和元素值,每个非零元素占 23 个字节,10 个非零元素占 610 字节。此外,还一般要用三个整数来存储矩阵的行数、列数和总元素个数,又需要3*2 个字节,故选 B

用数组 r 存储静态链表,结点的 next 域指向后继,工作指针 j 指向链中结点,使 j 沿链移动的操作为 ( )

A. j = r[j].next            B. j = j + 1            C. j = j->next            D. j = r[j]->next

解:

  • 首先链表的下一个结点应该用 next 指针访问,排除B,当前结点是 r[j],可以排除 C。当结构体中next是结构体指针类型则 c/c++ 访问是需要用结构体类型 ->next 来访问,如果不是指针类型,而是结构体类型就应该用,结构体名 .next 来访问,故选 A

数组是一种线性结构,因此只能用来存储线性表 ( )

解:

  • 错。数组是一个线性结构,可以存的数据结构很多,只要不是动态链表就行。比如,线性表,栈,队列,静态链表,完全二叉树都可,只要是挨着排列,这样效率好

数组不适合作为任何二叉树的存储结构 ( )

解:

  • 错。二叉树的顺序存储就是利用数组实现的,也就是用一组连续的存储单元存放二叉树中的结点。依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映出结点之间的逻辑关系,这样既能够最大可能地节省存储空间,又可以利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。

稀疏矩阵压缩存储后,必会失去随机存取功能 ( )

解:

  • 对。稀疏矩阵在采用压缩存储后将会失去随机存储的功能。因为在这种矩阵中,非零元素的分布是没有规律的,为了压缩存储,就将每一个非零元素的值和它所在的行、列号做为一个结点存放在一起,这样的结点组成的线性表中叫三元组表,它已不是简单的向量,所以无法用下标直接存取矩阵中的元素。

若一个广义表的表头为空表,则此广义表亦为空表 ( )

解:

  • 广义表 ( ) 和 (( )) 不同,前者是长度为 0 的空表,对其不能做求表头和表尾的运算;而后者是长度为 1 的非空表,对其可进行分解,得到的表头和表尾均为空表 ( )
posted @ 2021-12-23 18:48  絵守辛玥  阅读(116)  评论(0)    收藏  举报