【数据结构】线性表部分习题2(顺序表与链表)

数据结构(线性表部分2)
数据结构习题持续更新中!!!

目录

    • 一、单选题
    • 二、简答题
      • 1. 顺序表就地逆置
      • 2. 循环单项链表的就地逆置

作业习题笔记:

  1. 该部分是线性表部分习题的补充、更多习题见: 数据结构(线性表习题1)
  2. 详细一元多项式的操作方法见文章:【数据结构】一元多项式的表示与相加(无序输入 有序输出)
  3. 知识点:【数据结构】线性表部分笔记1以及静态链表、循环单链表、双向链表、双向循环链表(线性表笔记2)

一、单选题

  1. 下面关于线性表的叙述中,错误的是哪一个?( )

A 线性表采用顺序存储,必须占用一片连续的存储单元。
B 线性表采用顺序存储,便于进行插入和删除操作。
C 线性表采用链接存储,不必占用一片连续的存储单元。
D 线性表采用链接存储,便于插入和删除操作。
选B
A、C、D是正确的,是顺序存储结构和链式存储结构的特点.
顺序存储的根据数组指针直接定位,在顺序表的任何位置上插入一个数据元素,平均需要移动n/2个数据元素,算法效率为O(n)

  1. 线性表是具有 n 个( )的有限序列(n>0)。

A 表元素
B 字符
C 数据元素
D 数据项
E 信息项
选 C
数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。
一个数据元素可由若干个数据项组成,数据项是构成数据元素的不可分割的最小单位。例如,学生记录就是一个数据元素,它由学号、姓名、性别等数据项组成
引用牛客网中的解析: 线性表:0个或者多个数据元素的有限序列。
数据项:一个数据元素可以由多个数据项组成(例如人由头身体双手双脚颈部组成。)

  1. 若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( )存储方式最节省时间。

A 顺序表
B 双链表
C 带头结点的双循环链表
D 单循环链表
选A
对于B、C、D,链表不能随意存取指定序号的元素。因此应使用顺序表来存取任一指定序号的元素,该操作的复杂度为O(n)。同时顺序表在最后进行插入和删除一个元素的复杂度只是是O(1)

  1. 若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( )存储方式最节省运算时间。

A 单链表
B 仅有头指针的单循环链表
C 双链表
D 仅有尾指针的单循环链表
选D
对于A、B、C要想在尾端插入结点,需要遍历整个链表,复杂度为O(n)。
对于D,要插入结点,只要改变一下指针即可,要删除头结点,只要将指针移动到头结点即可。

  1. 链表不具有的特点是( )

A 插入、删除不需要移动元素
B 可随机访问任一元素
C 不必事先估计存储空间
D 所需空间与线性长度成正比
选B
链表不能随机访问任一元素,因为其存储空间不连续,需要通过链表指针去"寻找"

  1. 下面的叙述不正确的是( )

A 线性表在链式存储时,查找第 i 个元素的时间同 i 的值成正比
B 线性表在链式存储时,查找第 i 个元素的时间同 i 的值相关
C 线性表在顺序存储时,查找第 i 个元素的时间同 i 的值成正比
D 线性表在顺序存储时,查找第 i 个元素的时间同 i 的值无关
选C
线性表在顺序存储时,查找第 i 个元素的时间同 i 的值无关

  1. 若长度为 n 的线性表采用顺序存储结构,在其第 i 个位置插入一个新元素的算法的时间复杂度为( )(1<=i<=n+1)。

A O(0)
B O(1)
C O(n)
D O(n^2)
选C
顺序存储的根据数组指针直接定位,在顺序表的任何位置上插入一个数据元素,平均需要移动n/2个数据元素,算法效率为O(n)

  1. 对于一个头指针为 head 的带头结点的单链表,判定该表为空表的条件是( )

A head==NULL;
B head->next==NULL;
C head->next==head;
D head!=NULL;
选B
由于单链表是带头结点的单链表,头指针为 head,第一个结点为head ->next。 则判断该单链表表为空的条件是head ->next==NULL,选项ACD都错误。 所以正确答案为B。

  1. 双向链表中有两个指针域,llink 和 rlink 分别指向前趋及后继,设 p 指向链表中的一个结点,现要求删去 p 所指结点,则正确的删除是( )

A p->llink->rlink = p->llink; p->llink->rlink =p->rlink; free(p);

B free(p); p->llink->rlink =p->llink; p->llink->rlink =p->rlink;

C p->llink->rlink =p->llink; free(p); p->llink->rlink = p->rlink;

D 以上 A,B,C 都不对。
选D

  1. 双向链表中有两个指针域,llink 和 rlink,分别指回前驱及后继,设 p 指向链表中的一个结点,q 指向一待插入结点,现要求在 p 前插入 q,则正确的插入为( )。

