数据结构第2章习题及答案.docx
- 文档编号:24865165
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:20
- 大小:28.03KB
数据结构第2章习题及答案.docx
《数据结构第2章习题及答案.docx》由会员分享,可在线阅读,更多相关《数据结构第2章习题及答案.docx(20页珍藏版)》请在冰豆网上搜索。
数据结构第2章习题及答案
7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。
则采用( )存储方式最节省运算时间。
【北京理工大学2000一、1(2分)】
A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表
8.静态链表中指针表示的是( ).【北京理工大学2001六、2(2分)】
A.内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址
9.链表不具有的特点是( )【福州大学1998一、8(2分)】
A.插入、删除不需要移动元素 B.可随机访问任一元素
C.不必事先估计存储空间 D.所需空间与线性长度成正比
10.下面的叙述不正确的是( )【南京理工大学1996一、10(2分)】
A.线性表在链式存储时,查找第i个元素的时间同i的值成正比
B.线性表在链式存储时,查找第i个元素的时间同i的值无关
C.线性表在顺序存储时,查找第i个元素的时间同i的值成正比
D.线性表在顺序存储时,查找第i个元素的时间同i的值无关
11.线性表的表元存储方式有(
(1))和链接两种。
试指出下列各表中使用的是何种存储方式:
表1是(
(2))存储方式;表2是((3))存储方式;表3是((4))存储方式;表4是((5))存储方式。
表左的s指向起始表元。
供选择的答案:
A.连续 B.单向链接 C.双向链接 D.不连接 E.循环链接
F.树状 G.网状 H.随机 I.顺序 J.顺序循环
【上海海运学院1995二、1(5分)】
12.
(1)静态链表既有顺序存储的优点,又有动态链表的优点。
所以,它存取表中第i个元素的时间与i无关。
(2)静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。
(3)静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。
以上错误的是( )【南京理工大学2000一、3(1.5分)】
A.
(1),
(2) B.
(1) C.
(1),
(2),(3) D.
(2)
13.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( )(1Rlink=p;p->Llink->Rlink=q;q->Llink=q;
B. p->Llink=q;p->Llink->Rlink=q;q->Rlink=p;q->Llink=p->Llink;
C. q->Rlink=p;q->Llink=p->Llink;p->Llink->Rlink=q;p->Llink=q;
D. q->Llink=p->Llink;q->Rlink=q;p->Llink=q;p->Llink=q;
24.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:
( )。
A.p->next=s;s->next=p->next; B.s->next=p->next;p->next=s;
C.p->next=s;p->next=s->next; D.p->next=s->next;p->next=s;
【青岛大学2001五、3(2分)】
25.对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是( )
A.head==NULL B.head→next==NULL C.head→next==head D.head!
=NULL
【北京工商大学2001一、5(3分)】
26.在双向链表存储结构中,删除p所指的结点时须修改指针( )。
A.(p^.llink)^.rlink:
=p^.rlink (p^.rlink)^.llink:
=p^.llink;
B.p^.llink:
=(p^.llink)^.llink (p^.llink)^.rlink:
=p;
C.(p^.rlink)^.llink:
=p p^.rlink:
=(p^.rlink)^.rlink
D.p^.rlink:
=(p^.llink)^.llink p^.llink:
=(p^.rlink)^.rlink;
【西安电子科技大学1998一、1(2分)】
27.双向链表中有两个指针域,llink和rlink分别指向前趋及后继,设p指向链表中的一个结点,现要求删去p所指结点,则正确的删除是( )(链中结点数大于2,p不是第一个结点)
A.p^.llink^.rlink:
=p^.llink; p^.llink^.rlink:
=p^.rlink; dispose(p);
B.dispose(p); p^.llink^.rlink:
=p^.llink; p^.llink^,rlink:
=p^.rlink;
C.p^.llink^.rlink:
=p^.llink; dispose(p); p^.llink^.rlink:
=p^.rlink;
D.以上A,B,C都不对。
【南京理工大学1997一、1(2分)】
二、判断
1.链表中的头结点仅起到标识的作用。
( )【南京航空航天大学1997一、1(1分)】
2.顺序存储结构的主要缺点是不利于插入或删除操作。
( )【南京航空航天大学1997一、2(1分)】
3.线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。
( )
【北京邮电大学1998 一、2(2分)】
4.顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。
( )
【北京邮电大学2002一、2(1分)】
5.对任何数据结构链式存储结构一定优于顺序存储结构。
( )【南京航空航天大学1997一、3(1分)】
6.顺序存储方式只能用于存储线性结构。
( )
【中科院软件所1999六、1-2(2分)】【上海海运学院1997一、1(1分)】
7.集合与线性表的区别在于是否按关键字排序。
( )【大连海事大学2001一、5(1分)】
8.所谓静态链表就是一直不发生变化的链表。
( )【合肥工业大学2000二、1(1分)】
9.线性表的特点是每个元素都有一个前驱和一个后继。
( )【合肥工业大学2001二、1(1分)】
10.取线性表的第i个元素的时间同i的大小有关.( )【南京理工大学1997二、9(2分)】
11.循环链表不是线性表.( )【南京理工大学1998二、1(2分)】
12.线性表只能用顺序存储结构实现。
( )【青岛大学2001四、2(1分)】
13.线性表就是顺序存储的表。
( )【青岛大学2002一、1(1分)】
14.为了很方便的插入和删除数据,可以使用双向链表存放数据。
( )
【上海海运学院1995一、1(1分)】 【上海海运学院1997一、2(1分)】
15.顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
( )
【上海海运学院1996一、1(1分)】 【上海海运学院1999一、1(1分)】
16.链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序存储结构中效率高。
( ) 【上海海运学院1998一、2(1分)】
三、填空
1.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用_______存储结构。
【北方交通大学2001二、4】
2.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是________。
【北方交通大学2001二、9】
3.设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x的结点,指针py指向data为y的新结点,若将结点y插入结点x之后,则需要执行以下语句:
_______;______;【华中理工大学2000一、4(2分)】
4.在一个长度为n的顺序表中第i个元素(11DOBEGINp:
=p^.link; i:
=i-1 END;
(D)___;
WHILE jp^.pre^.freq DO p:
=p^.pre;
IF pq THEN [(3)______]
];
IF(4)_THEN[q^.next:
=p,q^.pre;=p^.pre;p^.pre^.next:
=q; p^.pre:
=q]
return(q);
END;【北京工业大学1999五(12分)】
29.循环链表a和b的结点值为字母,其中a表非递减有序,下面的程序欲构造一个递增有序的循环链表c,其中结点的值为同时在a,b两链表中出现的字母,且c中字母不重复,请补上程序中空缺的部分,并估计算法的时间复杂度。
(设a,b的结点数分别为m,n)
TYPE
link=^node;
node=RECORD
key:
char; next:
link
END;
PROC jj(a,b:
link;VAR c:
link);
VAR p,q,r,s:
link;
BEGIN
new(c);c^.next:
=c; q:
=a; p:
=a^.next;
WHILE paDO
[
(1)___;
WHILE p^.key=p^.next^.key DO [q:
=p; p=p^.next];{跳过相同字母}
r:
=b^.next;
(2)_____;
WHILE r^.keyp^.keyDOr:
=r^.next;
IF rb THEN
[s:
=p; q^.next:
=p^.next; (3) ;
s^.next:
=c^.next; c^.next:
=s; c:
=s]
ELSE[q:
=p; p:
=p^.next]
]; c:
=c^.next;
END;
算法时间复杂度为O(4)___ 【北京工业大学2000四(15分)】
30.以下程序的功能是实现带附加头结点的单链表数据结点逆序连接,请填空完善之。
voidreverse(pointerh)
/*h为附加头结点指针;类型pointer同算法设计第3题*/
{pointerp,q;
p=h->next; h->next=NULL;
while(
(1)________)
{q=p;p=p->next;q->next=h->next;h->next=
(2)________; }
}【西南交通大学2000一、9】
31.下面是用c语言编写的对不带头结点的单链表进行就地逆置的算法,该算法用L返回逆置后的链表的头指针,试在空缺处填入适当的语句。
void reverse(linklist&L){
p=null;q=L;
while(q!
=null)
{
(1) ; q->next=p;p=q;
(2)___ ;}
(3)_____;
}【北京理工大学2001九、1(6分)】
32.下面程序段是逆转单向循环链表的方法,p0是原链表头指针,逆转后链表头指针仍为p0。
(可以根据需要增加标识符)
p:
=p0; q0:
=NIL;
WHILE
(1)________DO
BEGIN
(2)________;(3)________;(4)______;(5)________ END;
p^.next:
=q0; p0^.next:
=p; p0:
=p;【中国人民大学2000二、1(4分)】
33.一个无头结点的线性链表(不循环)有两个域。
数据域data,指针域next,链首head,下面算法用read(num)读入数据,当num小于0时,输入结束。
建立一个数据以递增序组成的链表。
PROC insert(head,x);
{在链首为head的表中按递增序插入x}
new(r);r^.data:
=x;
IFhead=NIL
THEN[head:
=
(1)_____;r^.next:
=
(2)________]
ELSEIF(3)___THEN[r^.next:
=head; head:
=r]
ELSE [p:
=head;
WHILE(4)___ AND (p^.next≠NIL)DO[q:
=p;(5)___ ];
IF(6)___ THEN[q^.next:
=(7)___;r^.next:
=(8)____;]
ELSE[p^.next:
=(9)____;r^.next:
=(10)___; ]
]
ENDP;
PROC creat(head);
head:
=(11)______;read(num);
WHILE num>0 DO
[insert(head,num);read(num)]
ENDP;【南京理工大学1999三、4(11分)】
34.一元稀疏多项式以循环单链表按降幂排列,结点有三个域,系数域coef,指数域exp和指针域next;现对链表求一阶导数,链表的头指针为ha,头结点的exp域为–1。
derivative(ha)
{q=ha; pa=ha->next;
while(
(1)_______)
{if(
(2)____){((3)__);free(pa); pa=((4)_); }
else{pa->coef((5)___);pa->exp((6)___);q=((7)__);}
pa=((8)________);
}
} 【南京理工大学2000三、3(10分)】
35.下面是删除单链表L中最大元素所在结点的类PASCAL语言算法,请在横线填上内容,完成其功能。
TYPE pointer=↑node;
node=RECORD
data:
integer; next:
pointer
END;
PROCEDUREdelmax(L:
pointer);
VAR p,q,r:
pointer;m:
integer;
BEGIN
r:
=L;p:
=L↑.next;
IF pNIL THEN
[m:
=p↑.data;
(1)________; p:
=p↑.next;
WHILEpNILDO
[IF
(2)________THEN [(3)________; m:
=p↑.data;]
(4)________;p:
=p↑.next;
]
q:
=r↑.next;(5)______;dispose(q);
]
END;【北京科技大学1998二】
36.对单链表中元素按插入方法排序的C语言描述算法如下,其中L为链表头结点指针。
请填充算法中标出的空白处,完成其功能。
typedefstructnode
{intdata; structnode*next;
}linknode,*link;
voidInsertsort(linkL)
{linkp,q,r,u;
p=L->next;
(1)______;
while(
(2)________)
{r=L; q=L->next;
while((3)________&&q->datadata){r=q;q=q->next;}
u=p->next; (4)______; (5)______; p=u;
}
}【北京科技大学2001二(10分)】
37.下面是一个求两个集合A和B之差C=A-B的程序,即当且仅当e是A的一个元素,但不是B中的一个元素时,e才是C中的一个元素。
集合用有序链表实现,初始时,A,B集合中的元素按递增排列,C为空;操作完成后A,B保持不变,C中元素按递增排列。
下面的函数append(last,e)是把值为e的新结点链接在由指针last指向的结点的后面,并返回新结点的地址;函数difference(A,B)实现集合运算A-B,并返回表示结果集合C的链表的首结点的地址。
在执行A-B运算之前,用于表示结果集合的链表首先增加一个附加的表头结点,以便新结点的添加,当A-B运算执行完毕,再删除并释放表示结果集合的链表的表头结点。
程序(a)(编者略去这个PASCAL程序)
程序(b)
typedefstructnode{intelement; structnode*link;
}NODE;
NODE *A,*B,*C;
NODE *append(NODE*last,inte)
{ last->link=(NODE*)malloc(sizeof(NODE));
last->link->element=e;
return(last->link);
}
NODE*difference(NODE*A,NODE*B)
{NODE*C,*last;
C=last=(NODE*)malloc(sizeof(NODE));
while
(1)___
if(A->elementelement){last=append(last,A->element); A=A->link; }
else if
(2)___{A=A->link; B=B->link; }ELSE (3)___;
while(4)__
{last=append(last,A->element);A=A->link; }
(5)___; last=C; C=C->link; free(last); return(C);
}
/*callform:
C=difference(A,B);*/【上海大学2000一、4(10分)】
四 应用题
1.线性表有两种存储结构:
一是顺序表,二是链表。
试问:
(1)如果有n个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。
在此情况下,应选用
9.在单链表和双向链表中,能否从当前结点出发访问到任何一个结点?
【西安电子科技大学1999计应用一、1(5分)】
10.如何通过改链的方法,把一个单向链表变成一个与原来链接方向相反的单向链表?
【中国人民大学2001二、4(2分)】
11.下面是一算法的核心部分,试说明该算法的功能。
pre:
=L↑.next;
{L是一单链表,结点有数据域data和指针域next}
IF preNIL THEN
WHILE pre↑.nextNILDO
BEGINp:
=pre↑.next;IFp↑.data>=pre↑.data THEN pre:
=p ELSEreturn(false)END;
return(true);【燕山大学2000七、1(7分)】
12.设单链表结点指针域为next,试写出删除链表中指针p所指结点的直接后继的C语言语句。
【北京科技大学2000一、3】
13.设单链表中某指针p所指结点(即p结点)的数据域为data,链指针域为next,请写出在p结点之前插入s结点的操作(PASCAL语句)。
【北京科技大学1999一、2(2分)】
14.有线性表(a1,a2,…,an),采用单链表存储,头指针为H,每个结点中存放线性表中一个元素,现查找某个元素值等于X的结点。
分别写出下面三种情况的查找语句。
要求时间尽量少。
(1)线性表中元素无序。
(2)线性表中元素按递增有序。
(3)线性表中元素按递减有序。
【北京邮电大学1994七(7分)】
15.设pa,pb分别指向两个带头结点的有序(从小到大)单链表。
仔细阅读如下的程序,并回答问题:
(1)程序的功能。
(2)s1,s2中值的含义。
(3)pa,pb中值的含义。
PROCEDURE exam(pa,pb)
BEGIN
p1:
=pa↑.next;p2:
=pb↑.next;pa↑.next:
=∧;s1:
=0;s2:
=0;
WHILE p1≠∧ ANDp2≠∧ DO
[CASEp1↑.data
p1↑.data>p2↑.data:
p2:
=p2↑.next;
p1↑.data=p2↑.data:
[p:
=p1;p1:
=p1↑.next;p↑.next:
=pa↑.next;
pa↑.next:
=p;p2:
=p2↑.next;s1:
=s1+1; ];
END
];
WHILE p1≠∧ DO[p:
=p1;p1:
=p1↑.next;dispose(p);s2:
=s2+1]
END;【南京航空航天大学1995十(9分)】
16.写出下图双链表中对换值为23和15的两个结点相互位置时修改指针的有关语句。
结点结构为:
(llink,data,rlink) 【北京邮电大学1992三、4(25/4分)】
18.已知L是一个数据类型linkedlist的单循环链表,pa和pb是指向L中结点的指针。
简述下列程序段的功能。
【山东科技大学2001一、2(5分)】
TYPElinkedlist=↑node;
node=RECORD
data:
datatype;next:
linkedlist
END;
PROC Mp(pa,pb:
linkedlist);
PROC subp(s,q:
linkedlist);
p:
=s;
WHILE p↑.nextq DO p:
=p↑.next;
p↑.next:
=s
ENDP;
subp(pa,pb);
subp(pb,pa);
ENDP;
19.设双向循环链表中结点的数据域、前驱和后继指针域分别为data,pre和next,试写出在指针p所指结点之前插入一s结点的C语言描述语句。
【北京科技大学2001一、3(2分)】
20.本题给出一个子程序的框图,如图2,试填空完善此算法框图。
该子程序用来寻找第一个均出现在三个整数单
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 习题 答案