=i*2;
三、基础知识题
1.数据结构是一门研究什么内容的学科?
2.数据元素之间的关系在计算机中有几种表示方法?
各有什么特点?
3.数据类型和抽象数据类型是如何定义的。
二者有何相同和不同之处,抽象数据类型的主要特点是什么?
使用抽象数据类型的主要好处是什么?
4.回答问题(每题2分)
(1)在数据结构课程中,数据的逻辑结构,数据的存储结构及数据的运算之间存在着怎样的关系?
(2)若逻辑结构相同但存储结构不同,则为不同的数据结构。
这样的说法对吗?
举例说明之。
(3)在给定的逻辑结构及其存储表示上可以定义不同的运算集合,从而得到不同的数据结构。
这样说法对吗?
举例说明之。
(4)评价各种不同数据结构的标准是什么?
5.评价一个好的算法,您是从哪几方面来考虑的?
6.解释和比较以下各组概念
抽象数据类型及数据类型
数据结构、逻辑结构、存储结构
抽象数据类型
算法的时间复杂性(5)算法(6)频度
7.根据数据元素之间的逻辑关系,一般有哪几类基本的数据结构?
8.对于一个数据结构,一般包括哪三个方面的讨论?
9.当你为解决某一问题而选择数据结构时,应从哪些方面考虑?
10.若将数据结构定义为一个二元组(D,R),说明符号D,R应分别表示什么?
11.数据结构与数据类型有什么区别?
12.数据的存储结构由哪四种基本的存储方法实现?
13.若有100个学生,每个学生有学号,姓名,平均成绩,采用什么样的数据结构最方便,写出这些结构?
14.运算是数据结构的一个重要方面。
试举一例,说明两个数据结构的逻辑结构和存储方式完全相同,只是对于运算的定义不同。
因而两个结构具有显著不同的特性,是两个不同的结构。
15.在编制管理通讯录的程序时,什么样的数据结构合适?
为什么?
16.试举一例,说明对相同的逻辑结构,同一种运算在不同的存储方式下实现,其运算效率不同。
17.有实现同一功能的两个算法A1和A2,其中A1的时间复杂度为Tl=O(2n),A2的时间复杂度为T2=O(n2),仅就时间复杂度而言,请具体分析这两个算法哪一个好。
18.设计一数据结构,用来表示某一银行储户的基本信息:
账号、姓名、开户年月日、储蓄类型、存入累加数、利息、帐面总数。
第二章线性表
一、选择题
1.下述哪一条是顺序存储结构的优点?
()
A.存储密度大B.插入运算方便
B.C.删除运算方便D.可方便地用于各种逻辑结构的存储表示
2.下面关于线性表的叙述中,错误的是哪一个?
()
A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
3.线性表是具有n个()的有限序列(n>0)。
A.表元素B.字符C.数据元素
D.数据项E.信息项
4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A.顺序表B.双链表
C.带头结点的双循环链表D.单循环链表
5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
A.单链表B.仅有头指针的单循环链表
C.双链表D.仅有尾指针的单循环链表
6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用()最节省时间。
A.单链表B.单循环链表
C.带尾指针的单循环链表D.带头结点的双循环链表
7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。
则采用()存储方式最节省运算时间。
A.单链表B.双链表
C.单循环链表D.带头结点的双循环链表
8.静态链表中指针表示的是().
A.内存地址B.数组下标
C.下一元素地址D.左、右孩子地址
9.链表不具有的特点是()
A.插入、删除不需要移动元素B.可随机访问任一元素
C.不必事先估计存储空间D.所需空间与线性长度成正比
10.下面的叙述不正确的是()
A.线性表在链式存储时,查找第i个元素的时间同i的值成正比
B.线性表在链式存储时,查找第i个元素的时间同i的值无关
C.线性表在顺序存储时,查找第i个元素的时间同i的值成正比
D.线性表在顺序存储时,查找第i个元素的时间同i的值无关
11.双向链表中有两个指针域,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都不对。
12.
(1)静态链表既有顺序存储的优点,又有动态链表的优点。
所以,它存取表中第i个元素的时间与i无关。
(2)静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。
(3)静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。
以上错误的是()
A.
(1),
(2)B.
(1)C.
(1),
(2),(3)D.
(2)
13.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为()(1<=i<=n+1)。
A.O(0)B.O
(1)C.O(n)D.O(n2)
14.对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为()。
A.O(n)O(n)B.O(n)O
(1)C.O
(1)O(n)D.O
(1)O
(1)
15.线性表(a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为()
A.O(i)B.O
(1)C.O(n)D.O(i-1)
16.非空的循环单链表head的尾结点p↑满足()。
A.p↑.link=headB.p↑.link=NILC.p=NILD.p=head
17.循环链表H的尾结点P的特点是()。
A.P^.NEXT:
=HB.P^.NEXT:
=H^.NEXT
C.P:
=HD.P:
=H^.NEXT
18.在一个以h为头的单循环链中,p指针指向链尾的条件是()
A.p^.next=hB.p^.next=NILC.p^.next.^next=hD.p^.data=-1
19.完成在双循环链表结点p之后插入s的操作是();
A.p^.next:
=s;s^.priou:
=p;p^.next^.priou:
=s;s^.next:
=p^.next;
B.p^.next^.priou:
=s;p^.next:
=s;s^.priou:
=p;s^.next:
=p^.next;
C.s^.priou:
=p;s^.next:
=p^.next;p^.next:
=s;p^.next^.priou:
=s;
D.s^.priou:
=p;s^.next:
=p^.next;p^.next^.priou:
=s;p^.next:
=s;
20.在双向循环链表中,在p指针所指向的结点前插入一个指针q所指向的新结点,其修改指针的操作是()。
注:
双向链表的结点结构为(llink,data,rlink)。
供选择的答案:
A.p↑.llink:
=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:
=p;p↑.llink:
=q;p↑.llink:
=q;
21.在非空双向循环链表中q所指的结点前插入一个由p所指的链结点的过程依次为:
rlink(p)←q;llink(p)←llink(q);llink(q)←p;()
A.rlink(q)←pB.rlink(llink(q))←pC.rlink(llink(p))←pD.rlink(rlink(p))←p
22.双向链表中有两个指针域,llink和rlink,分别指回前驱及后继,设p指向链表中的一个结点,q指向一待插入结点,现要求在p前插入q,则正确的插入为()
A.p^.llink:
=q;q^.rlink:
=p;p^.llink^.rlink:
=q;q^.llink:
=p^.llink;
B.q^.llink:
=p^.llink;p^.llink^.rlink:
=q;q^.rlink:
=p;p^.llink:
=q^.rlink;
C.q^.rlink:
=p;p^.rlink:
=q;p^.llink^.rlink:
=q;q^.rlink:
=p;
D.p^.llink^.rlink:
=q;q^.rlink:
=p;q^.llink:
=p^.llink;p^.llink:
=q;
23.在双向链表指针p的结点前插入一个指针q的结点操作是()。
A.p->Llink=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的结点之后插入指针为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;
25.对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是()
A.head==NULLB.head→next==NULLC.head→next==headD.head!
=NULL
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:
=pp^.rlink:
=(p^.rlink)^.rlink
D.p^.rlink:
=(p^.llink)^.llinkp^.llink:
=(p^.rlink)^.rlink;
二、填空题
1.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用_______存储结构。
2.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是________。
3.设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x的结点,指针py指向data为y的新结点,若将结点y插入结点x之后,则需要执行以下语句:
_______;______;
4.在一个长度为n的顺序表中第i个元素(1<=i<=n)之前插入一个元素时,需向后移动________个元素。
5.在单链表中设置头结点的作用是________。
6.对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为________,在给定值为x的结点后插入一个新结点的时间复杂度为________。
7.根据线性表的链式存储结构中每一个结点包含的指针个数,将线性链表分成________和_______;而又根据指针的连接方式,链表又可分成________和________。
8.在双向循环链表中,向p所指的结点之后插入指针f所指的结点,其操作是_______、_______、_______、________。
9.在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:
s^.next:
=p;s^.prior:
=________;p^.prior:
=s;________:
=s;
10.链接存储的特点是利用________来表示数据元素之间的逻辑关系。
11.顺序存储结构是通过________表示元素之间的关系的;链式存储结构是通过________表示元素之间的关系的。
12.对于双向链表,在两个结点之间插入一个新结点需修改的指针共______个,单链表为_______个。
13.循环单链表的最大优点是:
________。
14.已知指针p指向单链表L中的某结点,则删除其后继结点的语句是:
________
15.带头结点的双循环链表L中只有一个元素结点的条件是:
________
16.在单链表L中,指针p所指结点有后继结点的条件是:
__
17.带头结点的双循环链表L为空表的条件是:
________。
18.在单链表p结点之后插入s结点的操作是:
_______。
三、解答题
1.线性表有两种存储结构:
一是顺序表,二是链表。
试问:
(1)如果有n个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。
在此情况下,应选用哪种存储结构?
为什么?
(2)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么应采用哪种存储结构?
为什么?
2.线性表的顺序存储结构具有三个弱点:
其一,在作插入或删除操作时,需移动大量元素;其二,由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;其三,表的容量难以扩充。
线性表的链式存储结构是否一定都能够克服上述三个弱点,试讨论之。
3.若较频繁地对一个线性表进行插入和删除操作,该线性表宜采用何种存储结构?
为什么?
4.线性结构包括______、______、_______和_______。
线性表的存储结构分成______和______。
请用类PASCAL语言描述这两种结构。
5.线性表(a1,a2,…,an)用顺序映射表示时,ai和ai+1(1<=i链接表示时呢?
6.说明在线性表的链式存储结构中,头指针与头结点之间的根本区别;头结点与首元结点的关系。
7.试述头结点,首元结点,头指针这三个概念的区别.
8.有线性表(a1,a2,…,an),采用单链表存储,头指针为H,每个结点中存放线性表中一个元素,现查找某个元素值等于X的结点。
分别写出下面三种情况的查找语句。
要求时间尽量少。
(1)线性表中元素无序。
(2)线性表中元素按递增有序。
(3)线性表中元素按递减有序。
9.在单链表和双向链表中,能否从当前结点出发访问到任何一个结点?
10.如何通过改链的方法,把一个单向链表变成一个与原来链接方向相反的单向链表?
11.设单链表结点指针域为next,试写出删除链表中指针p所指结点的直接后继的C语言语句。
12.设单链表中某指针p所指结点(即p结点)的数据域为data,链指针域为next,请写出在p结点之前插入s结点的操作(PASCAL语句)。
四、算法设计题
1.假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。
请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。
2.知L1、L2分别为两循环单链表的头结点指针,m,n分别为L1、L2表中数据结点个数。
要求设计一算法,用最快速度将两表合并成一个带头结点的循环单链表。
3.在带头结点的单链表上,给出求表长Length(L)的算法,并加入简要的注释或说明。
4.设单链表具有头结点,且表中元素各不相同,试给出在单链表中查找值为"x"的结点的算法,并加入简要的注释或说明。
5.设单链表具有头结点,且表中元素各不相同,试给出在单链表中删除值为"x"的