【数据结构】——线性表的相关习题

这篇具有很好参考价值的文章主要介绍了【数据结构】——线性表的相关习题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题型一(线性表的存储结构)

1、线性表的顺序存储结构是一种()存储结构。
A、顺序存取
B、随机存取
C、索引存取
D、散列存取

解析:(B)
顺序存储结构的可以实现随机存取,可以在O(1)内通过首地址和元素序号找到元素,每个元素占用最少的存储空间,其存储密度高,但只能使用相邻的一块存储单元,从而可能会产生较多的外部碎片。

2、一个顺序表所占的存储空间大小与()无关。
A、表的长度
B、元素的存放顺序
C、元素的类型
D、元素中各字段的类型

解析:(B)
顺序存储结构中把逻辑上相邻的元素存储在物理位置上也相邻的存储单元里,元素之间的关系由存储单元的邻接关系来体现,设sizeof(ElemType)是每个数据元素所占用的存储空间大小,即该顺序表的存储空间大小=表长×sizeof(元素类型),所以与元素的存放顺序无关。

3、若一个线性表最常用的操作是在表尾插入元素和删除表头元素,则采用()存储结构最节省时间。
A、仅有头指针的单链环
B、仅有尾指针的单链环
C、单链表
D、双链表

解析:(B)
单链表在插入/删除元素遍历寻找元素位置时,只能从表头遍历到表尾;虽然双链表可以来回遍历,但若在表尾插入/删除一个元素时仍需遍历整个链表;仅有头指针的单链环中,当在链表中的第一个位置进行插入/删除操作很方便,但若在表尾插入/删除一个元素时,也只能从表头遍历到表尾。

题型二(链表的判空条件)

1、单链表L(带头结点)和单链表L(不带头结点)为空的判断条件为()。
A、L==NULL,L ==NULL
B、L→next == NULL,L ==NULL
C、L→next != NULL,L ==NULL
D、L!= NULL,L ==NULL

解析:(B)
带头结点的单链表中,由于带有头结点,首先要通过malloc()函数分配一个头结点L,如下:

L=(LNode *)malloc(sizeof(LNode));		//分配一个头结点

当头结点之后暂时还没有任何结点,表示空链表,即L→next=NULL

不带头结点的单链表中,由于不带头结点,可直接将单链表置为空,即L ==NULL

2、双链表L(带头结点)和单链表L(不带头结点)为空的判断条件为()。
A、L==NULL,L ==NULL
B、L→next == NULL,L ==NULL
C、L→next != NULL,L ==NULL
D、L!= NULL,L ==NULL

解析:(B)
带头结点的双链表中,与带头结点和不带头结点的单链表一样,也是要先分配一个带头结点的单链表,所以其判断空表的条件一样,也是L→next=NULLL ==NULL
【数据结构】——线性表的相关习题,数据结构,数据结构,线性表,链表,单链表,循环链表

3、带头结点head的单向循环链表L为空的判断条件是()和不带头结点head的单向循环链表L为空的判断条件是()。
A、L ==NULL,L ==head→next
B、L ==L,L ==NULL
C、L ==head→next,L ==NULL
D、L ==NULL,L ==NULL

解析:(C)
循环单链表可以实现从任一个结点访问链表中的任何结点,在带头结点的循环单链表中,若L == head→next时,循环单链表为空;在不带头结点的循环单链表中,若L ==NULL时,循环单链表为空。

4、带头结点head的双向循环链表L为空的判断条件是()和不带头结点head的双向循环链表L为空的判断条件是()。
A、head→prior == head&&head→nex t ==head,head ==NULL
B、head ==NULL,head→prior == head&&head→nex t ==head
C、head ==NULL,head ==NULL
D、head→next=head→prior,head→next=head→prior

解析:(A)
带头结点的双向循环链表,若head→prior == head&&head→next ==head时,则该双链表为空。(即其头结点的prior和next域都指向其本身时为空)

不带头结点的双向循环链表,当head为空时,表明此双向循环无头结点链表为空,即head==NULL

题型三(单链表的建立)

1、对于一个具有n个元素的线性表,建立其单链表的时间复杂度为()。
A、O(1)
B、O(n)
C、O(log2n)
D、O(n2)

