《数据结构》第二章习题参考答案 殷人昆版

合集下载

数据结构--第二章考试题库(含答案)

数据结构--第二章考试题库(含答案)

第2章线性表

一选择题

1.下述哪一条是顺序存储结构的优点?()【北方交通大学 2001 一、4(2分)】A.存储密度大 B.插入运算方便 C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示

2.下面关于线性表的叙述中,错误的是哪一个?()【北方交通大学 2001 一、14(2分)】

A.线性表采用顺序存储,必须占用一片连续的存储单元。

B.线性表采用顺序存储,便于进行插入和删除操作。

C.线性表采用链接存储,不必占用一片连续的存储单元。

D.线性表采用链接存储,便于插入和删除操作。

3.线性表是具有n个()的有限序列(n>0)。【清华大学 1998 一、4(2分)】A.表元素 B.字符 C.数据元素 D.数据项 E.信息项

4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。【哈尔滨工业大学 2001二、1(2分)】A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。【南开大学 2000 一、3】

A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表

6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。

A. 单链表

B.单循环链表

C. 带尾指针的单循环链表

D.带头结点的双循环链表

【合肥工业大学 2000 一、1(2分)】

7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用()存储方式最节省运算时间。【北京理工大学 2000一、1(2分)】A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表

数据结构习题解析-面向对象方法和C++语言描述-殷人昆

数据结构习题解析-面向对象方法和C++语言描述-殷人昆

1-1什么是数据? 它与信息是什么关系?

【解答】

什么是信息?广义地讲,信息就是消息。宇宙三要素(物质、能量、信息)之一。它是现实世界各种事物在人们头脑中的反映。此外,人们通过科学仪器能够认识到的也是信息。信息的特征为:可识别、可存储、可变换、可处理、可传递、可再生、可压缩、可利用、可共享。

什么是数据?因为信息的表现形式十分广泛,许多信息在计算机中不方便存储和处理,例如,一个大楼中4部电梯在软件控制下调度和运行的状态、一个商店中商品的在库明细表等,必须将它们转换成数据才能很方便地在计算机中存储、处理、变换。因此,数据(data)是信息的载体,是描述客观事物的数、字符、以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。在计算机中,信息必须以数据的形式出现。

1-2什么是数据结构? 有关数据结构的讨论涉及哪三个方面?

【解答】

数据结构是指数据以及相互之间的关系。记为:数据结构= { D, R }。其中,D是某一数据对象,R是该对象中所有数据成员之间的关系的有限集合。

有关数据结构的讨论一般涉及以下三方面的内容:

①数据成员以及它们相互之间的逻辑关系,也称为数据的逻辑结构,简称为数据结构;

②数据成员极其关系在计算机存储器内的存储表示,也称为数据的物理结构,简称为存储结构;

③施加于该数据结构上的操作。

数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储不是一码事,是与计算机存储无关的。因此,数据的逻辑结构可以看作是从具体问题中抽象出来的数据模型,是数据的应用视图。数据的存储结构是逻辑数据结构在计算机存储器中的实现(亦称为映像),它是依赖于计算机的,是数据的物理视图。数据的操作是定义于数据逻辑结构上的一组运算,每种数据结构都有一个运算的集合。例如搜索、插入、删除、更新、排序等。

数据结构第2章习题参考答案

数据结构第2章习题参考答案

数据结构第2章习题参考答案

2.7习题

2.7.1知识点:

线性表的逻辑结构

一、选择题1①线性表L=(a1, a2,…,an),下列说法正确的是(D)。

A.每个元素都有一个直接前驱和一个直接后继。

B.线性表中至少要有一个元素。

C.表中诸元素的排列顺序必须是由小到大或由大到小。

D.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。

2①在线性表的下列运算中,不改变数据元素之间结构关系的运算是(D)。

A.插入B.删除C.排序D.定位3①线性表是具有n个(C)的有限序列(n>0)。

【清华大学1998】

A.表元素B.字符C.数据元素D.数据项E.信息项

二、判断题(T)1①线性表中的每个结点最多只有一个前驱和一个后继。

(F)2①线性表中的每个结点都至少有一个前驱结点和后继结点。

(F)3①线性表是N个数的有限序列。

(F)4①同一线性表的数据元素可以具有不同的特性。

