当前位置: 首页 > news >正文

25考研王道数据机构课后习题-----顺序表链表部分

文章目录

  • 1.顺序表题目
  • 2.链表相关题目
  • 3.我的个人总结

声明:以下内容来自于B站知名up主白话拆解数据结构,望获悉;

1.顺序表题目

image-20250103095657910

下面的这个说的是:下面的哪一个是组成我们的顺序表的有限序列,这个应该是数据元素,n个字符组成的这个内容我们称之为字符,数据项表示的是我们的这个数据元素的这个基本的组成单位;

我们可以在这个学生表里面,把这个每一个学生的记录理解为这个数据元素,但是这一个数据元素里面包含我们的学生的姓名,学号,年龄等等之类的,这个每一个属性就是一个数据项,例如这个例子里面的这个姓名是一个数据项,学号是一个数据项,年龄是一个数据项;


image-20250103100139761

这个题目我觉得并不是非常的严谨,因为这个题目问的是线性表,第一个选项就说了自己是集合,而且这个线性表是有限的这个序列,但是我们的这个C里面是所有的整数,这个就是无限多个的,邻接表是使用的多个链表拼接起来的,因此这个只能选择B了,但是这个B实际上是一个串,这个只是一个线性结构,说上是线性表也是不合适的,但是只有这个B是比较符合题目要求的;


image-20250103101011801

这个是顺序存储的这个优点,首先这个可以进行插入和删除是没错,但是这个涉及到数据的挪动,很消耗时间,因此这个链表才是方便进行这个数据的插入和删除的首选;

这个存储密度大是我们的这个顺序存储结构的这个优点;


image-20250103101649339

A非常很有意思:顺序表可以使用一维数组进行表示,但是顺序表和一维数组在这个逻辑结构上面不是一样的,因为我们的顺序表可以当作数组进行理解,但是两者并不完全等价,因为我们的这个数组是编程语言的内置的数据结构,但是我们的顺序表是抽象的数据结构,而且我们的顺序表可以灵活调整这个空间容量(即满了之后可以进行扩容的这个操作,但是我们的数组不可以)可见他们之间还是存在区别的,但是不完全等价,我们平常只是为了方便进行理解,把这个顺序表当作数组进行看待,但两者不可以划等号;


image-20250103102842731

输出元素的值:这个显然是我们的顺序表直接输出更方便,我们的链表的话需要从这个第一个元素一直走到最后的这个元素,这个效率和根本没有我们的顺序表的效率高;

交换两个位置的元素的数值:这个就是我们的顺序表(调用这个temp进行交换,只需要三步),但是我们的链表,还是要从头进行走,走到交换的这个位置,这个过程就很浪费时间;

顺序输出n个元素,这个我们的顺序表和链表是没有优劣的,因此这个不符合题目要求;


image-20250103103438186

我们删除元素,这个位置后的元素都需要移动,因此这个对应的时间复杂度肯定不是O(1),但是这个改变某一个位置的元素,这个时间复杂度就是O(1);


image-20250103104315177

上面的这个同样涉及到我们的删除元素,这个删除之后后面的元素需要全部向前移动,因此这个的时间复杂度肯定就不是O(1),但是我们的获取元素就是O(1),这个其实是可以和我们的上面的那个改变数据的值,一起进行记忆,两个的这个操作都是一样的;

2.链表相关题目

image-20250103113251083

我们的这个是在数组的基础上面进行这个单链表的建立的相关的操作,这个一维数组如果是有序地,这个时候我们想要去建立这个链表,这个时候直接去插入就可以了,这个时间复杂度就是O(n);

如果这个数组里面的这个元素是没有顺序的,这个时候我们的数组想要去变成链表,需要先进行排序,最快的这个排序的算法就是nlogn,然后是去进行这个插入是O(n),这个合起来就是nlog n:


image-20250103113705583

我们想要把这个n链表连接到我们的这个m链表的后面,这个时候我们首先需要做的就是去找到这个m链表的最后的这个元素,其实这个问题的时间复杂度主要就是取决于我们的这个m链表的长度,因此这个时间复杂度就是O(m);


image-20250103114044786