解析:(B)
单链表的建立过程是将每个结点逐个插入到单链表中,每次插入操作的时间复杂度为O(1),若单链表规模为n,所以建立单链表的时间复杂度为n×O(1)=O(n)。

题型四(顺序表的操作)

1、(填空)在一个长度为n的顺序表中第i个元素(1≤i≤n)之前插入元素时,需向后移动________个元素,删除第i个元素(1≤i≤n)需向前移动________个元素。

解析:n-i+1n-i

2、在顺序表中插入一个元素的时间复杂度为(),删除一个元素的时间复杂度为()。
A、O(n),O(1)
B、O(1),O(n)
C、O(1),O(1)
D、O(n),O(n)

解析:(D)
顺序表插入操作和删除操作实际上都是元素的移动,即在一个表长为n的顺序表中的i位置上操作和删除一个元素,需要进行元素移动的次数为n-i次,操作和删除操作的平均元素移动次数分别为n/2、(n-1)/2次,故时间复杂度都为O(n)

3、在线性表的下列存储结构中,读取元素花费时间最少的是()。
A、顺序表
B、单链表
C、双向链表
D、循环链表

解析:(A)
由于顺序表在O(1)时间访问线性表中第i个数据元素,所以其读取元素花费时间最少。

题型五(单链表的操作)

1、在单链表中在结点后插入一个结点的时间复杂度为()、在结点前插入一个结点的时间复杂度为()。
A、O(n),O(1)
B、O(1),O(n)
C、O(1),O(1)
D、O(n),O(n)

解析:(A)
后插操作,其时间开销主要在于查找第i-1个元素,即O(n),将新结点的指针域指向下一个结点,同时将该结点与前一个结点连接即可。

前插操作,也是将新结点的指针域指向下一个结点,该结点与前一个结点连接,然后通过一个中间变量将上一个结点的数据域与该结点交换即可,从而使时间复杂度达到O(1)

2、在单链表中删除第i个结点的时间复杂度为(),若将删除结点 * p的操作转换为删除结点 * p的后继结点来实现,其时间复杂度为()。
A、O(n),O(n)
B、O(1),O(n)
C、O(1),O(1)
D、O(n),O(1)

解析:(D)
删除结点操作也是主要在于查找第i-1个元素,即O(n)

若将删除结点 * p的操作转换为删除结点 * p的后继结点来实现,将下一个结点的指针域指向上一个结点,在交换数据域后,将* q结点从单链表中断开并释放该结点即可,这样的时间复杂度为O(1)

3、(填空)对于一个具有n个结点的有序单链表,向其中插入一个新结点仍保持有序的时间复杂度为_________。

解析:O(1)
对于一个具有n个结点的有序单链表,向其中插入一个新结点仍保持有序的时间复杂度为O(n)。首先要找到一个大于或小于某结点的直接前驱结点p,在p后插入结点,查找所需时间为O(n),插入所需时间为O(1)。

题型六(双链表的操作)

1、在一个双链表中,在p结点之后插入一个结点q的操作是()。
A、q→prior=p;p→next=q;p→next→prior=q;q→next=p→next
B、q→next=p→next;p→next=q;q→prior=p;p→next→prior=q
C、p→next=q;q→prior=p;q→next=p→next;p→next→prior=q
D、q→prior=p;p→next=q;q→next=p→next;p→next→prior=q

解析:(B)
如下图,操作①(q→next=p→next)、②(p→next=q)的目的是将要插入的结点q的prior、next域与两边的结点连接起来:
【数据结构】——线性表的相关习题,数据结构,数据结构,线性表,链表,单链表,循环链表

2、在一个双链表中,在p结点之前插入一个结点q的操作是()。
A、p→prior=q;q→next=p;p→prior→next=q;q→prior=p→prior
B、q→prior=p→prior;p→prior→next=q;q→next=p;p→prior=q→next
C、q→next=p;p→next=q;q→prior→next=q;q→next=p
D、p→prior→next=q;q→next=p;q→prior=p→prior;p→prior=q

解析:(D)
如下图,操作①(p→prior→next=q)、②(q→next=p)的目的是将要插入的结点q的prior、next域与两边的结点连接起来:
【数据结构】——线性表的相关习题,数据结构,数据结构,线性表,链表,单链表,循环链表