(T)5①线性表的长度n就是表中数据元素的个数,当n=0时,称为空表。

(T)6①线性表是一个相当灵活的数据结构,它的长度可根据需要增长或缩短。

(F)7①对线性表中的数据元素只能进行访问,不能进行插入和删除操作。

2.

7.2知识点:

线性表的顺序存储结构

一、选择题1①在一个长度为n的顺序表中,在第i个元素(1 <=

i <=n+1)之前插入一个新元素时需向后移动(B)个元素.A.n-1B.n-i+1C.n-i-

1D.i2①若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用(D)存储方式最节省时间。

数据结构第二版主编殷人昆课后答案

数据结构第二版主编殷人昆课后答案
17. 一个算法的时间复杂度为(3n2+2nlog2n+4n-7)/(5n), 其 数量级表示为O(n) .
8
18. 从一个数组a[7]中顺序查找元素时,假定查找第一个元 素a[0]的概率为1/3,查找第二个元素a[1]的概率为1/4,查 找其余元素的概率均相同,则在查找成功时同元素的平 均比较次数为35/12
5. 执行下面程序段时,执行S语句的次数为_______.
for ( int i = 1 ; i <= n ; i++ )
for ( int j = 1 ; j<= i ; j++ )
S;
A n2
B n2/2
C n(n+1)
D n(n+1)/2
3
6. 下面算法的时间复杂度为B O(n).
int f ( unsigned int n ) {
复杂度为 O( n )
14
2) int sum1 ( int n ) { int p = 1, s = 0 ; for ( int i = 1; i <= n ; i++ ) { p *= i ; s += p ; } return s ; 计算:
} 时间复杂度为O(n)
15
3) int sum2 ( int n ) {
三、应用题 1. 设计二次多项式ax2+bx+c的一种抽象数据类型,假定起

数据结构课后习题与解析第二章

数据结构课后习题与解析第二章

第二章习题

1. 描述以下三个概念的区别:头指针,头结点,首元素结点。

2. 填空:

(1)在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。

(2)在顺序表中,逻辑上相邻的元素,其物理位置相邻。在单链表中,逻辑上相邻的元素,其物理位置相邻。

(3)在带头结点的非空单链表中,头结点的存储位置由指示,首元素结点的存储位置由指示,除首元素结点外,其它任一元素结点的存储位置由指示。

3.已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点。按要求从下列语句中选择合适的语句序列。

a. 在P结点后插入S结点的语句序列是:。

b. 在P结点前插入S结点的语句序列是:。

c. 在表首插入S结点的语句序列是:。

d. 在表尾插入S结点的语句序列是:。

供选择的语句有:

(1)P->next=S;

(2)P->next= P->next->next;

(3)P->next= S->next;

(4)S->next= P->next;

(5)S->next= L;

(6)S->next= NULL;

(7)Q= P;

(8)while(P->next!=Q) P=P->next;

(9)while(P->next!=NULL) P=P->next;

(10)P= Q;

(11)P= L;

(12)L= S;

(13)L= P;

4. 设线性表存于a(1:arrsize)的前elenum个分量中且递增有序。试写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。

5. 写一算法,从顺序表中删除自第i个元素开始的k个元素。

数据结构c殷人昆第二版答案

数据结构c殷人昆第二版答案

数据结构c殷人昆第二版答案

【篇一:《数据结构》第四章习题参考答案】

1、kmp算法的特点是在模式匹配时指示主串的指针不会变小。( √ )

2、串是一种数据对象和操作都特殊的线性表。( √)

5、使用三元组表示稀疏矩阵的非零元素能节省存储空间。( √)

6、插入与删除操作是数据结构中最基本的两种操作,因此这两种操作在数组中

7、若采用三元组表存储稀疏矩阵,只要把每个元素的行下标和列下标互换(错

二、单项选择题

1.下面关于串的的叙述中,哪一个是不正确的?( b )

a.串是字符的有限序列 b.空串是由空格构成的串(空串是长度

为零的串)

c.模式匹配是串的一种重要运算d.串既可以采用顺序存储,也可以采用链式存储

2.有串s1=’abcdefg’,s2 = ’pqrst’,假设函数con(x,y)返回x和y串的连接串,subs(s,i,j)

返回串s的从序号i的字符开始的j个字符组成的子串,len(s)返回中s的长度,则

con(subs(s1,2,len(s2)),subs(s1,len(s2),2))的结果串是( d )。 a.bcdef b.bcdefg c.bcpqrst d.cdefgfg

3、串的长度是指( b )

a.串中所含不同字母的个数 b.串中所含字符的个数

c.串中所含不同字符的个数 d.串中所含非空格字符的个数

三、填空题

1、串是一种特殊的线性表,其特殊性表现在_数据元素为字符,操作集也不同__;串的两种最基本的存储方式是_顺序存储 _、__ 链式存储 _;两个串相等的

充分必要条件是__两串的长度相等且两串中对应位置的字符也相等__。

(完整版)数据结构第二章线性表1答案

(完整版)数据结构第二章线性表1答案

(A )需经常修改L 中的结点值 (E )需不断对L 进行删除插入

第二部分线性表

、选择题

1 •关于顺序存储的叙述中,哪一条是不正确的 (B )

A. 存储密度大

B. 逻辑上相邻的结点物理上不必邻接

C. 可以通过计算直接确定第

i 个结点的位置

D. 插入、删除操作不方便

2.长度为n 的单链表连接在长度为 m 的单链表后的算法的时间复杂度为

(C )

A 0( n )

B 0(1)

C 0(m )

D 0(m+n )

3 .在n 个结点的顺序表中,算法的时间复杂度是

0(1)的操作是:(A )

A 访问第i 个结点(1<=i<=n )和求第i 个结点的直接前趋(2<=i<=n

)

B 在第i 个结点(1<=i<=n )后插入一个新结点

C 删除第i 个结点(1<=i<=n

)

D 将n 个结点从小到大排序

4.一个向量第一个兀素的存储地址是

100 ,每个兀素的长度为 2 ,则第5 个兀素的地址是

(B )

( A ) 110 ( B ) 108 (C ) 100 ( D ) 120

5 .已知一个顺序存储的线性表, 设每个结点需要占 m 个存储单元,若第一个结点的地址为 da ,

则第i 个结点的地址为:(A )

7 .链表是一种采用( B )存储结构存储的线性表。

(A )顺序 (B )链式 (C )星式 (D )网状

8 .线性表若采用链式存储结构时,要求内存中可用存储单兀的地址:

(D )

(A )必须是连续的 (B )部分地址必须是连续的 (C )一定是不连续的

(D )连续或不连续都可以

数据结构(第二版)课后习题答案

数据结构(第二版)课后习题答案

数据结构(第二版)课后习题答案第一章:数据结构概述

数据结构是计算机科学中非常重要的一个概念,它用于组织和管理计算机内部存储的数据。数据结构的设计直接影响到程序的运行效率和对真实世界问题的建模能力。第二版的《数据结构》教材旨在帮助读者更好地理解和应用数据结构。为了提高学习效果,每章节后都附有一系列习题。本文将为第二版《数据结构》教材中的部分习题提供详细的答案和解析。

第二章:线性表

2.1 顺序表

习题1:请问如何判断顺序表是否为空表?

答案:当顺序表的长度为0时,即为空表。

解析:顺序表是用一块连续的内存空间存储数据元素的线性结构。当顺序表中没有元素时,长度为0,即为空表。

习题2:如何求顺序表中第i个元素的值?

答案:可以通过访问顺序表的第i-1个位置来获取第i个元素的值。

解析:顺序表中的元素在内存中是连续存储的,通过下标访问元素时,需要将下标减1,因为数组是从0开始编号的。

2.2 链表

习题1:请问链表中的结点包含哪些信息?

答案:链表的结点一般包含两部分信息:数据域和指针域。

解析:数据域用于存储数据元素的值,指针域用于存储指向下一个

结点的指针。

习题2:如何删除链表中的一个结点?

答案:删除链表中的一个结点需要将其前一个结点的指针指向其后

一个结点,然后释放被删除结点的内存空间。

解析:链表的删除操作相对简单,只需要通过修改指针的指向即可。但需要注意释放被删除结点的内存空间,防止内存泄漏。

第三章:栈和队列

3.1 栈

习题1:如何判断栈是否为空?

答案:当栈中没有任何元素时,即为空栈。

解析:栈是一种先进后出(Last In First Out,LIFO)的数据结构,

《数据结构》第二章习题参考答案殷人昆版

《数据结构》第二章习题参考答案殷人昆版

《数据结构》第二章习题参考答案

一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”)

1、顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。( × )

2、链表中的头结点仅起到标识的作用。( × )

3、所谓静态链表就是一直不发生变化的链表。( × )

4、线性表的特点是每个元素都有一个前驱和一个后继。( × )

5、在顺序表中,逻辑上相邻的元素在物理位置上不一定相邻。(×)

6、线性表就是顺序存储的表。(×)

7、课本P84 2.4题

(1)√(2)×(3)×(4)×(5)√(6)×(7)×(8)√

(9)×(10)×(11)√(12)√

二、单项选择题

1、下面关于线性表的叙述中,错误的是哪一个?( B )

A.线性表采用顺序存储,必须占用一片连续的存储单元。

B.线性表采用顺序存储,便于进行插入和删除操作。

C.线性表采用链接存储,不必占用一片连续的存储单元。

D.线性表采用链接存储,便于插入和删除操作。

2、链表不具有的特点是( B )

A.插入、删除不需要移动元素B.可随机访问任一元素

C.不必事先估计存储空间D.所需空间与线性长度成正比

3、(1) 静态链表既有顺序存储的优点,又有动态链表的优点。所以,它存取表中第i个元素的时间与i无关。

(2) 静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。

(3) 静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。

以上错误的是( B )

A.(1),(2)B.(1)C.(1),(2),(3) D.(2)

4、在单链表指针为p的结点之后插入指针为s的结点,正确的操作是(B)A.p->link =s; s-> link =p-> link; B.s-> link =p-> link; p-> link =s; C.p-> link =s; p-> link =s-> link; D.p-> link =s-> link; p-> link =s;

数据结构第二章参考答案

数据结构第二章参考答案

数据结构第二章参考答案

习题2

1. 填空题

(1)在一个单链表中,已知每个结点包含data和next两个域,q所指结点是p所指结点的直接前驱,若在q和p之间插入s所指结点,则执行(___________)和(___________)操作。

答案:q->next = s; s->next = p; 或 s->next=q->next; q->next = s; (2)表长为n的顺序表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均个数为(___________),删除一个元素需要移动元素的平均个数为(___________)。答案:n/2 (n-1)/2

(3)表长为0的线性表称为(___________)。答案:空表

(4)动态内存管理是操作系统的基本功能之一,其作用是响应用户程序对内存的(___________)和(___________)请求。答案:申请释放

(5)顺序表多采用(___________)实现的,是一种随机存取结构,对表中任意结点存取操作的时间复杂度为(___________)。而查找链表中的结节,需要从头指针起顺着链扫描才能得到,平均时间复杂度为(___________)。因此,若线性表的操作主要是进行查找,很少进行插入或删除操作时,采用

(___________)表比较合适。答案:数组 O(1) O(n) 顺序

(6)在链表某个位置上进行插入和删除操作,只需要修改(___________)即可,而无须移动大量元素,操作的时间复杂度为(___________)。而在顺序表中进行插入和删除操作,往往要移动大量元素,平均移动元素的数目为

数据结构第二章 线性表答案

数据结构第二章  线性表答案

第2章线性表

一、单项选择题

1.B

2.A

3.C

4.C

5.C

6.B

7.B

8..A

9.D

10. B

11. B

12.B

13.C

二、判断题(在各题后填写“√”或“×”)

1. 链表中的头结点仅起到标识的作用。(× )

2.线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。( √ ) 3.顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。( × )

4. 对任何数据结构链式存储结构一定优于顺序存储结构。(× )

5. 所谓静态链表就是一直不发生变化的链表。( × )

6. 线性表的特点是每个元素都有一个前驱和一个后继。( × )

7. 循环链表不是线性表. ( × )

8. 线性表只能用顺序存储结构实现。( × )

9. 线性表就是顺序存储的表。( × )

10. 链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序存储结构中效率高。 (√ )

三、填空题

1.必定不一定

2.头指针头结点指针域前驱结点指针域

3.双向链表

4. nO(n)n/2O(n)

5.. 单链表循环链表双向链表

6.指针

7.(n-1)/2

8.py->next=px->next; px->next=py

9. 4 2

10. i=1; i≤st

11.(1)L->next=null ∥置空链表,然后将原链表结点逐个插入到有序表中

(2)p!=null ∥当链表尚未到尾,p为工作指针

(3)q!=null ∥查p结点在链表中的插入位置,这时q是工作指针。

(4)p->next=r->next ∥将p结点链入链表中

《数据结构》课后习题答案(第2版)

《数据结构》课后习题答案(第2版)

1 填空题

(1)数据元素(2)数据项数据元素(3)集合线性结构树结构图结构(4)顺序存储链接存储数据元素数据元素之间的关系

(5)零或多个输入一个或多个输出有穷性确定性可行性

(6)自然语言程序设计语言流程图伪代码,伪代码

(7)问题规模(8)O(1) O(nlog2n)

2 选择题

(1)C D (2)B (3) B (4) A (5) D (6)A (7) C (8) C E

3 判断题

×××√×

第二章

1 填空题

(1)表长一半表长位置

(2)108

(3)p->next=(p->next)->next;

(4)运算方便

(5)p->next=head;

(6)s->next=rear->next rear->next=s; rear=s;

q=rear->next->next; rear->next->next=q->next; delete q;

(7)O(1) O(n)

(8)循环单链表循环双链表双链表

2 选择题

(1) A B (2) D (3) B (4) A (5) A (6) D

(7) B

(8) B

(9) C

(10)B

(11)B

(12)D

(13)A

(14)A

3 判断题×××××

1 填空题

(1)1003H

(2)顺序栈和链栈top=-1或top==NULL top==数组长度或内存无可用空间(3)栈

(4)abc+*d-

(5)后进先出先进先出操作位置受限

(6)假溢出

(7)(rear-front+n)% n

(8)O(1) O(n)

2 选择题

数据结构课后习题答案第二章 线性表

数据结构课后习题答案第二章   线性表

第二章线性表

2.1描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。

并说明头指针和头结点的作用。

答:头指针是一个指针变量,里面存放的是链表中首结点的地址,并以此来标识一个链表。如链表H,链表L等,表示链表中第一个结点的地址存放在H、L中。头结点是附加在第一个元素结点之前的一个结点,头指针指向头结点。当该链表表示一个非空的线性表时,头结点的指针域指向第一个元素结点,为空表时,该指针域为空。

开始结点指第一个元素结点。

头指针的作用是用来惟一标识一个单链表。

头结点的作用有两个:一是使得对空表和非空表的处理得以统一。二是使得在链表的第一个位置上的操作和在其他位置上的操作一致,无需特殊处理。

2.2填空题

1、在顺序表中插入或删除一个元素,需要平均移动(表中一半)元素,具体移动的元素个数与(表长和该元素在表中的位置)有关。

2、顺序表中逻辑上相邻的元素的物理位置(必定)相邻。单链表中逻辑上相邻的元素的物理位置(不一定)相邻。

3、在单链表中,除了首元结点外,任一结点的存储位置由(其直接前驱结点的链域的值)指示。

4、在单链表中设置头结点的作用是(插入和删除元素不必进行特殊处理)。

2.3何时选用顺序表、何时选用链表作为线性表的存储结构为宜?

答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:

1.基于空间的考虑。当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。

数据结构课后习题答案-完整版

数据结构课后习题答案-完整版

数据结构课后习题答案-完整版下面是《数据结构课后习题答案-完整版》的内容:

---

第一章:数组

1. 题目:给定一个整数数组,判断是否存在两个元素之和等于目标值。

答案:使用双指针法,首先将数组排序,然后设置左指针指向数组头部,右指针指向数组尾部。如果左指针和右指针指向的元素之和小于目标值,则左指针右移;如果大于目标值,则右指针左移;如果等于目标值,则找到了两个元素之和等于目标值的情况。

2. 题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数的下标。

答案:使用哈希表,在遍历数组的过程中,将每个元素的值和下标存储在哈希表中。遍历到当前元素时,检查目标值与当前元素的差值是否在哈希表中,如果存在,则找到了两个数的下标。

---

第二章:链表

1. 题目:给定一个链表,判断链表中是否存在环。

答案:使用快慢指针法,定义两个指针,一个指针每次向前移动

一个节点,另一个指针每次向前移动两个节点。如果存在环,则两个

指针必定会相遇。

2. 题目:给定一个链表,删除链表的倒数第N个节点。

答案:使用双指针法,定义两个指针,一个指针先移动N个节点,然后两个指针同时向前移动,直到第一个指针到达链表尾部。此时第

二个指针指向的节点即为要删除的节点。

---

第三章:栈和队列

1. 题目:设计一个栈,使得可以在常数时间内获取栈中的最小元素。

答案:使用辅助栈来保存当前栈中的最小元素。每次压栈操作时,将当前元素与辅助栈的栈顶元素比较,只有当前元素较小才将其压入

辅助栈。

2. 题目:设计一个队列,使得可以在常数时间内获取队列中的最大

数据结构课后习题答案清华大学出版社殷人昆

数据结构课后习题答案清华大学出版社殷人昆
②数据成员极其关系在计算机存储器内的存储表示,也称为数据的物理结构,简称为存储结构;
3施加于该数据结构上的操作。
数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储不是一码事,是与计算机存储无关的。因此,数据的逻辑结构可以看作是从具体问题中抽象出来的数据模型,是数据的应用视图。数据的存储结构是逻辑数据结构在计算机存储器中的实现(亦称为映像),它是依赖于计算机的,是数据的物理视图。数据的操作是定义于数据逻辑结构上的一组运算,每种数据结构都有一个运算的集合。例如搜索、插入、删除、更新、排序等。
}
1-5用归纳法证明:
(1)
(2)
(3)
【证明】略
1-6什么是算法?算法的5个特性是什么?试根据这些特性解释算法与程序的区别。
【解答】
通常,定义算法为“为解决某一特定任务而规定的一个指令序列。”一个算法应当具有以下特性:
①有输入。一个算法必须有0个或多个输入。它们是算法开始运算前给予算法的量。这些输入取自于特定的对象的集合。它们可以使用输入语句由外部提供,也可以使用赋值语句在算法内给定。
(1)用cerr<<及exit(1)语句来终止执行并报告错误;
(2)用返回整数函数值0, 1来实现算法,以区别是正常返回还是错误返回;
(3)在函数的参数表设置一个引用型的整型变量来区别是正常返回还是某种错误返回。
试讨论这三种方法各自的优缺点,并以你认为是最好的方式实现它。

