02331数据结构课后练习题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第1章概论

练习题

一、单项选择题

1.在数据结构中,从逻辑上可以把数据结构分为(B)A.紧凑结构和非紧凑结构B.线性结构和非线性结构

C.内部结构和外部结构D.动态结构和静态结构2.若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为(D)A.顺序存储结构B.链式存储结构

C.索引存储结构D.散列存储结构

3.算法分析的两个主要方面是(B)A.正确性和简明性B.时间复杂性和空间复杂性

C.可读性和可维护性D.数据复杂性和程序复杂性4.线性表采用链式存储结构时,要求内存中可用存储单元地址(A)A.不一定连续的B.部分地址必须是连续的

C.必须是连续的D.一定是不连续的

5.算法指的是(C)A.计算机程序B.解决问题的计算方法

C.解决问题的有限运算序列D.排序算法

二、填空题

6.数据结构一般包括逻辑结构、存储结构和数据运算三个方面的内容.

7.数据的逻辑结构可分为线性结构、非线性结构两大类.

8.数据的存储结构(物理结构)一般可以用顺序存储结构、链式存储结构、索引存储结构及散列存储结构等四种存储方法表示.

9.在选用求解一个问题的算法时,除了首先考虑算法是“正确的”之外,还主要考虑执行算法所需要的时间、执行算法所需要的存储空间及算法应易于理解、易于编程、易于调试等三点。

10.设有一批数据元素,为了最快地存取某元素,宜用顺序结构存储,为了方便的插入一个元素,宜用链式结构存储.

三、应用题

设n为正整数,利用大“O”记号,写出下列各程序段的时间复杂度.

11.for (i = 1; i <= n; i++){

y = y + 1;

for (j = 1; j <= 2 * n; j++)

x = x + 1;

}

分析:语句“y = y + 1;”执行n次,语句“x = x + 1;”各执行2

2n次,故该程序段的时间复杂度为O(2n).12.s = 0;

while (n >= (s + 1) * (s + 1))

s = s + 1;

分析:语句“s = s + 1;”执行.

13.x = 1;

sum = 0;

for (i = 0; i <= n; i++){

x = x * i;

sum = sum + x;

}

分析:语句“x = x * i”和“sum = sum + x;”各执行n次,故该程序段的时间复杂度为O(n).

14.for (i = 1; i <= n; i++)

if (3 * i <=n)

for (j = 3 * i; j <= n; j++){

x++;

y = 3 * x + 2;

}

分析:语句“x++”和“y = 3 * x + 2;”各执行1(1)

n n-次,故该程序段的时间复杂度为O(2n).

6

15.for (i = 1; i <= n; i++)

for (j = 1; j <= i; j++){

x = x + 1;

}

分析:语句“x = x + 1;”执行1(1)

n n+次,故该程序段的时间复杂度为O(2n).

2

16.sum = 0; i = 0;

while (i <= 100){

sum = sum + i;

i++;

}

分析:语句“sum = sum + i;”和“i++;”各执行100次,故该程序段的时间复杂度为O(1).

17.x = 1;

s = 0;

for (i = 1; i <= n; i++){

++x;

s += x;

}

for (j = 1; j <= n; j++)

for (k = 1; k <= n; k++){

x++;

s = s + x;

}

分析:语句“++x;”执行n次,语句“x++;”和“s = s + x;”各执行2n次,故该程序段的时间复杂度为O(2n).

第2章线性表

练习题

一、单项选择题

1.在长度为n的顺序表的第i(11)

≤≤+个位置上插入一个元素,元素的移动次数为(A)

i n

A.1

i-

n i-+B.n i-C.i D.1 2.若一个顺序表中第一个元素的存储地址为1000,每个元素占4个地址单元,那么,第6个元素的存储地址应是(A)A.1020 B.1010 C.1016 D.1024 3.带头结点的单链表(以head为头指针)为空的判断条件是(C)A.head != NULL B.head -> next == head

C.head -> next == NULL D.head == NULL

4.在单循环链表中,p指向表任一结点,判断表不是访问结束的条件是(B)A.p != NULL B.p != head C.p -> next != head D.p -> next != NULL 5.在一个单链表中,已知q指向p所指向结点的前趋结点,若在p、q所指结点之间插入一个s所指向的新结点,则执行的操作是(A)A.q -> next = s; s -> next = p B.p -> next = s; s -> next = q

C.s -> next = p -> next; p -> next = s D.p -> next = s -> next; s -> next = p 6.在一个单链表中,若删除p指向结点的后继结点,则执行的操作是(A)A.q = p -> next; p -> next = p -> next -> next; free(q);

B.p = p -> next; q = p -> next; p = q -> next; free(q);

C.q = p -> next -> next; p = p -> next; free(q);

D.p = p -> next -> next; q = p -> next; free(q);

二、填空题

7.在一个长度为n的顺序表中删除第i个元素,需要向前移动n- i个元素.

8.在顺序表中插入或删除一个元素,需要平均移动表长的一半个元素,具体移动的元素个数与插入或删除的位置有关.

9.顺序表中逻辑上相邻的元素在物理存储位置上一定相邻,链表结构中逻辑上相邻的元素在物理位置上不一定相邻.

10.已知顺序表中一个元素的存储位置是x,每个元素占c个字节,求其后继元素位置计算公式为x+ c,而已知单链表中某一结点由p指向,求此后继结点存储地址的操作为p -> next.

11.在用p指针访问单链表时,判断不是访问结束的条件是p != NULL;在访问单循环链表时,判断不是访问表结束的条件是p != head.

12.已知p指向双向链表的中间某个结点,从给定的操作语句中选择合适的填空.

(1)在p结点后插入s结点的语句序列是I、G、A、D.

(2)在p结点前插入s结点的语句序列是C、N、H、B.

(3)删除p结点的直接后继结点的语句序列是J、Q、E、M.

(4)删除p结点的直接前趋结点的语句序列是K、P、F、M.

(5)删除p结点的语句序列是O、R、L.

A.p -> next = s B.p -> prior = s C.s -> next = p

D.s -> prior = p E.p -> next = p -> next -> next F.p -> prior = p -> prior -> prior

相关文档
最新文档