好文档 - 专业文书写作范文服务资料分享网站

数据结构实用教程(第三版)课后答案

天下 分享 时间: 加入收藏 我要投稿 点赞

} ⑻解:

ostream& operator<<(ostream& ostr,Set& s) {

ostr<<'{'

for(int i=1;i<=SETSIZE;i++) if(s.m[i]==1) ostr<

类别:数据结构

file:///D|/-------------------上架商品-----...程 (第二版) 课后答案 (徐孝凯 著) 清华大学出版社/第一章 绪论.txt(第 10/10 页)[2010-3-16 22:06:17]

file:///D|/-------------------上架商品---------------/数据结构实用教程 (第二版) 课后答案 (徐孝凯 著) 清华大学出版社/第二章 线性表.txt 习 题 二 一、单选题

1.在一个长度为n的顺序存储的线性表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,

需要从年向前依次移 B 个元素。

A n-i B n-i+1 C n-i-1 D i

2.在一个长度为n的顺序存储的线性表中,删除第i个元素(1≤i≤n+1)时,需要从前向后依次

前移 A 个元素。

3.在一个长度为n的线性表中顺序查找值为x的元素时,查找成功的平均查找长度(即x同元素

的平均比较次数,假定查找每个元素的概率都相等)为 C 。 A n B n/2 C (n+1)/2 D (n-1)/2

4.在一个单链表HL中,若要向表头插入一个自由指针p指向的结点,则执行 B 。 A HL=p;p->next=HL; B p=next=HL; HL=p;

C p->next=HL; p=HL; D p->next=HL->next;HL->next=p;

5.在一个单链表HL中,若要在指针q所指结点的后面插入一个自由指针p所指向的结点,则执行 D 。

A q->next=p->next;p->next=q; B p->next=q->next;q=p;

C q->next=p->next;p->next=q D p->next=q->next;q->next=p;

6.在一个单链表HL中,若要删除由指针q所指向结点的后继结点,则执行 C 。 A p=q->next;p->next=q->next; B p=q->next;q->next=p;

C p=q->next;q->next;q->next=q; D q->next=q=->Next->next;q->next=q;

. . .

二、填空题

1.在线性表的单链接存储结构中,每个结点包含有两个域,一个叫 值 ,另一个叫 指针 域。 2.在下面数组a中链接存储着一个线性表,表头指针为a[0].next,则该线性表为 (38,56,25, 60,42,74) 。

a 0 1 2 3 4 5 6 7 8

data 60 56 42 38 74 25 next 4 3 7 6 2 0 1 3.对于一个长度为l的顺序存储的线性表,在表头插入元素的时间复杂度帾 o(n) ,在表尾插

入元素的时间复杂度为 O(1) 。 4.对于一个单链接存储的线性表,在表头插入结点祫时话里有话复杂度为 o(1) ,在表尾插入

元素的时间复杂度为 o(n) 。

5.在线性表的顺序存储中,若一个元素的下标为i,则它的前驱元素的下标为 i-1 ,后继元素

的下标为 i+1 。

file:///D|/-------------------上架商品------...程 (第二版) 课后答案 (徐孝凯 著) 清华大学出版社/第二章 线性表.txt(第 1/21 页)[2010-3-16 22:06:59]

file:///D|/-------------------上架商品---------------/数据结构实用教程 (第二版) 课后答案 (徐孝凯 著) 清华大学出版社/第二章 线性表.txt

6.在线性表的单链接存储中,若一个元素所在结点的地址为p,则后继结点的地址为 p->next ,

若假定p为一个数组a中的下标,则其后继结点的下标为 a[p].next 。 7.在循环单链接表中,最后一个结点的指针域指向 表头 结点。

8.在双向链接表中每个结点包含有两个针域,一个指向其 前驱 结点,另一个指向其 后继 结点。

9.在循环双向链接表中表头结点的左指针域指向 表尾 结点,最后一个结点的右指针域指 向 表头 结点。

10.在以HL为表头指针的带表头附加结点的单链接表中,链表为空的条件分别为 HL->next==NULL HL->next==HL 。

11.在由数组a中元素结点构成的单链表中,删除下标为i的结点后,需要把该结点插入到空闲表的

表头,具体操作为 a[i].next=a[1].next;a[1].next=i; 。

12.在由数组a中元素结点构成的单链表中,在插入下标为i的结点后,需要从空闲表头中删除一个

结点,并将该结点下标赋给i,具体操作为 i=a[1].next;a[1].next=a[i].next; 。

13.在由数组a中元素结点构成的单链表中,删除下标为i的后继结点并将被删除结点的下标赋给i时

,所进行的操作描述为 p=a[i].next;a[i].next=a[p].next;i=p; 。

14.在由数组a中元素结点构成的单链表中,在下标为i的结点的后面插入一个下标为j的结点时,需

要进行的操作为 a[j].next=a[i].next;a[i].next=j; 。

. . .

三、普通题 1.

⑴解:(79,62,34,57,26,48) ⑵解:(26,34,48,57,62,79) ⑶解:(48,56,57,62,79,34) ⑷解:(56,57,79,34)

⑸解:(26,34,39,48,57,62) 2. 解:

file:///D|/-------------------上架商品------...程 (第二版) 课后答案 (徐孝凯 著) 清华大学出版社/第二章 线性表.txt(第 2/21 页)[2010-3-16 22:06:59]

file:///D|/-------------------上架商品---------------/数据结构实用教程 (第二版) 课后答案 (徐孝凯 著) 清华大学出版社/第二章 线性表.txt 为了排版方便,假定采用以下输出格式表示单链接表的示意图;每个括号内的数据表示一个元

素结点,其中第一个数据为元素值,第二个数据为后继结点的指针,第一个元素结点前的数值为

表头指针。

⒈(7(79,6),(62,5),(34,4),(57,3),(26,2),(48,0)) ⒉(3(26,5),(34,2),(48,4),(57,6),(62,7),(79,0)) ⒊(2(48,8),(56,4),(57,6),(62,7),(79,5),(34,0)) ⒋(8(56,4),(57,7),(79,5),(34,0))

3.对于List类型的线性表,编写出下列每个算法。

⑴ 从线性表中删除具有最小值的元素并由函数返回,空出的位置由最后一个元素填补,若 线性表为空则显示出错信息并退出运行。 解: ElemType DMValue(List&L)

//从线性表中删除具有最小值的元素并由函数返回,空出的位置 //由最后一个元素填补,若线性表为空则显示出错信息并退出运行 {

if(ListEmpty(L)){

cerr<<\ exit(1); }

ElemType x; x=L.list[0]; int k=0;

for(int i=1;i

L.list[k]=L.list[L.size-1]; L.size--; return x;

. . .

}

⑵ 从线性表中删除第i个元素并由函数返回。 解:int Deletel(List& L,int i)

//从线性表中删除第i个元素并由函数返回 {

if(i<1||i>L.size){

cerr<<\ exit(1); }

ElemType x; x=L.list[i-1];

for(int j=i-1;j

file:///D|/-------------------上架商品------...程 (第二版) 课后答案 (徐孝凯 著) 清华大学出版社/第二章 线性表.txt(第 3/21 页)[2010-3-16 22:06:59]

file:///D|/-------------------上架商品---------------/数据结构实用教程 (第二版) 课后答案 (徐孝凯 著) 清华大学出版社/第二章 线性表.txt return x; }

⑶ 向线性表中第i个元素位置插入一个元素。 解:void Inser1(List& L,int i,ElemType x)

//向线性表中第i个元素位置插入一个元素 {

if(i<1||i>L.size+1){

cerr<<\ exit(1); }

if(L.size==MaxSize) {

cerr<<\ exit(1); }

for(int j=L.size-1;j>i-1;j--) L.list[j+1]=L.list[j]; L.list[i-1]=x; L.size++; }

⑷ 从线性表中删除具有给定值x的所有元素。 解:void Delete2(List& L,ElemType x)

//从线性表中删除具有给定值x的所有元素 {

int i=0;

. . .

while(i

for(int j=i+1;j

⑸ 从线性表中删除其值在给定值s和t之间(要求s小于t)的所有元素。 解:void Delete3(List& L,ElemType s,ElemType t)

//从线性表中删除其值在给定值s和t之间的所有元素 {

int i=0;

while(i

file:///D|/-------------------上架商品------...程 (第二版) 课后答案 (徐孝凯 著) 清华大学出版社/第二章 线性表.txt(第 4/21 页)[2010-3-16 22:06:59]

file:///D|/-------------------上架商品---------------/数据结构实用教程 (第二版) 课后答案 (徐孝凯 著) 清华大学出版社/第二章 线性表.txt if((L.list[i]>=s)&&(L.list[i]<=t)){ for(int j=i+1;j

⑹ 从有序表中删除其值在给定值s和t之间(要求s小于t)的所有元素。 解:void Delete4(List& L,ElemType s,ElemType t)

//从有序表中删除其值在给定值s和t之间的所有元素 {

int i=0;

while(i

While((i+j

. . .

44twa34kwj1emx02sb8q8qp2012imx011ie
领取福利

微信扫码领取福利

微信扫码分享