数据结构课后习题及解析第二章

数据结构课后习题及解析第二章

第二章习题

1. 描述以下三个概念的区别:头指针,头结点,首元素结点。

2. 填空:

(1)在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。

(2)在顺序表中,逻辑上相邻的元素,其物理位置相邻。在单链表中,逻辑上相邻的元素,其物理位置相邻。

(3)在带头结点的非空单链表中,头结点的存储位置由指示,首元素结点的存储位置由指示,除首元素结点外,其它任一元素结点的存储位置由指示。3.已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点。按要求从下列语句中选择合适的语句序列。

a. 在P结点后插入S结点的语句序列是:。

b. 在P结点前插入S结点的语句序列是:。

c. 在表首插入S结点的语句序列是:。

d. 在表尾插入S结点的语句序列是:。

供选择的语句有:

(1)P->next=S;

(2)P->next= P->next->next;

(3)P->next= S->next;

(4)S->next= P->next;

(5)S->next= L;

(6)S->next= NULL;

(7)Q= P;

(8)while(P->next!=Q) P=P->next;

(9)while(P->next!=NULL) P=P->next;

(10)P= Q;

(11)P= L;

(12)L= S;

(13)L= P;

4. 设线性表存于a(1:arrsize)的前elenum个分量中且递增有序。试写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。

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

