第二章:线性表
1.线性结构的基本特征
答:线性结构是若干数据元素构成的有序(次序)集
① 集合中必存在唯一的一个“第一元素”;
② 集合中必存在唯一的一个 “最后元素”;
③ 除第一元素之外,均有 唯一的前驱;
④ 除最后元素之外,均有 唯一的后继.
2.线性表的顺序存储结构和链式存储结构分别是______。( D )
A. 顺序存取的存储结构、顺序存取的存储结构
B. 顺序存取的存储结构、随机存取的存储结构
C. 随机存取的存储结构、随机存取的存储结构
D. 随机存取的存储结构、顺序存取的存储结构解析:
解析:
顺序存储结构的地址在内存中是连续的所以可以通过计算地址实现随机存取,
而链式存储结构的存储地址不一定连续,只能通过第一个结点的指针顺序存取;
3. 一批数据用顺序存储结构,第一个元素的存储地址是200,且每个元素长度为2,则第5个元素的存储地址是( B)
A、210 B、208
C、200 D、220
解析:
线性表的顺序表示用一组地址连续的存储单元依次存放线性表中的数据元素,线性表的起始地址,称作线性表的基地址。
方法一:
所有数据元素的存储位置均取决于第一个数据元素的存储位置
LOC(ai) = LOC(a1) + (i-1)×每个元素的长度
↑基地址208 = 200 +(5-1)*2
方法二:
第一个元素存储地址是200,
第二个元素存储地址是202,
第三个元素存储地址是204,
第四个元素存储地址是206,
第五个元素存储地址是208。
4.从具有n个结点的单链表中查找值等于x的结点时,在查找成功的情况下,平均需比较( D )个结点。
A)n B)n/2 C)(n-1)/2 D)(n+1)/2
解析:
在n个结点的单链表中,查找第i个节点需要比较关键字的次数是i,
所以在查找成功的情况下,需平均比较的结点个数为(1+2+...+n)/n=(n+1)/2
5.单链表中,增加头结点的目的是为了( A )。
A)方便运算的实现B)用于标识单链表C)使单链表中至少有一个结点D)用于标识起始结点的位置
解析:
头节点不仅标识了表中首节点的位置,而且根据单链表(包含头节点)的结构。
只要掌握了表头,就能够访问整个链表,因此增加头结点的目的是为了便于运算的实现。
6.结构体成员如何访问?
答:1、结构体变量中成员的访问
例如:LNode a;
a.data; a.next;
2、结构体指针所指结点中成员的访问
例如:LNode *p;或LinkList p;
p->data; p->next;
7.单链表中带头结点和不带头结点的单链表L判空条件有何不同?
答:
带头结点:L->next = NULL
不带头结点:L = NULL
8.p->data = ai,则p->next->data = ?
答: p->next->data = ai+1
9.在一个有n 个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( )
A.O(1) B.O(n)
C.O(n*n) D.O(nlog2n)
解析:
本题主要考核有序单链表上的插入操作及算法分析。对数据结构的任何操作都不能改变其原有的结构特性。
因此,在有序单链表中插入一个新结点后,仍然要保持它的有序性。
插入操作的关键是查找插入位置,要时间也是花在插入位置的查找上。
n个结点的单链表,有,n+1个可能插入的位置,即第一个结点之前和每一个结点之后。
在第一个结点之前插入,需比较一次;
在第一个结点之后插入需比较两次;……;
在第,n个结点之后插入需查找次。
如果在每一个位置上作插入的概率相等,即Pi=1/(n+1),
则在有序单链表上查找插入位置的平均比较次数为:
--------------------------
10.若某线性表最常用的操作是存取任一指定序号的元素和在表尾进行插入和删除运算,则利用( A )存储方式最节省时间。
A.顺序表 B.双向链表
C.带头结点的双向循环链表 D.单循环链表
解析:
“存取任意指定序号”最好的方法是实现“随机存取”,则可采用顺序表。
并且,因为插入和删除操作都是在最后进行的,所以无需大量移动数据元素,选项A是最合适的。
11. 某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。
A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表
12.若某线性表中最常用的操作是在最后一个元素之前插入和删除元素,则采用__ D___最节省运算时间。
A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表
解析:
单链表从链表的第一个表元开始,将线性表的节点依次存储在链表的各表元中。链表的每个表元除要存储线性表节点信息外,还要一个成分用来存储其后继节点的指针。
循环链表是单链表的变形,其特点是表中最后一个节点的指针域指向头节点,整个链表形成一个环。
因此,从表中的任意一个节点出发都可以找到表中的其他节点。循环链表中,从头指针开始遍历的结束条件不是节点的指针是否为空,而是是否等于头指针。为简化操作,循环链表中往往加入表头节点。 双向链表的节点中有两个指针域,其一指向直接后继,另一指向直接前驱,克服了单链表的单向性的缺点。
13.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( D )最节省时间。
A. 单链表 B.单循环链表
C. 带尾指针的单循环链表 D. 带头结点的双循环链表
解析:
问题出现在查找效率上
链表最常用的操作是在末尾插入节点和删除尾节点,在尾插入 删除操作,都需要知道他的前导
而单链表要查找到最有一个元素需要遍历全部链表
双链表直接可以查到前导,最常用的操作实在最后一个元素之后插入一个元素和删除第一个元素,
删除头结点需要头指针或者只用一个->next域就能查到 速度就快了
在有第二个条件 删除最后一个元素 有尾指针就最好了 可以直接找到尾巴元素 同时他还是循环链表 所以正好他的->next就是头结点
14. 链表不具有的特点是( B )
A.插入、删除不需要移动元素
B.可随机访问任一元素
C.不必事先估计存储空间
D.所需空间与线性表长度成正比
解析:
顺序存储结构的地址在内存中是连续的所以可以通过计算地址实现随机存取
链表是链式存储结构,其存储地址不一定连续,只能通过第一个结点的指针顺序存取,不可以实现随机访问任意元素。
15.静态链表中指针表示的是( B )。
A. 内存地址 B.数组下标
C.下一元素地址 D.左、右孩子地址
解析:
所谓静态链表就是没有指针的,用下标模仿这个指针的功能的