A p->llink = q; q->rlink = p; p->llink->rlink = q;q->llink = p->llink;
B q->llink = p->llink; p->llink->rlink = q; q->rlink = p;p->llink =q->rlink;
C q->rlink = p; p->rlink = q;p->llink->rlink = q; q->rlink =p;
D p->llink->rlink = q; q->rlink = p;q->llink = p->llink; p->llink =q;
选D

二、简答题

1. 顺序表就地逆置

  1. 用类C语言设计算法实现顺序表就地逆置
//实现顺序表就地逆置
//就地逆置顺序表
//写法一:
void Reverse(SqList &L){int temp;for(int i=0;i<L.length/2;i++){temp = *(L.elem+i);*(L.elem+i)=*(L.elem+L.length-1-i);*(L.elem+L.length-1-i)=temp;// temp = L.elem[i];// L.elem[i] = L.elem[L.length - 1 - i];// L.elem[L.length - 1 - i] = temp;}}//写法二:
//顺序表就地逆置
void Reverse2(SqList &L) {int *start_arry = L.elem;//指向首地址int *end_arry = L.elem+L.length-1;//指向存放数据尾部位置while (start_arry < end_arry) {int temp = *start_arry;*start_arry = *end_arry;*end_arry = temp;start_arry++;end_arry--;}
}

2. 循环单项链表的就地逆置

  1. 用类C语言设计算法实现循环单项链表的就地逆置
//实现循环单项链表的就地逆置
//方法一:
//循环单链表就地逆置()
void Reverse(LinkList& L) {LinkList pre, curr, next;pre = L;curr = L->next;while (curr!=L) {next = curr->next;curr->next = pre;pre = curr;curr = next;}L->next = pre; // 之后将头节点 指向 原本的尾结点
}//方法二:
//循环链表的就地倒置
void Reverse_Circular(LinkList &Link_Circular){if ( Link_Circular->next == Link_Circular) {return; // 链表为空或只有一个节点,无需逆置}LinkList p,q;    int num=1;p = Link_Circular->next;             /*p为原链表的当前处理节点*/while(p != Link_Circular ){        /*当原链表未处理完*/q = p->next;         /*q指针保留原链表当前处理节点的下一个节点*/if(num){p->next = Link_Circular;   /*将当前处理节点p插入到逆置L的表头*/num--;  //对第一个结点特殊处理}elsep->next = Link_Circular->next;   Link_Circular->next = p;p = q;               /*p指向下一个待插入的节点*/}}

作业习题笔记:

  1. 该部分是线性表部分习题的补充、更多习题见: 数据结构(线性表习题1)
  2. 详细一元多项式的操作方法见文章:【数据结构】一元多项式的表示与相加(无序输入 有序输出)
  3. 知识点:【数据结构】线性表部分笔记1以及静态链表、循环单链表、双向链表、双向循环链表(线性表笔记2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

933.最近的请求次数

题目&#xff1a;写一个 RecentCounter 类来计算特定时间范围内最近的请求。 请你实现 RecentCounter 类&#xff1a; RecentCounter() 初始化计数器&#xff0c;请求数为 0 。int ping(int t) 在时间 t 添加一个新请求&#xff0c;其中 t 表示以毫秒为单位的某个时间&#x…

HarmonyOS 开发-使用SideBarContainer侧边栏淡入淡出动效实现案例

介绍 在2in1或平板上&#xff0c;群聊侧边栏是一种较为常用的功能&#xff0c;虽然HarmonyOS已经具备了基本的动效&#xff0c;但是部分情况下开发者可能有定制侧边栏动效的需求&#xff0c;本例主要介绍了如何基于显式动画实现侧边栏的淡入淡出动效。 效果图预览 使用说明&a…

​泛微文书定人事档案一体化管理,覆盖人事管理全过程,人事档案全量归档

人事档案是个人身份、学历、资历等方面的证据&#xff0c;与个人工资待遇、社会劳动保障、组织关系紧密挂钩&#xff0c;具有法律效力。应注重收集和鉴别、整理工作&#xff0c;提升人事档案利用率。 企业应依据国家有关人事档案管理规定&#xff0c;制定企业人事档案管理办法&…

mysql性能索引调优易混点总结

文章目录 一、 前言二、explain相关三、索引优化相关联合索引索引下推排序和分组相关优化分页优化表关联优化嵌套循环连接 Nested-Loop Join(NLJ) 算法in和exsits优化 一、 前言 近几年看了很多和mysql相关的书&#xff0c;文章或视频&#xff0c;但仍然有一些点&#xff0c;看…

【吊打面试官系列】Java高并发篇 - 什么是线程组,为什么在 Java 中不推荐使用?

大家好&#xff0c;我是锋哥。今天分享关于 【什么是线程组&#xff0c;为什么在 Java 中不推荐使用&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 什么是线程组&#xff0c;为什么在 Java 中不推荐使用&#xff1f; ThreadGroup 类&#xff0c;可以把线程归属…

# 计算机视觉入门

## 概述 计算机视觉&#xff08;Computer Vision&#xff09;是人工智能的重要分支领域&#xff0c;它关注于如何使计算机“看”懂图像或视频内容&#xff0c;并从中提取有用信息&#xff0c;对视觉数据进行处理和理解。随着深度学习技术的兴起&#xff0c;计算机视觉领域取得…

排序+去重+二分,LeetCode 2009. 使数组连续的最少操作数

目录 一、题目 1、题目描述 2、接口描述 python3 cpp 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 python3 cpp 一、题目 1、题目描述 给你一个整数数组 nums 。每一次操作中&#xff0c;你可以将 nums 中 任意 一个元素替换成 任意 整数。 如果 …

领鸡蛋游戏养鸡游戏淘宝客源码广告联盟

用户中心 用户信息&#xff1a;显示用户名、头像、鸡蛋数量、足迹等基本信息。我的足迹&#xff1a;展示用户的饲料获取记录明细&#xff0c;包括来源、数量和时间。我的好友&#xff1a;展示邀请的好友列表&#xff0c;支持好友间互动&#xff0c;如串门、偷取/赠送饲料&#…

wait 和 notify

由于线程之间是抢占式执行的, 因此线程之间执行的先后顺序难以预知。但是实际开发中有时候我们可以通过一些 api 让线程主动阻塞&#xff0c;从而控制多个线程之间的执行先后顺序. 完成这些操作就需要用到 wait&#xff0c;notify / notifyAll 注意: wait, notify, notifyAll…

Google Play上架:2024年4月份政策更新改动

4月份政策更新改动 关于恶意软件新增伪装软件新增间谍软件关于移动垃圾软件详细定义关于不当内容暴力极端主义关于设备和网络滥用金融服务关于恶意软件 我们将更新恶意软件政策,阐明伪装软件是一种恶意软件。伪装软件是一种利用多种规避技术向用户提供不一致或虚假功能的应用…

【golang】动态生成微信小程序二维码实战上:golang整合github.com/silenceper/wechat/v2 实现生成 小程序二维码图片

项目背景 在自研的系统&#xff0c;需要实现类似草料二维码的功能 将我们自己的小程序&#xff0c;通过代码生成相想要的小程序二维码 代码已经上传到 Github 需要的朋友可以自取 https://github.com/ctra-wang/wechat-mini-qrcode 一、源生实现 通过源生API实现对小程序二维…

如何让MacOS「终端」走代理

在 MacOS 操作系统中&#xff0c;默认情况下&#xff0c;终端命令行不会通过代理进行网络连接。这导致在应用软件研发过程中&#xff0c;许多需要通过命令行下载安装的软件或依赖包无法成功安装。经常出现Failed to connect to xxx port 443 after 75329 ms: Couldnt connect t…

html写一个登录注册页面

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册登录界面Ⅰ</title><link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.mi…

基于SpringBoot+vue的在线商城系统+论文+免费远程调试

基于SpringBootvue的在线商城系统034(含源码 数据库文档免费送&#xff09; 开发系统:Windows10 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springb…

苹果电脑(Mac)怎么清理 itunes 备份?

苹果电脑用户广泛利用 iTunes 应用程序对 iPhone 或 iPad进行定期备份&#xff0c;以确保珍贵的数据安全无虞。然而&#xff0c;随着备份历史的增长&#xff0c;它们会在磁盘上积累大量空间&#xff0c;尤其当您频繁为多台设备备份时&#xff0c;存储资源可能会迅速消耗殆尽。为…

12个深度剖析Python内存管理关键概念

大家好&#xff0c;今天我们要一起探索Python内存管理的神秘世界&#xff0c;就像在侦探小说里解开一个又一个谜团。你知道吗&#xff1f;Python虽然简单易学&#xff0c;但它的内存管理机制却深藏不露&#xff0c;直接影响着程序的性能和效率。让我们一起来揭开这些关键概念的…

第46期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

java工作记录

文章目录 esayExcel导出依赖后端代码controllerservice单元格宽度配置类util 前端代码 若依配置多数据源 esayExcel 导出 依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.4</vers…

基于SpringBoot+Vue+Mysql的图书管理系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

为什么 C/C++ 的库很喜欢缩写?

一、正如很多回答已经提到的&#xff0c;早期的有效标识符长度有限制&#xff0c;所以缩写用得比较多。也主要是在 C 里&#xff08;Unix 的传统&#xff09;。C 里的标识符用缩写的不多。如 C98&#xff08;毕竟比 C89 晚了 9 年么&#xff09;里我们就已经有了很多挺长的名字…