《数据结构》第二章习题参考答案

一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”)

1、顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。( × )

2、链表中的头结点仅起到标识的作用。( × )

3、所谓静态链表就是一直不发生变化的链表。( × )

4、线性表的特点是每个元素都有一个前驱和一个后继。( × )

5、在顺序表中,逻辑上相邻的元素在物理位置上不一定相邻。(×)

6、线性表就是顺序存储的表。(×)

7、课本P84 2.4题

(1)√(2)×(3)×(4)×(5)√(6)×(7)×(8)√

(9)×(10)×(11)√(12)√

二、单项选择题

1、下面关于线性表的叙述中,错误的是哪一个?( B )

A.线性表采用顺序存储,必须占用一片连续的存储单元。

B.线性表采用顺序存储,便于进行插入和删除操作。

C.线性表采用链接存储,不必占用一片连续的存储单元。

D.线性表采用链接存储,便于插入和删除操作。

2、链表不具有的特点是( B )

A.插入、删除不需要移动元素B.可随机访问任一元素

C.不必事先估计存储空间D.所需空间与线性长度成正比

3、(1) 静态链表既有顺序存储的优点,又有动态链表的优点。所以,它存取表中第i个元素的时间与i无关。

(2) 静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。

(3) 静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。

以上错误的是( B )