3、在一个双链表中,删除表中结点p的后继结点q的操作顺序是()。
①p→next=q→next;
②q→next→prior=p;
③free(q);
A、①②③
B、②①③
C、③②①
D、③①②

解析:(A)
如下图:
【数据结构】——线性表的相关习题,数据结构,数据结构,线性表,链表,单链表,循环链表

4、在一个双链表中,删除表中结点q的操作是()。
A、q→next→prior=q→prior;q→prior→next=q;free(q)
B、q→prior→next=q→next;q→next→prior=q→prior;free(q)
C、free(q);q→next→prior=q;q→next=q→next→next
D、free(q);q→next=q→prior→prior;q→prior=q→prior→prior

解析:(B)
如下图:
【数据结构】——线性表的相关习题,数据结构,数据结构,线性表,链表,单链表,循环链表

题型七(循环单链表的操作)

1、非空的循环单链表head的尾结点p满足()。
A、p→link == head
B、p→link == NULL
C、p == NULL
D、p == head

解析:(A)
当p指针的link域指向head头指针时表示p指针指向的元素是尾元素,即当p == head满足条件,如下图循环单链表:
【数据结构】——线性表的相关习题,数据结构,数据结构,线性表,链表,单链表,循环链表

2、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省时间。
A、单链表
B、仅有头指针的单循环链表
C、双链表
D、仅有尾指针的单循环链表

解析:(D)
选择仅有尾指针的单循环链表时,当在最后插入结点和删除第一个结点的时间复杂度都为O(1),所以选择D选项。而仅有头指针的单循环链表中,在最后插入结点则需要遍历整个链表,即需要O(n)的时间。

题型八(循环双链表的操作)

1、在一个以h为头指针的双向循环链表中,指针p所指的元素是尾元素的条件是()。
A、p == h
B、h→rlink == p
C、p→llink == h
D、p→rlink == h

解析:(D)
当p指针的rlink域指向h头指针时表示p指针指向的元素是尾元素,即当p→rlink == h满足条件,如下图循环双链表:
【数据结构】——线性表的相关习题,数据结构,数据结构,线性表,链表,单链表,循环链表

2、设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用()最节省时间。
A、单链表
B、单循环链表
C、带尾指针的单循环链表
D、带头结点的双循环链表

解析:(D)
当在末尾插入结点和删除尾结点时,若采用带尾指针的单循环链表,则末尾插入结点,由于尾指针R→next即为头指针,对表头和表尾只需要O(1)的时间复杂度,而删除尾结点时需要遍历整个链表,时间复杂度为O(n)。带头结点的双循环链表实现这两种都是O(1)的时间复杂度。

3、对于双向循环链表,在p指针所指的结点之后插入s指针所指结点的操作应为()。
A、p->right=s、s->left=p、p->right->left=s、s->right=p->right;
B、p->right=s、、p->right->left=s、s->left=p、s->right=p->right;
C、s->left=p、s->right=p->right、p->right=s、p->right->left=s;
D、s->left=p、s->right=p->right、p->right->left=s、p->right=s;

解析:(D)
双链表在p指向的结点前或结点后插入结点都可以,A选项和B选项中p->right=s语句执行后*p的原后继结点断链。

题型九(静态链表)

1、静态链表中指针表示的是()。
A、下一元素的地址
B、内存储器的地址
C、下一元素在数组中的位置
D、左链或右链指向的元素的地址

解析:(C)
静态链表中指针是通过结点的数组下标表示,它是借助数组来描述链式结构的。

2、静态链表与动态链表相比,其缺点是()。
A、插入、删除时需移动较多数据
B、有可能浪费较多存储空间
C、不能随机存取
D、以上都不是

解析:(B)
静态链表要定义一个一维数组空间,借助数组来描述链式结构,每个数组元素有两个分量,一是数据元素的值,二是指针。指针指向下一个元素在数组中的位置 (下标),插入和删除操作时只需修改指针,而不需要不移动数据,这一点与动态链表相同。静态链表不能随机存取。另外,若定义的数组太大,有可能浪费较多的存储空间。文章来源地址https://www.toymoban.com/news/detail-628709.html