这个题目考查的就是带有哨兵位的这个头结点和没有这个哨兵位的这个头结点的区别,分别去进行这个链表是不是空的这个判断,我们的这个哨兵位主要的这个作用就是进行这个数据元素的插入和删除,因此如果是带头结点,我们的判断的这个条件就是这个head->next是空就证明这个链表是空的,如果是没有这个头结点,这个head->next是空的,就证明我们的这个链表是空的;


image-20250103114330233

下面的这个是我们的顺序表元素,插入到这个链表里面去,这个是头插法的相关的操作;但是这个图里面的这个up写的是有问题的,因为我们的这个里面头插的话是从1开始的,而不是从这个顺序表里面的这个最后的一个元素开始的,但是这个链表的顺序和我们的这个顺序表里面的合格元素的顺序是相反的,这个是没有问题的;


image-20250103114714380

这个考察的是我们的双向的链表里面进行这个数据的插入的整个过程,就是通过这个前驱节点和后继结点改变这个里面的指针的额指向即可;


image-20250103114835225

这个是双向循环链表,删除我们的之间的这个元素,这个需要做的修改这个节点前后的这个指针的指向即可,也就是让这个前面的这个节点跳过这个节点指向这个p后面的这个节点,前驱也是如此;


image-20250103114942266

image-20250103115020982

双向的链表里面需要进行这个数据的插入,这个时候就是建立相邻的这个指针之间的这个连接关系罢了,而且这个需要修改四个指针域,因为这个涉及到前面的这个节点和后面的节点,又因为是双向的,因此这个里面涉及到4个;


image-20250103115136230

我们的这个带头结点的循环的单链表,是空的表的时候:满足我们说的这个头结点的指针域是和我们的这个L的值相等,这个时候相当于就是我们的这个指针域指向的就是我们的头结点自己;


image-20250103115633225

想要进行这个末尾的元素的这个插入节点和删除节点的这个操作,如果是单循环的链表,想要删除这个最后的节点,还是需要从第一个开始走到最后,所以这个单向的链表很难去解决我们的这个地方遇到的问题;

但是如果我们使用的是这个双向的循环的链表,这个时候我们可以倒着走,就是从第一个节点直接找到最后一个,在倒着走一次,找到这个倒数的第二个节点;


image-20250103120032027

up说这个题目是严蔚敏老师书上的原题,但是我们用的不是这个教材,想要实现两个循环的单链表之间的这个链接,我们需要做的就是下面的这个过程:

ra->next=fb->next fb表示的是我们第二个链表的头结点,ra是这个第一个链表的尾部节点;

rb->next=fa 这个表示的就是我们的第二个链表的尾部节点指向我们的第一个链表的头节点

最后我们发现这个fb是没有用的,也就是我们的这个第二哥链表里面的头结点是没有用的,因此我们就可以把这个节点直接释放掉;


image-20250103121351218

我们的这个循环的单向的链表,想要删除这个里面的首元结点,如果这个链表没有头结点,只有这个表头指针,这个时候我们需要先找到这个链表里面的最后一个元素,然后改变这个最后一个元素的这个指针的指向,这个找到最后一个元素的过程就是O(n);

如果是B选项的话,我们想要找到这个尾部的节点很容易,直接就是这个表尾的指针的这个指向,这个时候根本不需要从第一个元素开始去找最后一个节点;

C里面的这个如果有头结点,我们的这个表尾指针直接指向这个头结点的后继的后继即可,就可以把这个首元结点删除,这个复杂度也不是o(n);

D里面的复杂度也是o(1)因为我们只需要直接把这个表头指针指向这个第二个有效元素即可;


image-20250103122134077

这个题目就是两个情况:可能这个上面的第一个图示的情况,就是我们的这个线性表里面是只有一个元素,也可能就是一个空的,这个时候无论是多少次这个next指向,最终指向的都是自己;


image-20250103122405154

h1是非循环的,这个时候删除这个首节点就是o(1)删除尾结点就是o(n);

h2是循环的,删除这个首节点就是o(1)删除尾节点,也是o(1)因为这个是循环的,我们可以直接从第一个的prev指针找到我们的最后一个节点的位置;


image-20250103123236557

这个删除双向的循环链表里面的这个元素的操作就是去改变这个节点前后的这个指针的指向,并且把这个节点释放掉即可;


image-20250103123532965

题解:

1)这个首先需要根据这个上面的数据元素的地址把这个链表的元素的前后顺序画出来;

2)最后确定我们的这个c就是第一个元素;