A.(1),(2)B.(1)C.(1),(2),(3) D.(2)

4、在单链表指针为p的结点之后插入指针为s的结点,正确的操作是(B)A.p->link =s; s-> link =p-> link; B.s-> link =p-> link; p-> link =s; C.p-> link =s; p-> link =s-> link; D.p-> link =s-> link; p-> link =s;

5、若某线性表最常用的操作是取任一指定序号的元素及其前驱,则利用(C)存储方式最节省时间。

A.单链表B.双链表C.顺序表D.带头结点的双循环链表6、对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为( C )。A.O(n),O(n) B. O(n),O(1) C. O(1),O(n) D. O(1),O(1)

7、在一个以 h 为头的单循环链中,p 指针指向链尾的条件是( A )

A. p->next=h

B. p->next=NULL

C. p->next->next=h

D. p->data=-1

三、填空题

1、当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用___顺序____存储结构。

2、线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是__(n-1)/2______。

3、在单链表中设置头结点的作用是___可以使链表的操作统一、编程简洁___。

4、一个头指针为head的带头结点的单链表为空表的条件是:_head->link ==NULL 。

5.在一个长度为n的顺序表中第i个元素(1<=i<=n)之前插入一个元素时,需向后移动____n-i+1___个元素。

6、对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为__O(1)__,在给定值为x的结点后插入一个新结点的时间复杂度为__O(n)___。

