《数据结构》线性结构错题集(01)

1.顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。

false

 正好说反了。顺序表才适合随机存取,链表恰恰适于“顺藤摸瓜”

2. 在带头结点的循环单链表中,尾元结点的next指针指向链表的首元结点。

false 

尾元结点的next值指向链表的头节点,而不是首元结点。

首元结点指的是链表中存储第一个数据元素的结点。头节点是在首元结点之前设置的一个结点。

3.在单链表表尾插入结点与在表中插入结点处理的方法不同。

false

4.顺序表中第一个元素的存储地址是1000,每个元素的长度为20,则第21个元素的地址是()。

A、1020

B、1380

C    1400 

D、1420

p=1000+(21-1)*20

5.创建一个包括n个结点的有序单链表的时间复杂度是()。

A、O(1)

B、O(n)

C、O(nlog2n)

D、O(n2)

创建单链表的时间复杂度是O(n),而要创建有序的单链表,则每生成一个新节点时都要与已存在的结点进行比较,确定恰当的插入位置,因此时间复杂度是O(n^2)。

6.若要在O(1)的时间复杂度上实现两个循环单链表头尾相接,则对应两个循环单链表各设置一个指针,分别指向()。

A、各自的头结点

B、各自的尾元结点

C、各自的首元结点

D、一个表的头结点,另一个表的尾元结点

A为A的尾结点,B为B的尾结点,则

p=B->next->next;

B->next=A->next;

A->next=p; 

选项B;

7.带头结点的循环双链表L为空表的条件是()。

A、L->prior->next==NULL;

B、L->next ==L;

C、L->prior==NULL;

D、L==NULL;

 循环双向链表,空表时,L->next==L->piror==NULL;

8.已知表头元素为c的单链表在内存中的存储状态如图

所示。现将f存放于1014H处并插入到单链表中,若f在逻辑上位于a和e之间,则a、e、f的“链接地址”依次是( )。

A、1010H,1014H,1004H

B、1010H,1004H,1014H

C、1014H,1010H,1004H

D、1014H,1004H,1010H

 答案:D
解析:根据存储状态,单链表的结构如下图所示。其中“链接地址”是指结点next所指的内存地址。当结点f插入后,a指向f, f指向e, e指向b。显然a、e和f的“链接地址”分别是f、b和e的内存地址,即1014H、1004H和1010H。
在这里插入图片描述

9.已知L是带头结点单链表的表头指针,则从链上摘下首元结点的语句是()。

A、q=L; L=L->next;

B、q=L->next; L->next=q->next;

C、q=L; L=L->next->next;

D、L->next=L;

 同时也是注意首元结点与头节点概念及定义,见2

10.在长度为n的顺序表的表尾插入一个新元素的时间复杂度为()。

A、O(n)

B、O(1)

C、O(n2)

D、O(log2n)

 是数据表的插入,不是线性表。

数组的存储特性:

1、一个数组占据的存储空间大小固定,不能改变
2、所占据的存储空间是专用的,不能被其他信息占据
3、所占据的存储空间是连续性的,中间不能间隔其他的信息
4、数组中的各个元素可以用数组名和下标直接访问

11.设rear是指向非空的带头结点的循环单链表的尾元结点的指针。若想删除链表的首元结点,则应执行()操作。

A、s=rear; rear=rear->next; delete s;

B、rear=rear->next; delete rear;

C、rear=rear->next->next; delete rear;

D、s=rear->next->next; rear->next->next=s->next; delete s;

 同样是注意首元结点,尾元结点与数组之间的关系;

12.从一个具有n个结点的有序单链表中查找其值等于x的结点时,在查找成功的情况下,需要平均比较()个结点。

A、n

B、n/2

C、(n-1)/2

D、(n+1)/2

 等差数列的求和。从头到尾需要比较1~n次,相加得:(n+1)n/2,除以n(有n个元素),得(n+1)/2

13.已知指针h指向一个带头结点的非空单循环链表,结点结构为:(data,next),其中next是指向直接后继结点的指针,p是尾指针,q为临时指针。现要删除该链表的第一个元素,正确的语句序列是( )。

A、h->next=h->next->next; q=h->next; free(q);

B、q=h->next; h->next=h->next->next; free(q);

C、q=h->next; h->next=q->next; if(p!=q) p=h; free(q);

D、q=h->next; h->next=q->next; if(p==q) p=h; free(q);

  同样是注意首元结点,尾元结点与数组之间的关系;

15.栈和队列具有相同的()。

A、抽象数据类型

B、逻辑结构

C、存储结构

D、运算

栈和队列具有相同的逻辑结构,都是一种受限的线性表 (线性结构);

逻辑结构:

集合结构,线性结构,树状结构,网络结构等;

物理结构(存储结构):顺序存储结构,链式存储结构;