3)看看这个插入的元素会对于这个链表里面的哪两个元素的地址差生影响(链接地址);

4)根据这个插入之后的情况,重新确定这个受到影响的这个元素的地址,并且进行更新;

5)根据题目找出这个更新之后的这个元素的新的地址;


image-20250103123835505

题解:

1)h指向的是带头的链表的头部,也就是哨兵位节点;

2)这个里面的h->next=q->next实际上就是跳过了我们的这个链表里面的第一个元素,达到删除的效果;

3)但是这个判断p==q说的就是如果我们的这个链表里面只有一个元素,这个时候就是p=h,也就是p指向我们的头结点,因为p是尾指针嘛,p等于q时候,我们的这个元素删除之后链表就是空的,因此我们的尾指针需要移动位置;


image-20250103124031637

这个是本来想要进行这个数据的插入,题目上说已经执行了两个步骤,让我们选择接下来需要执行的这个步骤:这个选择的是c:

s->next->prev其实说的就是我们的p节点,c的前半句意思就是s前驱是指向的这个p;

后半句是这个s->next->prev应该分为两个部分进行理解:

1)s->next这个表示的就是我们的s的后继,也就是我们的右上角的那个节点;

2)那个节点的prev指向我们的s这个节点,至此,这个完成插入的操作;

3.我的个人总结

个人觉得这个题目还是颇有难度的,我觉得自己还是需要复习下基础的知识,带头不带头的这个链表的类型之类的还需要补一补,这个408难度确实比我想象的要大,自身还是有很多的不足;

相关文章:

25考研王道数据机构课后习题-----顺序表链表部分

文章目录 1.顺序表题目2.链表相关题目3.我的个人总结 声明:以下内容来自于B站知名up主白话拆解数据结构,望获悉; 1.顺序表题目 下面的这个说的是:下面的哪一个是组成我们的顺序表的有限序列,这个应该是数据元素&#x…...

新能源电动汽车动力电池技术

新能源电动汽车动力电池技术是新能源汽车发展的核心之一,以下是动力电池技术的一些关键方面: 技术进展 能量密度提升:近年来,动力电池的能量密度有了显著提升,从2010年的100Wh/kg提高到2024年的300Wh/kg。能量密度的…...

修复 ITunes 在 Windows 或 Mac 上不断崩溃的问题 [100% 有效]

对于 iDevice 用户来说,只能通过 iTunes 在 iDevice 和计算机之间传输文件的困境一直是一个紧迫的问题。所有 iPhone 用户可能都知道,iTunes 并不是一款高效的应用程序,有时性能会很差,例如在 iDevices 和计算机之间传输文件时不断…...

Android设备使用AOA协议进行主机与配件模式通信

1.使用TYPC-C数据线连接两台华为手机: TYPE-C线,先连接下图右边的ACCESSORY 再连接左边的HOST 此时左边的HOST(白色) 会给右边的ACCESSORY(黑色) 充电 接着打开左连接的HostChart会自动调起授权,然后会启动右边的AccessoryChart USB HOS…...

Python爬虫入门实例:Python7个爬虫小案例(附源码)

引言 随着互联网的快速发展,数据成为了新时代的石油。Python作为一种高效、易学的编程语言,在数据采集领域有着广泛的应用。本文将详细讲解Python爬虫的原理、常用库以及实战案例,帮助读者掌握爬虫技能。 一、爬虫原理 爬虫,又…...

生成对抗网络 (Generative Adversarial Network, GAN) 算法MNIST图像生成任务及CelebA图像超分辨率任务

生成对抗网络 (Generative Adversarial Network, GAN) 算法详解与PyTorch实现 目录 生成对抗网络 (Generative Adversarial Network, GAN) 算法详解与PyTorch实现1. 生成对抗网络 (GAN) 算法概述1.1 生成器与判别器1.2 GAN的优势2. GAN的核心技术2.1 目标函数2.2 生成器2.3 判别…...

快速排序排序方法演示及算法分析(附代码和实例)

基本思想: 任取一个元素(比如第一个)为中心,称为枢轴(pivot)所有比它小的元素一律前放,比它大的元素后放,形成左右两个子表对各子表重新选择中心元素并以此规则调整直到每个子表的元…...

库迪困境:供应链补救失效背后的市场错配

