数据结构线性表习题.docx
《数据结构线性表习题.docx》由会员分享,可在线阅读,更多相关《数据结构线性表习题.docx(11页珍藏版)》请在冰豆网上搜索。
数据结构线性表习题
第二章线性表
一、选择题
1.线性表是()
A.一个有限序列,可以为空B.一个有限序列,不可以为空
C.一个无限序列,可以为空D.一个无限序列,不可以为空
2.一维数组与线性表的特征是()。
A.前者长度固定,后者长度可变B.两者长度均固定
C.后者长度固定,前者长度可变D.两者长度均可变
3.用单链表方式存储的线性表,存储每个结点需要两个域,一个数据域,另一个是().
A.当前结点所在地址域B.指针域
C.空指针域D.空闲域
4.用链表表示线性表的优点是()。
A.便于随机存取B.便于进行插入和删除操作
C.占用的存储空间较顺序表少D.元素的物理顺序与逻辑顺序相同
5.在具有n个结点的单链表中,实现___的操作,其算法的时间复杂度都是O(n)。
A.遍历链表和求链表的第i个结点D.删除地址为P的结点的后继结点
B.在地址为P的结点之后插入一个结点C.删除开始结点
6.下面关于线性表的叙述中,错误的是()。
A.线性表采用顺序存储必须占用一片连续的存储单元
B.线性表采用顺序存储便于进行插入和删除操作
C.线性表采用链式存储不必占用一片连续的存储单元
D.线性表采用链式存储便于进行插入和删除操作
7.已知单链表的每个结点包括一个指针域next,它指向该结点的后继结点。
现要将指针q指向的新结点插入到指针p指向的结点之后,下面的操作序列中正确的是()。
A.q=p->next;p->next=q->next;
B.p->next=q->next;q=p->next;
C.q->next=p->next;p->next=q;
D.p->next=q;q->next=p->next;
8.设al,a2,a3为三个结点;p,10,20代表地址,则如下的链表存储结构称为()。
A.链表B.单链表C.双向循环链表D.双向链表
9.单链表的存储密度()。
A.大于1B.等于1C.小于1D.不能确定
10.己知一个顺序存储的线性表,设每个结点需占m个存储单元,若第一个结点的地址al,则第i个结点的地址为()。
A.al+(i-1)*mB.al+i*mC.al-i*mD.al+(i+1)*m
11.在n个结点的顺序表中,算法的时间复杂度是O(l)的操作是()。
A.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)
B.在第i个结点之后插入一个新结点(1≤i≤n-1)
C.删除第i个结点(1≤i≤n)
D.将n个结点从小到大排序
12.在线性表中()只有一个直接前驱和一个直接后继。
A.首元素B.中间元素C.尾元素D.所有元素
13.对具有n个结点的线性表进行查找运算,所需的算法时间复杂度为()。
A.0(n2)B.0(nlog2n)C.O(log2n)D.O(n)
14.线性表采用顺序存储的缺点是()。
A.存储密度降低B.只能顺序访问
C.元素的逻辑顺序与物理顺序不一致D.插入、删除操作效率低
15.以下链表结构中,从当前结点出发能够访问到任一结点的是()。
A.单向链表和双向链表B.双向链表和循环链表
C.单向链表和循环链表D.单向链表、双向链表和循环链表
16.线性表是具有n个()的有限序列。
A.数据项B.数据元素C.表元素D.字符
17.若长度为n的线性表采用链式存储结构,访问其第i个元素的算法时间复杂度为()。
A.0(l)B.0(n)C.0(n2)D.0(log2n)
18.指针P指向循环链表L的首元素的条件是()。
A.P==LB.L->next==PC.P->next==NULLD.P->next==L
19.指针P所指的元素是双循环链表L的尾元素的条件是()。
A.P==LB.P->prior==LC.P==NULLD.P->next==L
20.不带头结点的单链表L为空的条件是()
A.L!
=NULLB.L==NULLC.L->next==NULLD.L->next==L
21.带头结点的单链表L为空的条件是()
A.L!
=NULLB.L==NULLC.L->next==NULLD.L->next==L
22.两个指针P和Q,分别指向单链表的两个元素,P所指元素是Q所指元素前驱的条件是()。
A.P->next==Q->nextB.P->next==Q
C.Q->next==PD.P==Q
23.在长度为n的顺序表中,若要删除第i(1≤i≤n)个元素,则需要向前移动元素的次数为()。
A.1B.n一iC.n一i+1D.n一i一l
24.在长度为n的顺序表中第i(1≤i≤n)个位置上插入一个元素时,为留出插入位置所需移动元素的次数为()。
A.n-iB.iC.n–i+1D.n-i-l
25.假定己建立以下动态链表结构,且指针Pl和P2已指向如图所示的结点:
则以下可以将P2所指结点从链表中删除并释放该结点的语句组是()
A.pl->next=p2->next;free(pl);B.pl=p2;free(p2);
C.pl->next=p2->next;free(p2);D.pl=p2->next;free(p2);
26.若已建立如图所示的单向链表,则以下不能将s所指的结点插入到链表尾部,构成新的单向链表的语句组是()。
A.s->next=a->next->next;a->next->next=s;
B.a=a->next;a->next=s;s->next=NULL;
C.s->next=NULL;a=a->next;a->next=s;
D.a=a->next;s->next=a->next;a->next=s->next;
27.有如下函数,其中形参hl和h2分别指向2个不同链表的第一个结点,此函数的功能是()。
Voidfun(structnode*hl,structnode*h2){
structnode*t;
t=hl;
while(t->next!
='\0')
t=t->next;t->next=h2;
}
A.将链表h2接到链表h1后B.将链表h1接到链表h2后
C.找到链表hl的最后一个结点由指针返回D.将链表hl拆分成两个链表
二、判断题
1.循环链表不是线性表.(×)
2.线性表就是顺序存储的表。
(×)
3.线性表只能用顺序存储结构实现。
(×)
4.链表中的头结点仅起到标识的作用。
(√)
5.线性表的链式存储结构优于顺序存储。
(×)
6.顺序存储的线性表可以实现随机存取。
(√)
7.顺序存储方式只能用于存储线性结构。
(√)
8.链表的每个结点都恰好包含一个指针域。
(×)
9.所谓静态链表就是一直不发生变化的链表。
(×)
10.集合与线性表的区别在于是否按关键字排序。
(×)
11.取线性表的第i个元素的时间同i的大小有关.(×)
12.顺序存储结构的主要缺点是不利于插入或删除操作。
(√)
13.线性表的特点是每个元素都有一个前驱和一个后继。
(×)
14.对任何数据结构链式存储结构一定优于顺序存储结构。
(×)
15.顺序存储方式的优点是存储密度大,插入、删除效率高。
(×)
16.为了很方便的插入和删除数据,可以使用双向链表存放数据。
(×)
17.顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
(×)
18.顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。
(×)
19.线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。
(√)
20.线性表链式存储的特点是可以用一组任意的存储单元存储表中的数据元素。
(√)
21.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。
(×)
22.在线性表的顺序结构中,插入和删除元素时,移动元素的个数与该元素的位置有关。
(×)
23.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此单链表是随机存取的存储结构。
(×)
24.链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序存储结构中效率高。
(√)
25.在单链表中,任何两个元素的存储位置之间都有固定的联系,所以可以从头结点开始查找任何一个元素。
(√)
26.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。
(√)
三、填空题
1.顺序表中逻辑上相邻的元素在物理位置上相邻。
2.在链表中逻辑上相邻的元素的物理位置相邻。
3.带头结点的双循环链表L为空表的条件是:
。
4.在单链表p结点之后插入s结点的操作是:
。
5.顺序表相对于链表的优点有和。
6.在双链表中要删除已知结点*p,其时间复杂度为。
7.在顺序表中访问任意一个结点的时间复杂度均为。
8.链接存储的特点是利用来表示数据元素之间的逻辑关系。
9.带头结点的双循环链表L中只有一个元素结点的条件是:
10.在单链表L中,指针p所指结点有后继结点的条件是:
11.在单链表中除首结点外,任意结点的存储位置都由结点中的指针指示。
12.已知指针p指向单链表L中的某结点,则删除其后继结点的语句是:
13.在n个结点的单链表中要删除已知结点*p,需要找到.其时间复杂度为。
14.链表相对于顺序表的优点有和操作方便;缺点是存储密度。
15.建立单链表的算法时间复杂度;建立有序单链表的算法时间复杂度。
16.在单链表中设置头结点的作用是。
17.对于双向链表,在两个结点之间插入一个新结点需修改的指针共个,单链表为个。
18.在一个长度为n的顺序表中第i个元素(1<=i<=n)之前插入一个元素时,需向后移动个元素。
19.在循环链表中,可根据一个结点的地址访问整个链表,而单链表中需知道才能访问整个链表。
20.顺序存储结构是通过表示元素之间的关系的;链式存储结构是通过表示元素之间的关系的。
21.有一单链表结构如下,若要删除值为c的结点,应做的操作是
22.在n个结点的顺序表中插入一个结点,平均需要移动个结点,具体的移动次数取决于。
23.在n个结点的顺序表中删除一个结点,平均需要移动个结点,具体的移动次数取决于。
24.在双向循环链表中,向p所指的结点之后插入指针f所指的结点,其操作是、、、。
25.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是。
26.循环单链表与非循环单链表的主要不同是,循环单链表尾结点的指针,而非循环单链表的尾结点指针。
27.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用存储结构。
28.线性表L=(a1,a2,…,an)用数组存储。
假定删除表中任一元素的概率相同,则删除一个元素平均需要移动的元素个数是。
29.在单链表中要在已知结点*p之前插入一个新结点,需找到,其时间复杂度为;而在双链表中,完成同样操作时其时间复杂度为。
30.对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为,在给定值为x的结点后插入一个新结点的时间复杂度为。
31.根据线性表的链式存储结构中每一个结点包含的指针个数,将线性链表分成和;而又根据指针的连接方式,链表又可分成和。
32.在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:
s^.next:
=p;s^.prior:
=;p^.prior:
=s;:
=s;
33.设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x的结点,指针py指向data为y的新结点,若将结点y插入结点x之后,则需要执行以下语句:
;;
34.设有结点定义如下,且已建立如下图所示的带有头结点的单向链表:
structnode
{intdata;
structnode*next;};
函数sum的功能是:
计算链表中各结点数据域之和,作为函数值返回。
请填空。
intsum(structnode*head)
{ints=0;
structnode*p;
p=head->next;
do
{s=s+;
p=p->next;}
while(p!
=);
returns;}
1.己知head指向一个带有头结点的单向链表,链表中每个结点包含整型数据域(data)和指针域(next)。
以下算法用来查找链表所有结点中数据域值最大的结点的位置,由指针s传回调用程序。
请填空。
structlink{
chardata;
structlink*next;};
main(){
structlink*head,*q;
findmax(head,&q);
printf("max=%d\n",q->data);}
findmax(structlink*head,structlink**s){
structlink*p;
p=head->next;
*s=p;
while(){
p=;
if(p->data>)
*s=p;}}
2.设线性表顺序存储结构定义如下:
#defineMAXSIZE20
typedefintdatatype
typestruct{
datatypedata[MAXSIZE+l];
intlast;
}sequenlist;
函数int1ocate2(sequenlist*L,intx);利用在表头设立监视哨的算法,实现在顺序表L中查找值为x的元素的位置。
请填空。
intlocate2(sequenlist*L,intx){
inti=;
L->data[0]=x;
while(L->data[i]!
=x)
;
returni;}
3.设有两个由尾指针表示的带有头结点的单向环形链表ra和rb,以下算法实现将rb所指的链表连接到ra所指链表之后。
请填空。
LinkList*Connect(LinkList*ra,LinkList*rb){
LinkList*p;
p=ra->next;
ra->next=;
free(rb->next);
rb一>next=;
returnrb;}