有问题的下方评论或私信
1.线性表采用链式地址时,其地址(D)
A.必须是连续的
B.一定是不连续的
C.部分地址必须是连续的
D.连续与否均可以
解析:线性表两种实现方式,一个用数组,一个用链表。数组中存储空间地址是必需连续的,用链表的话,每创建一个节点其地址是由计算机随机分配的,所以地址不一定连续,但既然是随机的,怎么就不能够随机出连续的可能呢0_0?其实可以这么理解,数组是特殊的链表,特殊就特殊在数组中存储空间地址连续了而已,既然地址连续了,每个空间大小又一样,所以就可以用等差数列求其他元素地址了啊~An=A1+(n-1)*d 其中n为第n个元素,d为存储空间大小,A1为第一个元素的物理地址
2.对任何数据结构链式存储结构一定优于顺序存储结构,这样的说法正确吗?(B)
A.正确
B.错误
解析:顺序适用于查改,链式适用于增删
3.在需要经常查找结点的先驱与后继的场合中,使用(B)比较合适。
A.单链表
B.双向链表
C.循环链表
D.链栈
解析:注意是“需要经常访问先驱和后继”,所以双向链表更合适
4.设指针变量p指向单链表的某中间结点,则删除该结点的后序结点需要的操作为(D)
A.p-next=p-next;free(p-next)
B.free(p-next);p-next=p-next-next
C.p-next=p-next-next
D.t=p-next;p-next=t-next;free(t)
解析:代码给出的是C语言代码。应该明确的是,想删除一个节点势必要找到其前驱,那么题中p为前驱,只需将p的下一跳指向p的下一跳的下一跳即可,最后再释放内存,Java中可以不释放
5.链表不具备的特点是 (A)
A.可随机访问任一结点
B.插入删除不需要移动元素
C.不必事先估计存储空间
D.所需空间与其长度成正比
解析:链表不适用查改
6.Java 中的集合类包括 ArrayList 、 LinkedList 、 HashMap 等,下列关于集合类描述错误的是?(C)
A.ArrayList和LinkedList均实现了List接口
B.ArrayList访问速度比LinkedList快
C.随机添加和删除元素时,ArrayList的表现更加快速
D.HashMap实现Map接口,它允许任何类型的键和值对象,并允许将NULL用作键或值
解析:ArrayList底层由数组实现,不适用增删
7.线性表的长度是线性表所占用的存储空间的大小。 (B)
A.T
B.F
解析:线性表长度是指其所存储元素的个数,但元素个数不代表线性表的存储空间大小,比如用数组实现的线性表,数组的长度才是线性表的存储空间大小,而此时的数组不一定存满元素,还需其他变量维护其元素的个数
8.在一个单链表中,若删除p所指向节点的后续节点,则执行(A)。
A.p->next=p->next->next;
B.p=p->next;p->next=p->next->next;
C.p=p->next;
D.p=p->next->next;
解析:同4题
9.从一个长度为n的顺序表中删除第i个元素(1<=i<=n)时,需向前移动(A)个元素
A.n-i
B.n-i+1
C.n-i-1
D.i
解析:举个例子就出来了啊,假设顺序表 1-2-3-4-5-6 长度为6,删除第一个元素1,需要将2-3-4-5-6这5个元素前移,所以n-i
10.线性表中每个元素都有一个直接前驱和一个直接后继(B)
A.对
B.错
解析:线性表定义:除了第一个元素没有前驱,最后一个元素没有后继,其他元素既有唯一前驱也有唯一后继
11.以下结构类型可用来构造链表的是(B)
A.struct aa{ int a;int * b;};
B.struct bb{ int a;bb * b;};
C.struct cc{ int * a;cc b;};
D.struct dd{ int * a;aa b;};
解析:此处给出的是C代码,int a表示数据域,bb *b表示指针域
12.若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用(D)存储方式最节省运算时间。
A.单链表
B.仅有头指针的单循环链表
C.双链表
D.仅有尾指针的单循环链表
解析:注意是“最常用的”,最后一个元素后插入等同于需要尾指针,删除第一个元素等同于需要头结点,但是如果是单向循环链表的话,尾指针的下一跳就是头结点,所以D
13.线性表是具有 n 个(C)的有限序列(n>0)
A.表元素
B.字符
C.数据元素
D.数据项
解析:数据结构概念,数据元素由若干个数据项组成
14.从一个具有 n 个结点的单链表中查找其值等于 x 结点时,在查找成功的情况下,需平均比较(D)个结点。
A.n
B.n/2
C.(n-1)/2
D.(n+1)/2
解析:最好情况查第一个元素只需1次,最坏情况查最后一个元素需要n次,平均(n+1)/2次。如果是时间复杂度最终还是O(n)
15.下面(B)数据结构常用于函数调用。
A.队列
B.栈
C.链表
D.数组
解析:函数是基于栈运行的
16.不考虑分页的情况下,线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻(B)。
A.正确
B.错误
解析:这种类型的题只需要记住:线性表中,顺序表物理相邻逻辑相邻,链表逻辑相邻物理不一定相邻,就行了
17.对稀疏矩阵进行压缩存储,常用的两种方法是(B)
A.三元组和散列表
B.三元组和十字链表
C.三角矩阵和对角矩阵
D.对角矩阵和十字链表
解析:在一个矩阵中,若非零元素的个数远远小于零元素的个数,且非零元素的分布没有规律,则称之为稀疏矩阵。对于稀疏矩阵,存储非零元素时必须同时存储其位置,所以用三元组来唯一确定矩阵A中的元素。矩阵三元组表的顺序存储结构称为三元组顺序存储,而它的链式存储结构是十字链表。
18.设带有头结点的单向循环链表的头指针变量为head,则其判空条件是(C)。
A.head==0
B.head->next==0
C.head->next==head
D.head!=0
解析:单向循环链表,头结点的下一跳是头结点,说明没有元素存在
19.下列叙述中,正确的是(D)
A.线性链表中的各元素在存储空间中的位置必须是连续的
B.线性链表中的表头元素一定存储在其他元素的前面
C.线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面
D.线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的
解析:单链表存储方式地址不连续;元素顺序任意
20.对于一个头指针为L的带头结点的单链表,判定链表为空表的条件是(C)
A.L=NULL;
B.L->next=NULL;
C.L->next==NULL;
D.L!=NULL;
解析:单向链表头结点下一跳为空代表无元素
21.当很频繁地对序列中部进行插入和删除操作时,应该选择使用的容器是(B)
A.vector
B.list
C.deque
D.stack
解析:C语言里面list使用双端数组实现的
22.某单链表有5个元素,设单链表的节点结构为(data,next),5个元素的data依次为(1、2、3、4、5),已知指针q指向节点3,指针p指向节点4,那么下面操作能将链表变为data依次为(1、2、3、5)的是(F)。(其中temp为节点类型指针,默认指向NULL)
A.q=p->next;
B.p=q->next;
C.p->next=q->next;
D.q->next=p->next; delete q;
E.p->data=p->next->data; p->next=p->next->next; delete p->next;
F.temp = p->next; p->next=temp->next; p->data=temp->data; delete temp;temp=NULL;
解析:绕来绕去,F其实不是直接删节点,而是将要删除节点的下一跳节点的值前移,再删除该节点
23.静态链表中指针表示的是(B)
A.内存地址
B.数组下标
C.下一元素地址
D.左、右孩子地址
解析:对于没有指针的编程语言,可以用数组替代指针,来描述链表。让数组的每个元素由data和cur两部分组成,其中cur相当于链表的next指针,这种用数组描述的链表叫做静态链表,这种描述方法叫做游标实现法。我们对数组的第一个和最后一个元素做特殊处理,不存数据。让数组的第一个元素cur存放第一个备用元素(未被占用的元素)下标,而数组的最后一个元素cur存放第一个有值的元素下标,相当于头结点作用。空的静态链表如下图
当存放入一些数据时("甲""乙""丁""戊""己""庚"),静态链表为:
24.(1)静态链表既有顺序存储的优点,又有动态链表的优点。所以,它存取表中第i个元素的时间与i无关。
(2)静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加.
(3)静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。
以上错误的是(B)
A.(1),(2)
B.(1)
C.(1),(2),(3)
D.(2)
解析:同23题
25.在单链表中,增加头结点的目的是(B)
A.标识表结点中首结点的位置
B.算法实现上的方便
C.使单链表至少有一个结点
D.说明单链表是线性表的链式存储实现
解析:额。。。常识
26.邻接表是图的一种顺序存储结构,这种说法(B)
A.正确
B.错误
解析:邻接表主要是图的存储方式,用数组和链表组合而成
27.对长度为无穷大的广义表,由于存储空间的限制,不能在计算机中实现(A)
A.对
B.错
解析:内存是有限的
28.关于双链表的搜索给定元素操作的说法正确的是(B)?
A.从两个方向搜索双链表,比从一个方向搜索双链表的速度慢
B.从两个方向搜索双链表,比从一个方向搜索双链表的方差要小
C.从两个方向搜索双链表,比从一个方向搜索双链表速度要快
D.以上说法都不正确
解析:啥叫方差,就是衡量平均访问次数的一种方式,双向链表查元素不一定慢,比如查第一个元素O(1);双向链表查元素不一定快,比如查中间元素O(n/2)从头开始或者从尾开始都行,但是总比单向链表好一点,
29.What is the difference between a linked list and an array(A B C)?
A.Search complexity when both are sorted
B.Dynamically add/remove
C.Random access efficiency
D.Data storage type
解析:链表和顺序表的区别?
30.以下关于单向链表说法正确的是(A B C)
A.如果两个单向链表相交,那他们的尾结点一定相同
B.快慢指针是判断一个单向链表有没有环的一种方法
C.有环的单向链表跟无环的单向链表不可能相交
D.如果两个单向链表相交,那这两个链表都一定不存在环
解析:注意,单向链表只有一个next指针域,所以下述情况一定不存在
但是以下几种情况是存在的