数据结构简明教程(第2版)微课版
上QQ阅读APP看书,第一时间看更新

练习题2

1.单项选择题

(1)线性表是( )。

A.一个有限序列,可以为空

B.一个有限序列,不可以为空

C.一个无限序列,可以为空

D.一个无限序列,不可以为空

(2)顺序表具有随机存取特性,指的是( )。

A.查找值为x的元素的时间与顺序表中元素个数n无关

B.查找值为x的元素的时间与顺序表中元素个数n有关

C.查找序号为i的元素的时间与顺序表中元素个数n无关

D.查找序号为i的元素的时间与顺序表中元素个数n有关

(3)在n个元素的顺序表中,算法的时间复杂度是O(1)的操作是( )。

A.访问第i个元素(2≤in)及其前驱元素

B.在第i(1≤in)个元素后插入一个新元素

C.删除第i个元素(1≤in

D.将n个元素从小到大排序

(4)在含有127个元素的顺序表中插入一个新元素,平均移动元素的次数是( )。

A.8

B.63.5

C.63

D.7

(5)将两个分别含有mn个元素的有序顺序表归并成一个有序顺序表,对应算法的时间复杂度是( )。这里MIN表示取最小值。

A.On

B.Om

C.Om+n

D.O(MIN(mn))

(6)线性表采用链表存储结构时,其存放各个元素的单元地址( )。

A.必须是连续的

B.一定是不连续的

C.部分地址必须是连续的

D.连续与否均可以

(7)线性表的链式存储结构和顺序存储结构相比,其优点是( )。

A.所有的操作算法实现简单

B.便于随机存取C.便于插入和删除元素

D.节省存储空间

(8)关于线性表的顺序存储结构和链式存储结构的描述中,正确的是( )。

Ⅰ.线性表的顺序存储结构优于链式存储结构

Ⅱ.顺序存储结构比链式存储结构的存储密度高

Ⅲ.如需要频繁插入和删除元素,最好采用顺序存储结构

Ⅳ.如需要频繁插入和删除元素,最好采用链式存储结构

A.Ⅰ、Ⅱ、Ⅲ

B.Ⅱ、Ⅳ

C.Ⅱ、Ⅲ

D.Ⅲ、Ⅳ

(9)设线性表中有n个元素,以下运算中,( )在单链表上实现要比在顺序表上实现效率更高。

A.删除指定位置元素的后一个元素

B.在尾元素的后面插入一个新元素

C.顺序输出前kkn)个元素

D.交换第i个元素和第ni+1个元素的值

(10)以下关于单链表的叙述中,不正确的是( )。

A.结点除自身信息外还包括指针域,因此存储密度小于顺序存储结构

B.逻辑上相邻的元素物理上不必相邻

C.可以通过头结点直接计算第i个结点的存储地址

D.插入、删除运算操作方便,不必移动结点

(11)通过含有nn≥1)个元素的数组a,采用头插法建立一个单链表L,则L中结点值的次序( )。

A.与数组a的元素次序相同

B.与数组a的元素次序相反

C.与数组a的元素次序无关

D.以上都不对

(12)在含有nn≥1)个结点的单链表中,实现( )运算的时间复杂度为On)。

A.遍历单链表来求第i个结点值

B.在地址为p的结点之后插入一个新结点

C.删除链表的首结点

D.删除地址为p的结点的后继结点

(13)已知两个长度分别为mn的升序单链表,若将它们合并为一个长度为m+n的升序单链表,则最好情况下的时间复杂度是( )。

A.On

B.Om×n

C.O(MIN(mn))

D.O(MAX(mn))

(14)与非循环单链表相比,循环单链表的主要优点是( )。

A.不再需要头指针

B.已知某个结点的位置后,能够容易地找到它的前驱结点

C.在进行插入、删除操作时,能更好地保证链表不断开

D.从表中任意结点出发都能扫描到整个链表

(15)与单链表相比,双链表的优点之一是( )。

A.插入、删除操作更简单

B.可以进行随机访问

C.可以省略表头指针或表尾指针

D.访问前后相邻结点更方便

(16)在长度为nn≥1)的双链表中插入一个结点(非尾结点)要修改( )个指针域。

A.1

B.2

C.3

D.4

(17)在长度为nn≥1)的双链表L中,在p所指结点之前插入一个新结点的时间复杂度为( )。