作者 | 曾响铃 文 | 响铃说 近日,红餐网证实了库迪咖啡暂停便捷店招商的消息。库迪官方回应称,店中店模式招商只是按下了暂停键,不排除未来重启的可能。 但一批被“暂停”的便捷店加盟商,不知道等不等起库迪的未来重启。 小红…...

解决openpyxl操纵带公式的excel或者csv之后,pandas无法读取数值的问题

1 功能特点 openpyxl: 这是一个专门用于操作Excel文件(.xlsx/.xlsm)的库。它提供了丰富的功能来读取、写入和修改Excel文件的各个元素,如单元格、行、列、工作表等。例如,可以通过openpyxl轻松地创建一个新的Excel工作…...

基于傅立叶神经网络(FNN)与物理信息神经网络(PINN)求解泊松方程(附Pytorch源代码)

基于傅立叶神经网络(FNN)与物理信息神经网络(PINN)求解泊松方程 一、引言 偏微分方程(Partial Differential Equation, PDE)在科学与工程领域有着广泛的应用。传统数值方法(如有限差分法、有限元法)在求解这类问题时,尽管已经非常成熟,但随着问题复杂度的增加,其计…...

小程序组件 —— 28 组件案例 - 推荐商品区域 - 实现结构样式

这一节目标是实现底部推荐商品的结构和样式,由于这里要求横向滚动,所以需要使用上节介绍的 scroll-view 功能,并使用 scroll-x 属性支持横向滚动,推荐商品区域中的每一个商品是一个单独的 view,每个view 中需要写三个组…...

Flink读写Kafka(DataStream API)

在Flink里,已经预定义了kafka connector,使用该connector我们可以读写kafka,并且能实现exactly once的语义。 要使用需要引入相关的maven依赖,在这里,因为读写kafka,就会涉及一个问题,kafka-client和broker的版本兼容问题,不过因为kafka client和broker的双向兼容的良…...

SCAU期末笔记 - 数据库系统概念往年试卷解析

数据库搞得人一头雾水,题型太多太杂,已经准备摆烂了。就刷刷往年试卷,挂不挂听天由命。 2019年 Question 1 选择题 1. R ∩ S R∩S R∩S等于一下哪个选项? 画个文氏图秒了 所以选A. R ∩ S R − ( R − S ) R∩SR-(R-S) R∩…...

flutter在windows平台中运行报错

PS D:\F\luichun> flutter run当运行flutter项目时,【解决如下报错】 /C:/flutter/packages/flutter/lib/src/painting/star_border.dart:530:27: Error: The getter Matrix4 isnt defined for the class _StarGenerator.- _StarGenerator is from package:flut…...

HTML——75. 内联框架

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>内联框架</title><style type"text/css">iframe{width: 100%;height: 500px;}</style></head><body><!--iframe元素会创建包含…...

python对mongodb的增删查改

python对mongodb的增删查改 1. 安装 pymongo2. 连接 MongoDB3. 创建&#xff08;插入&#xff09;文档插入单个文档插入多个文档 4. 查询文档查询单个文档查询多个文档复杂查询嵌套查询分页条件查询&#xff08;通用模版&#xff09; 5. 更新文档更新单个文档更新多个文档更新嵌…...

【JS】期约的Promise.all()和 Promise.race()区别

概述 Promise.all() 和 Promise.race() 都是 JavaScript 中处理多个异步操作的 Promise 方法&#xff0c;但它们的行为和返回结果有所不同。 Promise.all()和Promise.race() 1. Promise.all() Promise.all() 接受一个由多个 Promise 实例组成的可迭代对象&#xff08;例如数…...

使用 RxJS 库实现响应式编程

什么是 RxJS&#xff1f; RxJS&#xff08;Reactive Extensions for JavaScript&#xff09;是一个用于响应式编程的库&#xff0c;它使得处理异步数据流变得更加简单和优雅。通过使用 Observables&#xff08;可观察对象&#xff09;&#xff0c;你可以轻松地处理事件、HTTP …...

ARP攻击的原理和实现 (网络安全)

ARP攻击的原理和实现 ARP&#xff08;Address Resolution Protocol&#xff0c;地址解析协议&#xff09;是一种网络协议&#xff0c;用于在局域网内将IP地址映射到MAC地址。在以太网中&#xff0c;设备通过广播ARP请求来查询目标IP地址对应的MAC地址&#xff0c;从而建立通信…...

