数据结构--链表

链表求和 Add Two Numbers—
第十一章 38题

你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
样例:
输入: (2 -> 4 -> 3) + (5 -> 6 -> 4),返回 7 -> 0 -> 8。

解题思路:
把两个链表当成是相同长度的,短的那个想象成后面都是 0;如果进位的话,在初始化下一个节点的时候将其赋值为 1 即可,所以在计算当前节点的值时要加上自己本来的值。

// An highlighted block
var foo = 'bar';

----2020/3/12
----在长度为n的顺序表的第i (1≤i≤n)个位置上删除一个元素,元素的移动次数为( )

正确答案: B
n-i+1
n-i
i
i-1
解析:
在这里插入图片描述
如上图,假如要删除第4个元素,则在删除4的时候,后面的5和6要向前移动,所以移动次数为
6-4=2,答案为n-i。

----不考虑分页的情况下,线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻()。

正确答案: B
正确
错误

解析:线性表中,顺序表物理相邻逻辑相邻,链表逻辑相邻物理不一定相邻。

----某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
正确答案: D
单链表
仅有头指针的单循环链表
双链表
仅有尾指针的单循环链表

解析:。。。。

----以下关于线性表的说法不正确的是______。
正确答案: C
线性表中的数据元素可以是数字、字符、记录等不同类型。
线性表中包含的数据元素个数不是任意的。
线性表中的每个结点都有且只有一个直接前趋和直接后继。
存在这样的线性表:表中各结点都没有直接前趋和直接后继。

解析:线性表中,头结点没有直接前驱,尾结点没有直接后继。

----用数组r存储静态链表,结点的next域指向后继,工作指针j指向链中结点,使j沿链移动的操作为()
正确答案: A
j=r[j].next
j=j+1
j=j->next
j=r[j]->next

解析:。。

----需要频繁的插入删除操作使用什么结构比较合适?
正确答案: C
数组
队列
链表

解析:数组的优点是较高的存储效率和快速的随机存取,缺点是数组不能动态的增长,并且在插入和删除时,平均会移动n/2的数据,不适用于随机位置插入和删除很频繁的操作。而链表家恰好具备此优点,一般来说链表的插入和删除基本是固定时间的,链表的缺点是不太适合于随机访问,而在连续访问时,链表也具有很好的表现。
队列(queue)和栈是一种操作受限的线性表。栈的操作受限表现在插入和删除只能对栈顶元素进行,删除的元素永远是最新插入的,即操作遵循后入先出(LIFO)原则。

----指针 P 指向单链表 L 中的非尾部结点,则删除其后继结点的语句是?
正确答案: D
p = p.next
p =null
p.next=null
p.next = p.next.next

解析:删除p的后继,直接把p.next跳过就好。

----在有n个结点的二叉链表中,值为非空的链域的个数为( )。
正确答案: A
n-1
2n-1
n+1
2n+1
----解析:
二叉树的存储结构可以用顺序存储和链式存储来存储。
二叉树一般使用链式存储结构,由二叉树的定义可知,二叉树的结点由一个数据元素和分别指向其左右孩子的指针构成,即二叉树的链表结点中包含3个域,这种结点结构的二叉树存储结构称之为二叉链表。
在有N个结点的二叉链表中必定有2N个链域。
除根结点外,其余N-1个结点都有一个父结点。
所以,一共有N-1个非空链域,其余2N-(N-1)=N+1个为空链域。

----What is the difference between a linked list and an array?
正确答案: A B C
Search complexity when both are sorted
Dynamically add/remove
Random access efficiency
Data storage type
解析:数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。
链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。

----2020/3/14

----链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序存储结构中效率高()
正确答案: A

解析:链表查找慢, 但是插入,删除快, 因为插入删除只要变几个指针。 不想顺序存储时要移动后序的所有元素的位置。

----稀疏矩阵一般的压缩存储方法有两种,即()
正确答案: C
二维数组和三维数组
三元组和散列
三元组和十字链表
散列和十字链表
解析:1.三元组顺序表又称有序的双下标法,对矩阵中的每个非零元素用三个域分别表示其所在的行号、列号和元素值。它的特点是,非零元在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。当矩阵中的非0元素少于1/3时即可节省存储空间。
2.十字链表:是既带行指针又带列指针的链接存储方式,每个三元组结点处于所在行单链表与列单链表的交点处,当矩阵的非零元个数和位置在操作过程中变化较大时,用这种存储结构更为恰当。

