1、数据结构期末考试复习题 第2章 线性表第2章 线性表一 选择题1下述哪一条是顺序存储结构的优点?( )A存储密度大 B插入运算方便 C删除运算方便 D可方便地用于各种逻辑结构的存储表示2下面关于线性表的叙述中,错误的是哪一个?( )A线性表采用顺序存储,必须占用一片连续的存储单元。B线性表采用顺序存储,便于进行插入和删除操作。C线性表采用链接存储,不必占用一片连续的存储单元。D线性表采用链接存储,便于插入和删除操作。3线性表是具有n个( )的有限序列(n0)。 A表元素 B字符 C数据元素 D数据项 E信息项4若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(
2、)存储方式最节省时间。A顺序表 B双链表 C带头结点的双循环链表 D单循环链表5某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( )存储方式最节省运算时间。A单链表 B仅有头指针的单循环链表 C双链表 D仅有尾指针的单循环链表6设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。A. 单链表 B.单循环链表 C. 带尾指针的单循环链表 D.带头结点的双循环链表7若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用( )存储方式最节省运算时间。A单链表 B双链表 C单循环链表 D带头结点的双循环链表8. 静态链表中指
3、针表示的是( ). A 内存地址 B数组下标 C下一元素地址 D左、右孩子地址9. 链表不具有的特点是( )A插入、删除不需要移动元素 B可随机访问任一元素 C不必事先估计存储空间 D所需空间与线性长度成正比10. 下面的叙述不正确的是( )A线性表在链式存储时,查找第i个元素的时间同i的值成正比 B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关11. 线性表的表元存储方式有((1))和链接两种。试指出下列各表中使用的是何种存储方式:表1是((2))存储方式;表2是
4、((3))存储方式;表3是((4))存储方式;表4是((5))存储方式。表左的s指向起始表元。 表元编号货号数量表元间联系1 618 40 2 2 205 2 3 3 103 15 4 4 501 20 5 5 781 17 6 6 910 24 0表1s 表元编号货号数量表元间联系 1 618 40 5 2 205 2 1 3 103 15 4 4 501 20 2 5 781 17 6 6 910 24 3表2s 表元编号货号数量表元间联系 1 618 40 5 2 205 2 13 103 15 4 4 501 20 0 5 781 17 6 6 910 24 3表3s 表元编号货号数量
5、表元间联系 1 2 1 618 40 5 2 2 205 2 1 0 3 103 15 4 6 4 501 20 0 3 5 781 17 6 1 6 910 24 3 5表4s 供选择的答案:A.连续 B.单向链接 C.双向链接 D.不连接 E.循环链接 F.树状 G.网状 H.随机 I.顺序 J.顺序循环12.(1) 静态链表既有顺序存储的优点,又有动态链表的优点。所以,它存取表中第i个元素的时间与i无关。 (2) 静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。 (3) 静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。以上错误的是( ) A(1),(2)
6、 B(1) C(1),(2),(3) D.(2)13. 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( )(1=iLlink=q;q-Rlink=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的结点之后插入指针为
7、s的结点,正确的操作是:( )。Ap-next=s;s-next=p-next; B s-next=p-next;p-next=s;Cp-next=s;p-next=s-next; D p-next=s-next;p-next=s; 25对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是( )Ahead=NULL Bheadnext=NULL Cheadnext=head Dhead!=NULL26. 在双向链表存储结构中,删除p所指的结点时须修改指针( )。A (p.llink).rlink:=p.rlink (p.rlink).llink:=p.llink;B p.llin
8、k:=(p.llink).llink (p.llink).rlink:=p;C (p.rlink).llink:=p p.rlink:=(p.rlink).rlinkD p.rlink:=(p.llink).llink p.llink:=(p.rlink).rlink;27. 双向链表中有两个指针域,llink和rlink分别指向前趋及后继,设p指向链表中的一个结点,现要求删去p所指结点,则正确的删除是( )(链中结点数大于2,p不是第一个结点)Ap.llink.rlink:=p.llink; p.llink.rlink:=p.rlink; dispose(p);Bdispose(p); p.
9、llink.rlink:=p.llink; p.llink,rlink:=p.rlink;Cp.llink.rlink:=p.llink; dispose(p); p.llink.rlink:=p.rlink;D以上A,B,C都不对。 二、判断1. 链表中的头结点仅起到标识的作用。( ) 2. 顺序存储结构的主要缺点是不利于插入或删除操作。( )3线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。( )4顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。( )5. 对任何数据结构链式存储结构一定优于顺序存储结构。( )6顺序存储方式只能用于存储线性结构。( )7集合与线性
10、表的区别在于是否按关键字排序。( ) 8. 所谓静态链表就是一直不发生变化的链表。( ) 9. 线性表的特点是每个元素都有一个前驱和一个后继。( ) 10. 取线性表的第i个元素的时间同i的大小有关. ( ) 11. 循环链表不是线性表. ( ) 12. 线性表只能用顺序存储结构实现。( ) 13. 线性表就是顺序存储的表。( ) 14为了很方便的插入和删除数据,可以使用双向链表存放数据。( )15. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( )16. 链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序存储结构中效率高。 ( ) 三、填空1当线性表的元素总
11、数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用_存储结构。2线性表L=(a1,a2,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是_。3设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x的结点,指针py指向data为y的新结点 , 若将结点y插入结点x之后,则需要执行以下语句:_; _;4在一个长度为n的顺序表中第i个元素(1=i0 DO BEGIN (2); (3); (4); (5); read(k) END;q.next:=NIL;END; 21. 已给如下关于
12、单链表的类型说明: TYPE list=node ;node=RECORD data: integer; next: list; END; 以下程序采用链表合并的方法,将两个已排序的单链表合并成一个链表而不改变其排序性(升序),这里两链表的头指针分别为p和q.PROCEDURE mergelink(VAR p,q:list): VAR h,r: list; BEGIN (1)_ h.next:= NIL; r:=h; WHILE(pNIL) AND (qNIL) DO IF (p.data=q.data)THEN BEGIN (2)_; r:=p; p:=p.next; END ELSE BE
13、GIN (3)_; r:=q; q:=q.next; END; IF (p=NIL) THEN r.next:=q; (4)_; p:=h.next; dispose(h); END; 22假设链表p和链表q中的结点值都是整数,且按结点值的递增次序链接起来的带表头结点的环形链表。各链表的表头结点的值为max,且链表中其他结点的值都小于max,在程序中取max为9999。在各个链表中,每个结点的值各不相同,但链表p和链表q可能有值相同的结点(表头结点除外)。下面的程序将链表q合并到链表p中,使得合并后的链表是按结点值递增次序链接起来的带表头结点的环形链表,且链表中各个结点的值各不相同。请在划线处
14、填上适当内容,每个框只填一个语句或一个表达式,链表的结点类型如下TYPE nodeptr=nodetype; nodetype=RECORD data:integer; link:nodeptr;END;CONST max=9999;PROCEDURE merge(VAR p:nodeptr;q:nodeptr); VAR r,s: nodeptr; BEGIN r:=p; WHILE (A)_ DO BEGIN WHILE r.link.dataq.link.data THEN BEGIN s:=(C)_; (D)_:=s.link; s.link:=(E)_; (F)_ _:=s; (G)
15、_; END ELSE BEGIN (H)_; s:=q.link; (I)_; dispose(s) END END; dispose(q)END; 23PROC ins_linklist(la:linkisttp; i:integer; b:elemtp);la为指向带头结点的单链表的头指针,本算法在表中第i个元素之前插入元素bp:=(1) ; j:=(2) ;指针初始化,j为计数器WHILE (pNIL) AND (3) ) DO p:=(4) ; j:=j+1; 寻找第 i-1 个结点IF (p=NIL) OR (5) ) THEN error (No this position) E
16、LSE new(s) ; s.data:=b; s.next:=p.next; p.next:=s;ENDP;ins-linklist24. 已知双链表中结点的类型定义为:TYPE dpointer=list;list=RECORDdata:integer; left,right:dpointer;END;如下过程将在双链表第i个结点(i=0)之后插入一个元素为x的结点,请在答案栏给出题目中_处应填入的语句或表达式,使之可以实现上述功能。PROCEDURE insert(VAR head:dpointer;i,x:integer);VAR s,p:dpointer; j: integer;BE
17、GINnew(s); s.data:=x;IF(i=0)THEN BEGIN s.right:=head; (1)_ head:=s END如果i=0,则将s结点插入到表头后返回ELSE BEGIN p:=head; (2)_;在双链表中查找第i个结点,由p所指向 WHILE (pNIL) AND (ji) DO BEGIN j:=j+1; (3) _ END; IF pNIL THENIF (p.right=NIL) THEN BEGIN p.right:=s; s.right:=NIL; (4) _END ELSE BEGIN s.right:=p.right; (5) _;p.right
18、:=s; (6) END ELSE writeln(can not find node!) ENDEND; 25阅读以下算法,填充空格,使其成为完整的算法。其功能是在一个非递减的顺序存储线性表中,删除所有值相等的多余元素。 CONST maxlen=30TYPE sqlisttp=RECORD elem:ARRAY1.maxlen OF integer; last:0.maxlen END;PROC exam21(VAR L:sqlisttp); j:=1; i:=2; WHILE (1)_ DO IF L.elemiL.elemj THEN (2)_; (3)_; i:=i+1 (4) _;
19、 ENDP; 26在本题的程序中,函数过程Create_link_list(n)建立一个具有n个结点的环形链表;程序过程 josephus(n,i,m)对由Create_link_list(n)所建立的具有n个结点的环形链表按一定的次序逐个输出并删除链表中的所有结点,参数 n(n0)指明环形链表的结点个数,参数 i(1=i0)是步长,指明从起始结点或前次被删除并输出的结点之后的第m个结点作为本次被输出并删除的结点。例如,对于下图中具有6个结点的环形链表,在调用 josephus(6,3,2)后,将输出 5,1,3,6,4,2 请在横线处填上适当内容,每空只填一个语句。 TYPE nodeptr=nodetype; nodetype=RECORDdata: intrger; link: nodeptr END; VAR n,i,m: integer; FUNCTION Create_link_list(n: integer): nodeptr; VAR head,p,q: nodeptr; i:integer; BEGIN head := NIL; IF n0 THEN BEGIN new(head); p: =head; FOR i:=1 TO n-1 DO BEGIN p.data:=i; new(q); (A
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1