chatgpt model spec 2024

概述 这是模型规范的初稿&#xff0c;该文档规定了我们在OpenAI API和ChatGPT中的模型的期望行为。它包括一组核心目标&#xff0c;以及关于如何处理冲突目标或指令的指导。 我们打算将模型规范作为研究人员和数据标注者创建数据的指南&#xff0c;这是一种称为从人类反馈中进…...

单片机-LED实验

1、51工程模版 #include "reg52.h" void main(){ while(1){ } } 2、LED灯亮 #include "reg52.h" sbit LED1P2^0; void main(){ while(1){ LED10; } } 3、LED闪烁 #include "reg52.h" sbit LED1P2^0; //P2大…...

QILSTE H10-C321HRSYYA高亮红光和黄光LED灯珠

在深入探讨H10-C321HRSYYA型号的复杂特性之前&#xff0c;我们首先需要明确其基本参数和功能。这款型号的LED产品以其独特的双色设计和卓越的性能在众多同类产品中脱颖而出。其外观尺寸为3.0x1.0x2.1mm&#xff0c;采用高亮黄光和红光的双色组合&#xff0c;赋予了其在多种应用…...

Appium(一)--- 环境搭建

一、Android自动化环境搭建 1、JDK 必须1.8及以上(1) 安装&#xff1a;默认安装(2) 环境变量配置新建JAVA_HOME:安装路径新建CLASSPath%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar在path中增加&#xff1a;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin&#xff1b;(3) 验证…...

量子力学复习

黑体辐射 热辐射 绝对黑体&#xff1a; &#xff08;辐射能力很强&#xff0c;完全的吸收体&#xff0c;理想的发射体&#xff09; 辐射实验规律&#xff1a; 温度越高&#xff0c;能量越大&#xff0c;亮度越亮 温度越高&#xff0c;波长越短 光电效应 实验装置&#xf…...

22408操作系统期末速成/复习(考研0基础上手)

第一部分:计算题&#xff1a; 考察范围&#xff1a;&#xff08;标红的是重点考&#xff09; 第一章&#xff1a;CPU利用率&#xff1a; 第二章&#xff1a; 进程调度算法&#xff08;需要注意不同调度算法的优先级和题目中给出的是否可以抢占【分为可抢占和不可抢占&#xff…...

两种分类代码:独热编码与标签编码

目录 一、说明 二、理解分类数据 2.1 分类数据的类型&#xff1a;名义数据与序数数据 2.2 为什么需要编码 三、什么是独热编码&#xff1f; 3.1 工作原理&#xff1a;独热编码背后的机制 3.2 应用&#xff1a;独热编码的优势 四、什么是标签编码&#xff1f; 4.1 工作原理&…...

51单片机——共阴数码管实验

数码管中有8位数字&#xff0c;从右往左分别为LED1、LED2、...、LED8&#xff0c;如下图所示 如何实现点亮单个数字&#xff0c;用下图中的ABC来实现 P2.2管脚控制A&#xff0c;P2.3管脚控制B&#xff0c;P2.4管脚控制C //定义数码管位选管脚 sbit LSAP2^2; sbit LSBP2^3; s…...

【开源社区openEuler实践】rust_shyper

title: 探索 Rust_Shyper&#xff1a;系统编程的新前沿 date: ‘2024-12-30’ category: blog tags: Rust_ShyperRust 语言系统编程性能与安全 sig: Virt archives: ‘2024-12’ author:way_back summary: Rust_Shyper 作为基于 Rust 语言的创新项目&#xff0c;在系统编程领域…...

LiteFlow 流程引擎引入Spring boot项目集成pg数据库

文章目录 官网地址简要项目引入maven 所需jar包配置 PostgreSQL 数据库表使用LiteFlow配置 yml 文件通过 代码方式使用 liteflow数据库sql 数据在流程中周转 官网地址 https://liteflow.cc/ 简要 如果你要对复杂业务逻辑进行新写或者重构&#xff0c;用LiteFlow最合适不过。…...

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance)

阻抗&#xff08;Impedance&#xff09;、容抗&#xff08;Capacitive Reactance&#xff09;、感抗&#xff08;Inductive Reactance&#xff09; 都是交流电路中描述电流和电压之间关系的参数&#xff0c;但它们的含义、单位和作用不同。下面是它们的定义和区别&#xff1a; …...