----双向链表中有两个指针域,llink和rlink分别指向前驱和后继,设p指向链表中的一个结点,现要求删去p所指结点,则正确的删除是()(链中结点数大于2,p不是第一个结点)
正确答案: D
p->llink->rlink:=p->llink;
p->llink->rlink:=p->rlink;
dispose§;

dispose§;
p->llink->rlink:=p->llink;
p->llink->rlink:=p->rlink;

p->link->rlink:=p->llink;
dispose§;
p->llink->rlink:=p->rlink;

以上A,B,C都不对
解析:假设原来n=p=m,其中=表示双向
那么最终目的是变为n=m;
首先改变前驱结点的指针域
p->llink->rlink=p->rlink;
然后改变后继结点的指针域
p->rlink->llink=p->llink;

----以下操作中,数组比链表速度更快的是____
正确答案: A C E
原地逆序
头部插入
返回中间节点
返回头部节点
选择随机节点
解析:A选项,如果是数组只要遍历一半元素就可以了,翻转的思想类似于字符串逆序,但链表如果要完成逆序,就算只是修改指针也要把所有的元素遍历完,所以相比而言数组还是比链表快的。
B链表只需插入一个节点,数组需移动n个元素
C选项的访问中间节点,数组可以通过array[length/2]访问,链表需要依次查找到中间节点。
D头结点都一样
E 数组是顺序存储的线性表,相对于链表而言主要的优点就是可以通过下标随机访问数组中的任意元素。

----2020/4/24

----在这里插入图片描述
正确答案: B
r←link§; link§←r; call RET®
r←link§; link§←link®; call RET®
r←link§; link§←link®; call RET§
link§←link(link§); call RET§
解析:link(p)表示读取p节点link包含的地址也就是p后面一个节点,←表示赋值。选项意思相当于 r=p->next; p->next = r ->next; free(r);

----2020/5/3

----在这里插入图片描述
正确答案: D
解析:双向链表添加新结点,先修改新结点的前驱和后继,再修改后结点的前驱,最后修改前结点的后继

----在这里插入图片描述
答案:D
解析:在这里插入图片描述
在这里插入图片描述


以下关于线性表的说法不正确的是______。
正确答案: C
线性表中的数据元素可以是数字、字符、记录等不同类型。
线性表中包含的数据元素个数不是任意的。
线性表中的每个结点都有且只有一个直接前趋和直接后继。
存在这样的线性表:表中各结点都没有直接前趋和直接后继。
解析:C明显错误,线性表中,头结点没有直接前驱,尾结点没有直接后继。
D当线性表只有一个数据元素时,没有前驱,没有后继

----以下操作中,数组比链表速度更快的是____
正确答案: A C E
原地逆序
头部插入
返回中间节点
返回头部节点
选择随机节点

解析:A选项,如果是数组只要遍历一半元素就可以了,翻转的思想类似于字符串逆序,但链表如果要完成逆序,就算只是修改指针也要把所有的元素遍历完,所以相比而言数组还是比链表快的。
B链表只需插入一个节点,数组需移动n个元素
C选项的访问中间节点,数组可以通过array[length/2]访问,链表需要依次查找到中间节点。
D头结点都一样
E 数组是顺序存储的线性表,相对于链表而言主要的优点就是可以通过下标随机访问数组中的任意元素。

----广义表的同级元素(直属于同一个表中的各元素)具有线性关系()
正确答案: A


解析:广义表可看成是一种特殊的线性表:表中的数据元素本身也是一种线性表。

----在这里插入图片描述
答案:d
在这里插入图片描述

----单链表中,增加一个头结点的目的是为了 。
正确答案: C
使单链表至少有一个结点
标识表结点中首结点的位置
方便运算的实现
说明单链表是线性表的链式存储

解析:链表增加头结点的作用:
1.便于首元节点的处理
2.便于空表和非空表的处理

----对链表进行插入和删除操作时不必移动链表中结点。 ( )
正确答案: A
正确
错误
解析:链表插入和删除只是改变了相应节点的指针指向,地址并没有改变,所以不必移动