到了这里,关于【数据结构】——线性表的相关习题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【玩转408数据结构】线性表——双链表、循环链表和静态链表(线性表的链式表示 下)

            在前面的学习中,我们已经了解到了链表(线性表的链式存储)的一些基本特点,并且深入的研究探讨了单链表的一些特性,我们知道,单链表在实现插入删除上,是要比顺序表方便的,但是,单链表中每个结点仅存在一个指针指向其后续结点,那么如果我们想要找

    2024年04月10日
    浏览(57)
  • <数据结构> 链表 - 链表的概念及结构

    概念: 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的 逻辑顺序 是通过链表中的 指针链接 次序实现的 1、链表由一系列结点(链表中每一个元素称为结点)组成。 2、结点可以在运行时动态(malloc)生成。 3、每个结点包括两个部分:一个是存储数据元素的

    2023年04月09日
    浏览(43)
  • 【数据结构】反转链表、链表的中间节点、链表的回文结构(单链表OJ题)

    正如标题所说,本文会图文详细解析三道单链表OJ题,分别为:  反转链表 (简单)  链表的中间节点 (简单)  链表的回文结构 (较难) 把他们放在一起讲的原因是:  反转链表 和  链表的中间节点 是  链表的回文结构 的基础 为什么这样说?请往下看: 目录 1. 反转链

    2024年02月13日
    浏览(68)
  • 【数据结构】链表的回文结构

    单链表的操作算法是笔试面试中较为常见的题目。 本文将着重介绍平时面试中常见的关于链表的应用题目,马上要进行秋招了。希望对你们有帮助 _ 😀 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针

    2024年02月12日
    浏览(52)
  • 【数据结构】链表的分类和双向链表

    本篇是基于上篇单链表所作,推荐与上篇配合阅读,效果更加 http://t.csdnimg.cn/UhXEj 链表的结构非常多样,以下情况组合起来就有8种(2 x 2 x 2)链表结构: 我们一般叫这个头为哨兵位 我们上回讲的单链表就是不带头单项不循环链表。 今天我们要讲带头双向循环的链表。 不过

    2024年01月25日
    浏览(37)
  • 数据结构-二叉链表的结构与实现

    目录 一、引言 二、什么是二叉链表 三、二叉链表的结构 四、二叉链表的实现 1. 创建二叉链表 2. 遍历二叉链表 3. 插入节点 4. 删除节点 五、应用场景 六、总结 七、代码示例 数据结构是计算机科学中的重要概念,它是计算机程序设计的基础。二叉链表是一种常见的数据结构

    2024年02月08日
    浏览(48)
  • 数据结构----链表介绍、模拟实现链表、链表的使用

    ArrayList底层使用连续的空间,任意位置插入或删除元素时,需要将该位置后序元素整体往前或者往后搬移,故时间复杂度为O(N) 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后

    2024年02月21日
    浏览(50)
  • 【(数据结构)— 双向链表的实现】

    注意: 这里的 “带头” 跟前面我们说的 “头节点” 是两个概念,实际前面的在单链表阶段称呼不严 谨,但是为了同学们更好的理解就直接称为单链表的头节点。 带头链表里的头节点,实际为 “哨兵位” ,哨兵位节点不存储任何有效元素,只是站在这里“放哨 的” “哨

    2024年02月06日
    浏览(42)
  • 【数据结构】双向链表的实现

    我要扼住命运的咽喉,他却不能使我完全屈服。                      --贝多芬 目录 一.带头循环的双向链表的特点 二.不带头不循环单向链表和带头循环的双向链表的对比 三.初始化链表,创建哨兵结点 四.双向链表的各种功能的实现 1.双向链表的尾插 2.双向链表的打印 

    2023年04月10日
    浏览(43)
  • 数据结构——双向链表的实现

    注意: 双向链表又称带头双向循环链表 这⾥的“带头”跟前⾯我们说的“头节点”是两个概念,实际前⾯的在单链表阶段称呼不严 谨,但是为了同学们更好的理解就直接称为单链表的头节点。 带头链表⾥的头节点,实际为“ 哨兵位 ”,哨兵位节点不存储任何有效元素,只

    2024年02月06日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包