栈和队列都有顺序表示和链式表示。

16.顺序栈存放在数组a[n]中,top指向栈顶,top= -1表示栈空。在栈不满的情况下,元素x进栈的操作为()。

A、a[top--]=x

B、a[--top]=x

C、a[top++]=x

D、a[++top]=x

注意题中所给条件,top=-1时表示栈空。故选D; 

17.()算法设计策略与递归技术的联系最弱。

A、回溯法

B、贪心法

C、分治法

D、减治法

分治法:

       将一个大的问题分解成若干个小的问题,并且这些小问题与大问题的问题性质保持一致,通过处理小问题从而处理大问题。这里用到了递归的思想。

贪心法:

       贪心法是从问题的某一个初始解出发,在每一个阶段都根据贪心策略来做出当前最优的决策,逐步逼近给定的目标,尽可能快地求得更好的解。当达到算法中的某一步不能再继续前进时,算法终止。贪心法可以理解为以逐步的局部最优,达到最终的全局最优。

减治法:

        减治法同样是讲一个大问题划分为若干个小的子问题,但是这些子问题不需要分别求解,只需要求解其中一个子问题便可,因此也不需要对子问题进行合并,可以说,减治法是一种退化版的分治法。

18.入栈顺序为P1, P2,…, Pn,出栈顺序为1,2,3,…,n,如果P3=1,则P1的值()。

A、一定是3

B、一定是2

C、可能是2

D、不可能是2 

顺序栈的出入栈顺序

19.循环队列存放在数组a[0…n]中。队列非空时front指向队头元素,rear指向队尾元素。初始时队列为空,要求第一个入队的元素存放在a[0]处,则frontrear的初始值为()。

A、0,0

B、0,n-1

C、0,n

D、n,n

循环队列的存储 

(1)队头指针
①指向队头元素
②指向队头元素元素的前一个位置
(2)队尾指针
①指向队尾元素
②指向队尾元素的后一个位置
指示方法不同元素入队和出队操作也不同,但是在做大部分题目的时候,我们并不需要分析队头指针和队尾指针具体操作,我们只要记住下面两个结论就行

结论
结论一:当队列执行元素入队操作时,队尾指针(rear)向后移(rear++),队头指针(front)不变
结论二:当队列执行元素出队操作时,队头指针(front)向后移(front++),队尾指针(rear)不变
原文链接:https://blog.csdn.net/qq_50710984/article/details/113923385

20.链栈与顺序栈相比,更容易实现插入操作。

A、对

B、错

21.若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1...(n(n+1))/2]中,则在B中确定aij(i〈j)的位置k的关系为( )。

A、i*(i-1)/2+j

B、j*(j-1)/2+i

C、i*(i+1)/2+j

D、j*(j+1)/2+i

原理就是等差数列求和,题目里给的数组第一个元素是1,不是0,这要特别注意。

22.有一个100阶的三对角矩阵M,其元素mi,j(1≤i≤100,1≤j≤100)按行优先次序压缩存入下标
从0开始的一维数组N中。元素m30,30在N中的下标是( )。

A、85

B、86

C、87

D、88

除了第一行和最后一行是每行2个元素外,中间的每行都是三个元素。

因此,m 30 , 30 m_{30,30}m 
30,30

 ,就是2+3*28+2 = 88
这是从1开始编号的,那么从0开始编号就是87号。
原文链接:https://blog.csdn.net/u011240016/article/details/53260458

23.设有一个n*n 的对称矩阵A,将其下三角部分按行存放在一维数组B 中,而A[0][0]存放于B[0]中,那么,第i 行对角线元素A[i][i]存放于B 中( )处。

A、(2n-i+1)i /2

B、(2n-i-1)i /2

C、(i+3)i /2

D、(i+1)i /2

 

24.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为( )。

A、13

B、31

C、32

D、33

因为是对称矩阵,只用存一半的元素。a85前面有7行,共有7*8/2个元素,由于a85是第八行第五个,所以地址为7*8/2+5=33,故选D;

25.将三对角矩阵A[1…100,1…100]按行优先存入一维数组B[1,…,298]中,A中元素A[66,67]在B中的位置K为( )。

A、198

B、197

C、199

D、195

26.一个非空广义表的表尾 () 。

A、只能是子表

B、不能是子表

C、只能是原子元素

D、可以是原子元素或子表

 一个非空广义表的表尾只能是子表

27.已知广义表 A=((a, (b, c) ) , (a, (b, c) , d) ) ,则运算 head(head(tail(A))) 的结果是 ( ) 。

A、a

B、(b,c)

C、(a,(b,c))

D、()

由于 一个非空广义表的表尾只能是子表,所以第一次取tail得到((a, (b, c) , d)),第二次取head得到(a, (b, c) , d),第三次取head得到 a;

  • 24
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值