四、综合题

1、线性表可用顺序表或链表存储。问:

(1)两种存储表示各有哪些主要优缺点?

(2)如果要求对n个表长动态变化的表进行处理,表的总数可能也发生改变,在此情况下,应选用哪种存储表示?为什么?

参考解答:

(1)顺序存储时,逻辑上相邻的数据元素,其物理存放地址也相邻。顺序存储的优点是存储密度大,存储空间利用率高,可实现随机存取;缺点是插入或删除元素时不方便。

链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针。链式存储的优点是插入或删除元素时很方便,使用灵活;缺点是存储密度小,存储空间利用率低,只能顺序存取。

(2)宜选用链式存储结构,有利于高效进行动态内存开辟和插入、删除操作。

2、试述头结点,首元结点,头指针这三个概念的区别。

参考解答:

在线性表的链式存储结构中,头指针指链表的指针,若链表有头结点则是链表的头结点的指针,头指针具有标识作用,故常用头指针冠以链表的名字。头结点是为了操作的统一、方便而设立的,放在第一元素结点之前,其数据域一般无意义(也可存放链表的长度、用做监视哨等),有头结点后,对在第一元素结点前插入结点和删除第一结点,其操作与对其它结点的操作统一了。而且无论链表是否为空,头指针均不为空。首元结点也就是第一元素结点,它是头结点后边的第一个结点。

3、课本P83 2.3题

参考解答:64 , 63

4、课本P85 2.10题

参考解答:

(1)

//删除最小元素并返回其值x,空出最小元素的位置用最后一个元素填补void SeqList::DelMin(T& x){

if(IsEmpty()){cerr<<”表为空!”<

int len = Length();

T temp, val;

GetData(1, temp);

for(int i=1;i<=len;i++){

GetData(i,val);

if(val < temp) temp=val;

}

x=temp;

int pos = Search(temp);

GetData(len,val);

SetData(pos,val);

Remove(len,val);

}

其他解答略……

5、课本P85 2.14题

参考解答:

(1)template

LinkNode* List::Locate(int i) //返回第i个元素的地址

{

if(i < 1 || i>Length()) return NULL; //i不合理,返回空指针

LinkNode* p = first->link;

int k = 1;

while(p!= NULL && k < i)//扫描直到链尾,找第i个结点

{

p = p->link;

k++;

}

return p;

}

(4)template

void List::Create(T* a,int n)

{

LinkNode* p = first;

for(int i = 0;i

{

相关文档
最新文档