----单链表中结点的结构为(data,link),若想删除结点p(不是头节点或者尾结点)的直接后继,则应执行下列哪个操作
正确答案: D
p=p->link ; p->link=p->link->link
p->link->link=p->link;
p=p->link->link
p->link=p->link->link
解析:在这里插入图片描述

----设带有头结点的单向循环链表的头指针变量为head,则其判空条件是()。

正确答案: C
head0
head->next
0
head->nexthead
head!=0
解析:带头结点单向链表的判空条件是head.next
null;
带头结点的单向循环链表的判空条件是head.next==head;

----所谓取广义表的表尾就是返回广义表中最后一个元素()
正确答案: B


解析:广义表的表头是广义表的第一个元素,可以是一个特定的类型,也可以是一个广义表
广义表的表尾是广义表中将除了第一个元素之外的所有元素看做一个广义表

----单链表结点的数据元素只能是哪一种?( )。

正确答案: C
整型
字符串
任何数据类型
实型
解析:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置)

----若频繁删除某线性表的第1个元素,则不宜采用以下哪种存储方式
正确答案: B
单链表
顺序表
单向循环链表
双链表
解析:对顺序表来说,删除第一个元素就需要后续元素都向前移动一个位置。
每删除一次都需要移动大量元素,因此不宜采用。

----在一个长度为n的单链表的第i(0<=i<n)个元素后面插入一个元素时,需要向后移动(  )个元素。

正确答案: D
n-i
n-i+1
n-i-1
0
解析:单链表在执行插入、删除时 不需要移动元素 这也是与顺序表的不同。

----下列哪两个数据结构,同时具有较高的查找和删除性能?()
正确答案: C D
有序数组
有序链表
AVL树
Hash表
解析:在这里插入图片描述

----2020/5/4

----下列选项中,_____项是链表不具有的特点 。

正确答案: D
插入和删除运算不需要移动元素
所需要的存储空间与线性表的长度成正比
不必事先估计存储空间大小
可以随机访问表中的任意元素
解析:链表不能随机存取,只有线性表(数组)既可以随机又可以顺序存取。

----为了很方便的插入和删除数据,可以使用双向链表存放数据()
正确答案: A


解析:答案选A,因为在双向链表中,我们可以直接删除当前指针所指向的节点。而不需要像单向链表中,删除一个元素必须找到其前驱。
因此在插入数据时,单向链表和双向链表操作复杂度相同,而删除数据时,双向链表的性能优于单向链表。

----在有n个节点的二叉链表中,值为空的链域的个数为()

正确答案: B
n-1
n+1
2n-1
2n+1
解析:n个结点的二叉链表共有2n个链域,除了根节点以外,其他每个节点都被一个链域所指向,因此用到的链域为n-1个,
即空链域个数为:2n - ( n-1) = n+1个

----在这里插入图片描述
正确答案: A
解析:在这里插入图片描述

----广义表即我们通常所说的列表(lists)。它放松了对表元素的原子性限制,允许他们有自身结构。那么广义表E((a,(a,b),((a,b),c)))的长度和深度分别为:
正确答案: B
2和4
1和4
1和3
2和3
解析:长度:去掉一层括号剩下的是几部分。
深度:去掉几层括号可以到最后一部分。
比如: 例如E((a,(a,b),((a,b),c)))的长度和深度分别为1和4

----广义表中的元素或者是一个不可分割的原子,或者是一个非空的广义表()
正确答案: B


解析:非空的广义表中的元素或者是一个不可分割的原子,或者是一个非空的广义表

----对于一个头指针为L的带头结点的单链表,判定链表为空表的条件是()
正确答案: C
L=NULL;
L->next=NULL;
L->nextNULL;
L!=NULL;
解析:对于一个头指针为L的带头结点的单链表,头结点通常不存内容的,所以判定方式是L.next
NULL;

----在这里插入图片描述
正确答案: D
解析:双向链表的插入顺序:先搞定插入节点的前驱和后继,在搞定前结点的前驱,最后搞定前结点的后继。

----下列叙述中错误的是( )
正确答案: B
二叉链表是二叉树的存储结构
循环链表是循环队列的存储结构
栈是线性结构
循环队列是队列的存储结构
解析:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值