严魏敏-习题-线性表-02

本文探讨了数据结构中的顺序表和链表操作,包括元素地址计算、常数时间复杂度操作、插入与删除的平均移动元素数量、存储密度等概念。此外,还涉及线性表的特性、排序操作的时间复杂度以及链表结构的优势和劣势。同时,提出了多项链表操作的算法设计题目,如有序链表合并、交集与差集计算、链表反转等,这些题目旨在考察对链表操作的深入理解和应用能力。
摘要由CSDN通过智能技术生成

严魏敏习题

1.选择题

(1)顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(B)。

A. 110
B. 108
C. 100
D. 120

(2)在含n个结点的顺序表中,算法的时间复杂度是O(1)的操作是( A )。

A. 访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)
B. 在第i个结点后插入一个新结点(1≤i≤n)
C. 删除第i个结点(1≤i≤n)
D. 将n个结点从小到大排序

(3)在一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为( B )。

A. 8
B. 63.5
C. 63
D. 7

(4)链接存储的存储结构所占存储空间( A )。

A. 分为两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
B. 只有一部分,存放结点值
C. 只有一部分,存储表示结点间关系的指针
D. 分两部分,一部分存放结点值,另一部分存放结点所占单元数

(5)线性表若采用链式存储结构,要求内存中可用存储单元的地址( D )。

A. 必须是连续的
B. 部分地址必须是连续的
C. 一定是不连续的
D. 连续或不连续都可以

(6)线性表L在( B )情况下适用于使用链式结构实现。

A. 需经常修改L中的结点值
B. 需不断对L进行删除、插入
C. L中含有大量的结点
D. L中结点结构复杂

(7)单链表的存储密度( C)。

A. 大于1
B. 等于1
C. 小于1
D. 不能确定
解释:存储密度是指一个结点数据本身所占的存储空间和整个结点所占的存储空间之比,假设单链表一个结点本身所占的空间为D,指针域所占的空间为N,则存储密度为:D/(D+N),一定小于1。

(8)将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是( A )。

A. n
B. 2n−1
C. 2n
D. n−1

(9)在一个长度为n的顺序表中,在第i个元素(1≤i≤n+1)之前插入一个新元素时需向后移动( B )个元素。

A. n−i
B. n−i+1
C. n−i−1
D. i
在这里插入图片描述

(10)线性表L=(a1,a2,…,an),下列陈述正确的是( D )。

A. 每个元素都有一个直接前驱和一个直接后继
B. 线性表中至少有一个元素
C. 表中诸元素的排列必须是由小到大或由大到小
D. 除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继

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

A. O(1)
B. O(n)
C. O(n2)
D. O(nlog2n)
解释:单链表创建的时间复杂度是O(n),而要建立一个有序的单链表,则每生成一个新结点时需要和已有的结点进行比较,确定合适的插入位置,所以时间复杂度是O(n2)。

(12)以下陈述错误的是( D )。

A. 求表长、定位这两种运算在采用顺序存储结构时实现的效率不比采用链式存储结构时实现的效率低
B. 顺序存储的线性表可以随机存取
C. 由于顺序存储要求连续的存储区域,所以在存储管理上不够灵活
D. 线性表的链式存储结构优于顺序存储结构

(13)在单链表中,要将s所指结点插入到p所指结点之后,其语句应为( D )。

A. s->next=p+1; p->next=s;
B. (*p).next=s; (*s).next=(*p).next;
C. s->next=p->next; p->next=s->next;
D. s->next=p->next; p->next=s;

(14)在双向链表存储结构中,删除p所指结点时修改指针的操作为( A )。

A. p->next->prior=p->prior; p->prior->next=p->next;
B. p->next=p->next->next; p->next->prior=p;
C. p->prior->next=p; p->prior=p->prior->prior;
D. p->prior=p->next->next; p->next=p->prior->prior;

(15)在双向循环链表中,在p指针所指的结点后插入q所指向的新结点,其修改指针的操作是( C )。

A. p->next=q; q->prior=p; p->next->prior=q; q->next=q;
B. p->next=q; p->next->prior=q; q->prior=p; q->next=p->next;
C. q->prior=p; q->next=p->next; p->next->prior=q; p->next=q;
D. q->prior=p; q->next=p->next; p->next=q; p->next->prior=q;

2.算法设计题

(1)将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复的数据。

(2)将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中允许有重复的数据。

(3)已知两个链表A和B分别表示两个集合,其元素递增排列。请设计一个算法,用于求出A与B的交集,并存放在A链表中。

(4)已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。

(5)设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B和C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A中的元素为非零整数,要求B、C表利用A表的结点)。

(6)设计一个算法,通过一趟遍历确定长度为n的单链表中值最大的结点。

(7)设计一个算法,将链表中所有结点的链接方向“原地”逆转,即要求仅利用原表的存储空间,换句话说,要求算法的空间复杂度为O(1)。

(8)设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数,其值可以和表中的元素相同,也可以不同)。

(9)已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,写出算法change§,交换p所指向的结点及其前驱结点的顺序。

(10)已知长度为n的线性表A采用顺序存储结构,请写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法可删除线性表中所有值为item的数据元素。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值