A.O(1)

B.On

C.On2

D.Onlog2n

(18)非空的循环单链表L的尾结点(由p所指向)满足( )。

A.p—>next==NULL

B.p==NULL

C.p—>next==L

D.p==L

(19)在长度为nn≥1)的循环双链表L中,删除尾结点的时间复杂度为( )。

A.O(1)

B.On

C.On2

D.Onlog2n

(20)某线性表最常用的操作是在尾元素之后插入一个元素和删除尾元素,则采用以下( )存储方式最节省运算时间。

A.单链表

B.循环单链表

C.双链表

D.循环双链表

2.填空题

(1)为了设置一个空的顺序表L,采用的操作是( )。

(2)在长度为n的顺序表L中查找第i个元素,其时间复杂度为( )。

(3)在长度为n的顺序表L中查找值为x的元素,其时间复杂度为( )。

(4)在一个长度为nn≥1)的顺序表中删除第i个元素(1≤in)时,需向前移动( )个元素。

(5)在线性表的顺序存储结构中,元素之间的逻辑关系是通过元素的( ① )表示的;在线性表的链式存储结构中,元素之间的逻辑关系是通过结点的( ② )表示的。

(6)在含有nn>1)个结点的单链表中,要删除某一指定的结点,必须找到该结点的( ① )结点,其时间复杂度为( ② )。

(7)删除单链表Lp结点(非尾结点)的后继结点并释放其空间,对应的语句是( )。

(8)在单链表Lp结点之后插入s结点,对应的语句是( )。

(9)在含有n个结点的双链表中,要删除p所指结点(非首结点)的前驱结点,其时间复杂度为( )。

(10)带头结点的循环单链表L为空的条件是( )。

3.简答题

(1)比较线性表的顺序存储结构和链式存储结构的优缺点。在什么情况下用顺序表比链表好?

(2)对于表长为n的顺序表,在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需要移动的元素的平均次数为多少?删除一个元素所需要移动的平均次数为多少?

(3)在链表中设置头结点的作用是什么?

(4)对于双链表和单链表,在两个结点之间插入一个新结点时需修改的指针各为多少个?

(5)某含有nn>1)结点的线性表中,最常用的操作是在尾元素之后插入一个元素和删除第一个元素,则采用以下哪种存储方式最节省运算时间?

①单链表;

②仅有头指针不带头结点的循环单链表;

③双链表;

④仅有尾指针的循环单链表。

4.算法设计题

(1)设计一个算法,判断顺序表L中所有元素是否是递增有序的。

(2)设计一个算法,将顺序表L的所有元素逆置,要求算法空间复杂度为O(1)。

(3)有一个非空整数顺序表L,其中元素值可能重复出现,设计一个算法,在最后一个最大值元素之后插入一个值为x的元素。

(4)设计一个算法,通过相邻两个元素交换的方法将非空顺序表L中最大元素移到最后面(假设最大元素唯一)。

(5)设计一个算法删除单链表L中第一个值为x的结点。

(6)设计一个算法判定单链表L的所有结点值是否是递增的。

(7)有一个整数单链表A,设计一个算法,将其拆分成两个单链表AB,使得A单链表中含有所有的偶数结点,B单链表中含有所有的奇数结点,且保持原来的相对次序。

(8)有一个递增有序单链表L,设计一个算法向该单链表中插入一个元素为x的结点,使插入后该链表仍然有序。

(9)有一个带头结点的非空单链表L,设计一个算法由L复制产生另外一个结点值及其顺序完全相同的带头结点单链表L1

(10)设计一个算法,将一个带头结点的非空循环单链表L中最后一个最小值结点移到表头。

(11)对于有nn≥1)个数据结点的循环单链表L,设计一个算法将所有结点逆置。

(12)有一个双链表L,设计一个算法查找第一个元素值为x的结点,将其与前驱结点进行交换。

(13)设有一个含两个以上结点的双链表L,设计一个算法将最后两个结点进行交换。设L中数据结点个数为n,分析你所设计算法的时间复杂度。

(14)有一个非空循环双链表L,设计一个算法删除所有值为x的结点。

(15)设有一个含两个以上结点的循环双链表L,设计一个算法将最后两个结点进行交换。设L中数据结点个数为n,分析你所设计算法的时间复杂度。