第二章作业题2-链表-计算机17级(期末复习带详解版)
解析在后面
这次的题关于循环链表和双向链表的部分真的很难,不会的不少,我再想想吧
p1-1:
链表访问节点的时间复杂度为O(N)
p1-3:
时间复杂度为O(1),如果是两个链表都是有序的,合成一个有序链表的时间复杂度为O(M + N)
x2-3:
带了头结点,那么就是B
x2-4:
最小肯定是N,最大应该是2N(N+N)吧
x2-6:
这个题要注意
链表插入和删除操作的时间复杂度都是O(N),看上去和顺序表没什么差距,但是如果已知了要插入或删除的位置,那么此时单链表的插入删除操作时间复杂度就是O(1),因为链表只需要移动指针赋值即可,而顺序表则需要移动大量的元素,所以此题的a,b,d都是O(1),c要遍历,肯定就是O(N)
x2-10:
这个题也要仔细哦,要插入到长度为m的单链表,需要找到表尾,这个过程的时间复杂度为o(m),连接的时间复杂度为0(1),所以总的时间复杂度为0(m)
x2-11:
在单链表中,增加一个头结点的最终目的是为了
方便运算(即处理空表和非空表的情况)
x2-19:
循环单链表就是头指针指向尾指针
x2-20:
双向链表的插入操作
x2-21:
双向链表的删除操作
x2-22:
22,23,25,28,29都是一类题!!!
涉及到删除最后一个结点的,就要选择带头指针的,只有尾指针就解决不了了,因为删除最后一个结点需要找到他的直接前驱结点,肯定要遍历的,那就需要头指针。一般是选择带表头附加结点的双循环链表(时间更短),也可以选择给出表头指针的单循环链表
剩下的一般用带表尾指针的循环单链表即可
这种只在头尾进行插入删除的操作,比较适合用循环单链表,且仅有尾指针
x2-23:
这个记住就好了。。。
x2-24:
开个表合并这个肯定是带尾指针的单循环链表,这是最简单的算法
x2-25:重点说一下这个题,关于删除最后一个结点,b,c,d都需要遍历一边,并没有太大差别
但在最后一个结点后面插入,c就方便的多了,而d一定要注意,他可没说循环
删除最后一个结点最好的操作就是双向循环链表
x2-27:
不会!!!
x2-28:
于22,23,25,28,29,31,32类似
x2-30:
选b,这种情况肯定需要遍历全部元素
x2-35:
循环链表的主要优点是能从表中的任意结点出发都能扫描到整个链表
x2-36:
这就是循环链表的操作,
p->next=ha; return ha;
注意最后返回是头指针。
x2-37:
双向链表的插入操作
x2-38:
双链表的优点之一是
顺序访问相邻结点更加灵活
即算法效率更高,以空间换时间
后面的不用看
1-1
在具有N个结点的单链表中,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。 (1分)
T F
作者: DS课程组
单位: 浙江大学
1-2
若用链表来表示一个线性表,则表中元素的地址一定是连续的。 (1分)
T F
作者: 陈越
单位: 浙江大学
1-3
将长度分别为m,n的两个单链表合并为一个单链表的时间复杂度为O(m+n)。 (1分)
T F
作者: 干红华
单位: 浙江大学
1-4
(neuDS)单链表不是一种随机存取的存储结构。 (1分)
T F
2-1
设h
为不带头结点的单向链表。在h
的头上插入一个新结点t
的语句是:(2分)
h=t; t->next=h->next;
t->next=h->next; h=t;
h=t; t->next=h;
t->next=h; h=t;
作者: DS课程组
单位: 浙江大学
2-2
在单链表中,若p
所指的结点不是最后结点,在p
之后插入s
所指结点,则执行 (2分)
s->next=p; p->next=s;
s->next=p->next; p=s;
s->next=p->next; p->next=s;
p->next=s; s->next=p;
作者: DS课程组
单位: 浙江大学
2-3
带头结点的单链表h
为空的判定条件是: (2分)
h == NULL;
h->next == NULL;
h->next == h;
h != NULL;
作者: DS课程组
单位: 浙江大学
2-4
将两个结点数都为N且都从小到大有序的单向链表合并成一个从小到大有序的单向链表,那么可能的最少比较次数是: (2分)
- 1
- N
- 2N
- NlogN
作者: DS课程组
单位: 浙江大学
2-5
线性表若采用链式存储结构时,要求内存中可用存储单元的地址 (1分)
- 必须是连续的
- 连续或不连续都可以
- 部分地址必须是连续的
- 一定是不连续的
作者: DS课程组
单位: 浙江大学
2-6
在具有N个结点的单链表中,实现下列哪个操作,其算法的时间复杂度是O(N)? (2分)
- 在地址为p的结点之后插入一个结点
- 删除开始结点
- 遍历链表和求链表的第i个结点
- 删除地址为p的结点的后继结点
作者: DS课程组
单位: 浙江大学
2-7
对于一个具有N个结点的单链表,在给定值为x的结点后插入一个新结点的时间复杂度为 (2分)
- O(1)
- O(N/2)
- O(N)
- O(N2)
作者: DS课程组
单位: 浙江大学
2-8
链表不具有的特点是: (1分)
- 插入、删除不需要移动元素
- 方便随机访问任一元素
- 不必事先估计存储空间
- 所需空间与线性长度成正比
作者: DS课程组
单位: 浙江大学
2-9
(neuDS)在一个含有n个结点的有序单链表中插入一个新结点,使单链表仍然保持有序的算法的时间复杂度是( )。 (2分)
- O(1)
- O(log2n)
- O(n)
- O(n2)
作者: 徐婉珍
单位: 广东东软学院
2-10
将长度为n的单链表连接在长度为m的单链表之后的算法的时间复杂度为( )。 (2分)
- O(1)
- O(m)
- O(n)
- O(n+m)
作者: 杨斌
单位: 枣庄学院
2-11
(neuDS)在单链表中,增加一个头结点的最终目的是为了( )。 (2分)
- 使单链表至少有一个结点
- 方便运算的实现
- 标识表结点中首结点的位置
- 说明单链表是线性表的链式存储
作者: 徐婉珍
单位: 广东东软学院
2-12
在单链表中,要删除某一指定结点,必须先找到该结点的()。 (2分)
- 直接前驱
- 自身位置
- 直接后继
- 直接后继的后继
作者: 严冰
单位: 浙江大学城市学院
2-13
以下关于链式存储结构的叙述中,()是不正确的。 (2分)
- 结点除自身信息外还包括指针域,因此存储密度小于顺序存储结构
- 逻辑上相邻的结点物理上不必邻接
- 可以通过计算直接确定第i个结点的存储地址
- 插入、删除运算操作方便,不必移动结点
作者: 严冰
单位: 浙江大学城市学院
2-14
线性链表不具有的特点是()。 (2分)
- 随机访问
- 不必事先估计所需存储空间大小
- 插入与删除时不必移动元素
- 所需空间与线性长度成正比
作者: 严冰
单位: 浙江大学城市学院
2-15
线性表若采用链式存储结构时,要求内存中可用存储单元的地址()。 (2分)
- 必须是连续的
- 部分地址必须是连续的
- 一定是不连续的
- 连续或不连续都可以
作者: 严冰
单位: 浙江大学城市学院
2-16
对线性表,在下列情况下应当采用链表表示的是()。 (2分)
- 经常需要随机地存取元素
- 经常需要进行插入和删除操作
- 表中元素需要占据一片连续的存储空间
- 表中的元素个数不变
作者: 严冰
单位: 浙江大学城市学院
2-17
不带表头附加结点的单链表为空的判断条件是头指针head满足条件()。 (2分)
- head==NULL
- head->next==NULL
- head->next== head
- head!=NULL
作者: 严冰
单位: 浙江大学城市学院
2-18
可以用带表头附加结点的链表表示线性表,也可以用不带头结点的链表表示线性表,前者最主要的好处是()。 (2分)
- 可以加快对表的遍历
- 使空表和非空表的处理统一
- 节省存储空间
- 可以提高存取表元素的速度
作者: 严冰
单位: 浙江大学城市学院
2-19
对于一非空的循环单链表,h
和p
分别指向链表的头、尾结点,则有:(2分)
p->next == h
p->next == NULL
p == NULL
p == h
作者: DS课程组
单位: 浙江大学
2-20
在双向循环链表结点p
之后插入s
的语句是: (3分)
p->next=s; s->prior=p; p->next->prior=s ; s->next=p->next;
p->next->prior=s; p->next=s; s->prior=p; s->next=p->next;
s->prior=p; s->next=p->next; p->next=s; p->next->prior=s;
s->prior=p; s->next=p->next; p->next->prior=s; p->next=s;
作者: DS课程组
单位: 浙江大学
2-21
在双向链表存储结构中,删除p
所指的结点,相应语句为:(3分)
p->prior=p->prior->prior; p->prior->next=p;
p->next->prior=p; p->next=p->next->next;
p->prior->next=p->next; p->next->prior=p->prior;
p->next=p->prior->prior; p->prior=p->next->next;
作者: DS课程组
单位: 浙江大学
2-22
某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用什么存储方式最节省运算时间? (2分)
- 单链表
- 仅有尾指针的单循环链表
- 仅有头指针的单循环链表
- 双链表
作者: DS课程组
单位: 浙江大学
2-23
若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用哪种存储方式最节省运算时间? (2分)
- 单链表
- 双链表
- 单循环链表
- 带头结点的双循环链表
作者: DS课程组
单位: 浙江大学
2-24
将线性表La和Lb头尾连接,要求时间复杂度为O(1),且占用辅助空间尽量小。应该使用哪种结构? (2分)
- 单链表
- 单循环链表
- 带尾指针的单循环链表
- 带头结点的双循环链表
作者: DS课程组
单位: 浙江大学
2-25
(neuDS)在链表中若经常要删除表中最后一个结点或在最后一个结点之后插入一个新结点,则宜采用()存储方式。 (2分)
- 顺序表
- 用头指针标识的循环单链表
- 用尾指针标识的循环单链表
- 双向链表
作者: 徐婉珍
单位: 广东东软学院
2-26
非空的循环单链表head的尾结点(由p所指向)满足()。 (2分)
- p->next == NULL
- p == NULL
- p->next == head
- p == head
作者: 严冰
单位: 浙江大学城市学院
2-27
在循环双链表的p所指结点之前插入s所指结点的操作是()。 (2分)
- p->prior = s; s->next = p; p->prior->next = s; s->prior = p->prior;
- p->prior = s; p->prior->next = s; s->next = p; s->prior = p->prior;
- s->next = p; s->prior = p->prior; p->prior = s; p->right->next = s;
- s->next = p; s->prior = p->prior; p->prior->next = s; p->prior = s;
作者: 严冰
单位: 浙江大学城市学院
2-28
若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则采用()存储方式最节省运算时间。 (2分)
- 单链表
- 给出表头指针的单循环链表
- 双链表
- 带表头附加结点的双循环链表
作者: 严冰
单位: 浙江大学城市学院
2-29
某线性表最常用的操作是在最后一个结点之后插入一个结点或删除第一个结点,故采用()存储方式最节省运算时间。 (2分)
- 单链表
- 仅有头结点的单循环链表
- 双链表
- 仅有尾指针的单循环链表
作者: 严冰
单位: 浙江大学城市学院
2-30
在一个长度为n(n>1)的单链表上,设有头和尾两个指针,执行()操作与链表的长度有关。 (2分)
- 删除单链表中的第一个元素
- 删除单链表中的最后一个元素
- 在单链表第一个元素前插入一个新元素
- 在单链表最后一个元素后插入一个新元素
作者: 严冰
单位: 浙江大学城市学院
2-31
如果对线性表的运算只有4种,即删除第一个元素,删除最后一个元素,在第一个元素前面插入新元素,在最后一个元素的后面插入新元素,则最好使用()。 (2分)
- 只有表尾指针没有表头指针的循环单链表
- 只有表尾指针没有表头指针的非循环双链表
- 只有表头指针没有表尾指针的循环双链表
- 既有表头指针也有表尾指针的循环单链表
作者: 严冰
单位: 浙江大学城市学院
2-32
如果对线性表的运算只有2种,即删除第一个元素,在最后一个元素的后面插入新元素,则最好使用()。 (2分)
- 只有表头指针没有表尾指针的循环单链表
- 只有表尾指针没有表头指针的循环单链表
- 非循环双链表
- 循环双链表
作者: 严冰
单位: 浙江大学城市学院
2-33
在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是()。 (2分)
- p->next = s; s->prior = p; (p->next)->prior = s; s->next = p->next;
- s->prior = p; s->next = p->next; p->next = s; p->next->prior = s;
- p->next = s; p->next->prior = s; s->prior = p; s->next = p->next;
- s->prior = p; s->next = p->next; p->next->prior = s; p->next = s;
作者: 严冰
单位: 浙江大学城市学院
2-34
带表头附加结点的双向循环链表为空的判断条件是头指针L满足条件()。 (2分)
- L= =NULL
- L->right= =NULL
- L->left = =NULL
- L->right= =L
作者: 严冰
单位: 浙江大学城市学院
2-35
循环链表的主要优点是()。 (2分)
- 不再需要头指针了
- 已知某个结点的位置后,能够很容易找到它的直接前驱
- 在进行插入、删除运算时,能更好的保证链表不断开
- 从表中的任意结点出发都能扫描到整个链表
作者: 严冰
单位: 浙江大学城市学院
2-36
已知指针ha和hb分别是两个单链表的头指针,下列算法将这两个链表首尾相连在一起,并形成一个循环链表(即ha的最后一个结点链接hb的第一个结点,hb的最后一个结点指向ha),返回该循环链表的头指针。请将该算法补充完整。 (4分)
typedef struct node{
ElemType data;struct node *next;
}LNode;
LNode *merge(LNode *ha, LNode *hb) {
LNode *p=ha;if (ha==NULL || hb==NULL) {
cout<<”one or two link lists are empty!”<<endl;return NULL;}while ( p->next!=NULL ) p=p->next;p->next=hb;while ( p->next!=NULL ) p=p->next;__________
}
- ha=p->next; return ha;
- p->next=ha; return ha;
- ha=p->next; return p;
- p->next=ha; return p;
作者: 严冰
单位: 浙江大学城市学院
2-37
设有一个双向循环链表,每个结点中除有left、data和right三个域外,还增设了一个访问频度域freq,freq 的初值为零。每当链表进行一次查找操作后,被访问结点的频度域值便增1,同时调整链表中结点的次序,使链表按结点频度值非递增有序的次序排列。下列算法是符合上述要求的查找算法,请将该算法补充完整。 (4分)
typedef struct Node{
ElemType data; struct Node *left; struct Node *right;
intfreq;
} DNode;
DNode *locate_DList(DNode *&L, ElemType x)
{ //在表L中查找元素x,查找成功则调整结点频度域值及结点位置,并返回结点地址;
//查找不成功则返回NULL
DNode *p=L, *q;if (L==NULL) return NULL;while (p->data!=x && p->right!=L) p=p->right;if (p->data!=x) return NULL;p->freq++; q=p->left;while (q!=L && q->freq<=p->freq) q=q->left; //查找插入位置if (q==L && q->freq<=p->freq) { //需将p结点插在头结点L前
//将p结点先从链表中摘下来
p->left->right=p->right; p->right->left=p->left; //将p结点插在L结点前p->right=L;p->left=L->left;L->left->right=p;L->left=p;L=p;}else if (q!=p->left ) { //若q不是p的前驱,则需调整结点位置,将p结点插在q结点后
//将p结点先从链表中摘下来p->left->right=p->right; p->right->left=p->left;______________ //将p结点插在q结点后 }return p;
}
- p->left=q; p->right=q->right;
- p->left=q; q->right=p;
- p->left=q; p->right=q->right; q->right->left=p; q->right=p;
- p->left=q; q->right=p; p->right=q->right; q->right->left=p;
作者: 严冰
单位: 浙江大学城市学院
2-38
与单链表相比,双链表的优点之一是()。 (2分)
- 插入、删除操作更加简单
- 可随机访问
- 可以省略表头指针或表尾指针
- 顺序访问相邻结点更加灵活
第二章作业题2-链表-计算机17级(期末复习带详解版)相关推荐
- 《计算机组成原理》期末复习资料汇总
<计算机组成原理>期末复习资料汇总 一.名词解释 微程序:是指能实现一条机器指令功能的微指令序列. 微指令:在机器的一个CPU周期内,一组实现一定操作功能的微命令的组合. 微操作:执行部件 ...
- 计算机缓存Cache以及Cache Line详解
转载: 计算机缓存Cache以及Cache Line详解 - 围城的文章 - 知乎 https://zhuanlan.zhihu.com/p/37749443 L1,L2,L3 Cache究竟在哪里? ...
- 计算机电路基础填空题,计算机电路基础期末复习练习题.doc
计算机电路基础期末复习练习题.doc <计算机电路基础>期末补充习题 2014-2015学年第二学期 一.填空 1.电路的三种状态是( ),( )和通路. 2. 在不知道电路中电流或电压的 ...
- 计算机电路基础重要知识点,计算机电路基础期末复习指导.DOC
计算机电路基础期末复习指导 福建广播电视大学计算机应用专业 <计算机电路基础(2)>期末复习指导 黄丽军 2005.12 一.课程考核有关说明: 本课程采用中央广播电视大学出版社的由任为民 ...
- 稳扎稳打Silverlight(17) - 2.0数据之详解DataGrid, 绑定数据到ListBox
[索引页] [源码下载] 稳扎稳打Silverlight(17) - 2.0数据之详解DataGrid, 详解ListBox 作者:webabcd 介绍 Silverlight 2.0 详解DataG ...
- mysql gz 安装_Linux下安装mysql 5.7.17.tar.gz的教程详解
1.创建MySQL组和mysql用户 groupadd mysql useradd -r -g mysql mysql 2.拷贝: cp -R mysql-5.7.16-linux-glibc2.5- ...
- 链表的基本操作(C语言)详解(摘取自C语言学习网2.5)
链表的基本操作(C语言)详解 #include <stdio.h> #include <stdlib.h>typedef struct Link{int elem;struct ...
- 计算机自动获取IP地址流程详解
计算机自动获取IP地址流程详解 你知道吗? 我们在日常生活中直接插上网线接口就可以直接上网,不需要拨号上网也不需要设置IP地址.那么我们在日常是怎么获得IP地址的呢? 这里就需要介绍一种服务是由Int ...
- 计算机电路基础试题及答案,2019年电大计算机电路基础期末复习试题及参考答案...
2019年电大计算机电路基础期末复习试题及参考答案 一.填空题(每空2分,共30分) 1.在一个5的电阻上施加20V电压,该电阻吸收的功率是____________W. 2.把PN结外加正向电压时导通 ...
最新文章
- 又一届Google Cloud Next,李飞飞发布TPU 3.0,两大AutoML新品
- 《JavaScript快速全栈开发》作者Azat Mardanov:现在是拥抱Node技术栈的最佳时机
- 起底华为计算战略:十五年研发下苦功,三年连发10芯加速,目前2万工程师奋战...
- CTFshow 反序列化 web255
- 【福利解锁Part1】报名参与腾讯云专场活动,第一波干货内容免费放送
- -m commit git_Git 天天用,但是 Git 原理你了解吗?不进来了解一下?
- 【Android】Service生命周期回顾
- 《手把手教你学DSP-基于TMS320F28335》书中的错误
- POS58热敏打印解决方法
- 基于多输入模型及句法结构的中文评论情感分析方法
- react-native 轮播组件 looped-carousel使用介绍
- 利用卷积神经网络(CNN)构造社区问答系统
- 摄像头测心率(python)
- 2016基于百度地图定位
- 基于深度学习的RGBD深度图补全算法文章鉴赏
- Spark:图(Graph)
- mysql的explain关键字ken_len列
- 高性能mysql学习笔记--高级特性
- android+mdm+解决方案,Android平台下的MDM (Mobile Device Management)解决方案
- 时间序列模型——AR、MA、ARMA、ARIMA