单项选择(2015年秋程序员软考)

设数组A[1..m,1..n]的每个元素占用1个存储单元,对于数组元素A[i,j](1≤证≤m,1≤j≤n),在按列存储方式下,其相对于数组空间首地址的偏移量为【 】。

A、j*(n-1)+i

B、(j-1)*n+i-1

C、j*(m-1)+i

D、(j-1)*m+i-1

答案解析

D

【解析】

在按列存储方式下,元素a[i,j]之前有j-1列,每列m个元素,在a[i,j]所在列(即第j列),排在它之前的元素有i-1个,因此,a[i,j]之前共有(j-1)*m+i-1个元素。

讨论

特殊矩阵是非零元素有规律分布的矩阵,以下关于特殊矩阵的叙述中,正确的是【 】。

数组是程序语言提供的基本数据结构,对数组通常进行的两种基本操作是数组元素的【 】。

若采用三元组表存储结构存储系数矩阵 M.则除三元组外,下列数据中还需要保存的是【 】Ⅰ. M 的行数;Ⅱ. M 中包含非零元素的行数;Ⅲ. M 的列数;Ⅳ. M 中包含非零元素的列数.

在C程序中有一个二维数组 A[7][8],每个数组元素用相邻的 8 个字节存储,那么存储该数组需要的字节数为【 】。

含有n个元素的线性表用顺序存储方式时,对其运算速度最快的操作是【 】。

在数据结构中,【 】是与存储结构无关的术语。

已知某二叉树的先序遍历序列为ABCD,后序遍历序列为CDBA,则该二叉树为【 】。

在有13个元素构成的有序表data[1..13]中,用折半查找(即二分查找,计算时向下取整)方式查找值等于data[8]的元素时,先后与【 】等元素进行了比较。

对于下图,从顶点1进行深度优先遍历时,不可能得到的遍历序列是【 】

函数 Reverselist(LinkList headptr)的功能是将含有头结点的单链表就地逆置。处理思路是将链表中的指针逆转,即将原链表看成由两部分组成,已经完成逆置的部分和未完成逆置的部分,令s指向未逆置部分的第一个结点,并将该结点插入已完成部分的表头(头结点之后),直到全部结点的指针域都修改完成为止。例如,某单链表如图所示,逆置过程中指针s的变化情况如图(a)(b)所示。链表结点类型定义如下:typedef struct Node{ int data, struct Node *next;}Node, *LinkList;void ReverseList (LinkList headptr){//含头结点的单链表就地逆置, headptr为头指针 LinkList p,s; if(__(1)__) return;//空链表(仅有头结点)时无需处理 p=__(2)__;//令p指向第一个元素结点 if (!p->next) return;//链表中仅有一个元素结点时无需处理 s= p->next;//s指向第二个元素结点 __(3)__=NULL;//设置第一个元素结点的指针域为空 while (s){ p=s;//令p指向未处理链表的第一个结点 s=__(4)__; p-> next= headptr-> next;//将p所指结点插入已完成部分的表头 headptr-> next=__(5)__; }}