数据结构书后习题

news/2024/5/19 19:28:27/

p17

1,

个人解答:

int DeleteMinElem(SqList &L,int &min)
{int j = 0;if (L.length == 0){printf("error!");return 0;}int min = L.data[0];for (int i = 1; i < L.length; i++){if (L.data[i] < min){min = L.data[i];j = i;}}L.data[j] == L.data[L.length - 1];//原本的位置换成最后一个元素L.length--;return min;
}

问题:一般采用布尔类型判断是否执行成功,同时利用&引用不需要再返回最小值

bool DeleteMinElem(SqList &L,int &min)
{int j = 0;if (L.length == 0){return false;}int min = L.data[0];for (int i = 1; i < L.length; i++){if (L.data[i] < min){min = L.data[i];j = i;}}L.data[j] == L.data[L.length - 1];//原本的位置换成最后一个元素L.length--;return true;
}

2,元素逆置,时间复杂度要求O(1)

思路:顺序表长度确定:

void Reverse(SqList& L)
{int temp = 0;for (int i=0; i < L.length/2; i++)//前后半段对应元素交换{temp = L.data[i];L.data[i] = L.data[L.length - 1 - i];L.data[L.length - 1 - i] = temp;}
}

3,删除所有值为x的元素

思路:每次删除都将后面的数字向前移动更新占用的时间复杂度和空间复杂度都较高,采用新的下标记录值不为x的元素作为L的新数组

void DeleteX(SqList& L, int x)
{int k = 0;for (int i = 0; i < L.length; i++){if (L.data[i] != x)L.data[k++] = L.data[i];//用k来对data数组进行更新}L.length = k;
}

4,删除s和t之间的元素

个人代码:

bool DeleteStoT(SqList& L,int s,int t)//s和t是值,不是下标
{int k = 0; //记录两元素的下标if (L.length == 0||s>=t)return false;for (int i = 0; i < L.length; i++){if (L.data[i] <= s || L.data[i] >= t)L.data[k++] = L.data[i];}L.length = k;return true;
}

为什么不使用k?因为顺序表不能为空,如果使用k的情况下顺序表中没有符合的元素就为空表,而本题中没有符合发元素则返回false

思路:有序表那么删除的元素是连通的,先找到大于s的第一个元素(第一个删除的元素),然后寻找大于t的第一个元素(最后一个删除的元素的下一个元素),然后将后面的元素前移,

不包含st是指结果中没有st

bool Del_s_t2(SqList &L,int s,int t)
{
int i,j;
if(s>=t||L.length==0)
return false;
for(i=0;i<L.length&&L.data[i]<=s;i++);//寻找大于s的第一个元素
if(i>=L.length)
return false;//结果为空表的情况返回错误
foe(j=i;j<L.length&&L.dada[j]<=t;j++);//寻找大于t的第一个元素
for(;j<L.length;i++,j++)
L.data[i]=L.data[j];//数据前移
L.length=i;//更新长度
return true;
}

5,包含st是指删除的数字包含st

可以使用k记录需要删除的元素的数量

bool DeleteStoT2(SqList& L, int s, int t)//s和t是值,不是下标
{int k = 0; //记录两元素的下标if (L.length == 0 || s >= t)return false;for (int i = 0; i < L.length; i++){if (L.data[i] >= s && L.data[i] <= t)k++;elseL.data[i - k] = L.data[i];}L.length -= k;return true;
}

6,删除重复的值

思路:一个变量用来存储新的顺序,一个变量用来遍历,如果遍历到的数字与上一个存储的数字不同,则放入新的顺序表中

bool DeleteSame(SqList& L)//s和t是值,不是下标
{int i, j = 0;if (L.length == 0 )return false;for (i = 0,j=1; j < L.length; j++){if (L.data[i] != L.data[j])L.data[++i] = L.data[j];//下标加1,所以是++i而不是i++}L.length=i+1;return true;
}

7,设计思路:

用三个不同的变量记录每个链表遍历到的结点,i,j往下一个遍历的条件是前一个结点已经被记录到新数组中,注意:两链表的长度和不可以超出新链表的长度,当一个链表已经遍历完成,后一个表可以直接挪到新链表中

bool Combine(SqList L1, SqList L2, SqList L)
{int i, j, k = 0;if (L1.length + L2.length > MaxSize) {//超出最大容量return false;}while (i < L.length && j < L.length){if (L1.data[i] <= L2.data[j])//两链表中出现同样的数字也放入新链表中,所以此处并不冲突L.data[k++] = L1.data[i++];elseL.data[k++] = L1.data[j++];}while(i<L.length)L.data[k++] = L1.data[i++];while (j<L.length)L.data[k++] = L1.data[j++];L.length = k;return true;}

8,思路:先将数组中m+n个数字全部转置,然后1-m个数字,m+1-m+n个数字再分别转置


http://www.ppmy.cn/news/1423384.html

相关文章

图像分割:Pytorch实现UNet++进行医学细胞分割

图像分割&#xff1a;Pytorch实现UNet进行医学细胞分割 前言相关介绍项目结构具体步骤准备数据集读取数据集设置并解析相关参数定义网络模型定义损失函数定义优化器训练验证 参考 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#x…

MySQL高负载排查方法最佳实践(15/16)

高负载排查方法 CPU占用率过高问题排查 使用mpstat查看cpu使用情况。 # mpstat 是一款 CPU 性能指标实时展示工具 # 能展示每个 CPU 核的资源视情况&#xff0c;同时还能将资源使用情况进行汇总展示 # 如果CPU0 的 %idle 已经为 0 &#xff0c;说明此核已经非常繁忙# 打印所…

网络基础-基于TCP协议的Socket通讯

一、Socket通讯基于TCP协议流程图 UDP 的 Socket 编程相对简单些不在介绍。 二、 服务端程序启动 服务端程序要先跑起来&#xff0c;然后等待客户端的连接和数据。 服务端程序首先调用 socket() 函数&#xff0c;创建网络协议为 IPv4&#xff0c;以及传输协议为 TCP 的…

将Ubuntu18.04默认的python3.6升级到python3.8

1、查看现有的 python3 版本 python3 --version 2、安装 python3.8 sudo apt install python3.8 3、将 python3.6 和 3.8 添加到 update-alternatives sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1 sudo update-alternatives --insta…

AIDE:自动驾驶目标检测的自动数据引擎

AIDE&#xff1a;自动驾驶目标检测的自动数据引擎 摘要IntroductionRelated WorksMethodData FeederModel Updater4 Experiments 摘要 自动驾驶车辆&#xff08;AV&#xff09;系统依赖于健壮的感知模型作为安全保证的基石。然而&#xff0c;道路上遇到的物体表现出长尾分布&a…

2024-4-18 群讨论:关于异步HttpClient如何测试验证

以下来自本人拉的一个关于 Java 技术的讨论群。关注公众号&#xff1a;hashcon&#xff0c;私信进群拉你 群友问题&#xff1a;群友想尽量快的将请求发到三方接口&#xff0c;不考虑三方接口的压力。如何开发并验证&#xff1f; 思路&#xff1a; 肯定要使用 WebClient 这种…

未来计算机的发展趋势是什么?

未来计算机的发展趋势是多方面的,涵盖了硬件、软件、体系结构以及计算范式等多个层面。以下是一些预期的趋势: 1. 量子计算: 随着量子理论的不断成熟和技术的进步,量子计算机将可能解决传统计算机难以处理的问题,比如药物发现、材料科学、复杂系统模拟等领域。量子计算的…

gpt-6有望成为通用工具

OpenAI CEO山姆奥特曼&#xff08;Sam Altman&#xff09;在最新的博客访谈中&#xff0c;提到gpt-6有望成为通用工具。 奥特曼还认为&#xff0c;目前的模型不够聪明&#xff0c;“使用GPT-2进行科学研究曾被认为是不切实际的想法。而如今&#xff0c;虽然人们使用GPT-4进行科…

程序员购车指南

哈喽大家好&#xff0c;我是咸鱼。 爱车可以说是大部分男人的天性&#xff0c;而我对汽车的热情却远不及对手表的钟爱&#xff08;痴迷劳力士&#xff09;。以至于我的朋友掏出车钥匙指着上面的苹果树标志跟我介绍奔驰 AMG 系列的强劲性能和马力时&#xff0c;我只能尽量假装自…

2024年第十七届 认证杯 网络挑战赛 (C题)| 云中的海盐 | 辐射传输方程 Stefan-Boltzmann分析 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看认证杯 网络挑战赛 (C题&#xff09;&#xff01…

总结SQL相对常用的几个字符函数

目录 字符的截取 substr() trim()、ltrim()、rtrim() 字符串的拼接 ||、 字符的大小写转换 upper(column_name):大写 lower(column_name):小写 字符替换 replace() 搜索字符 instr(column_name, substring_to_find,start,n_appearence) charindex(substring_to_fi…

【软考】UML中的图之用例图

目录 1. 说明2. 建模2.1 说明2.2 语境建模2.3 需求建模 3. 图示4. 组成部分 1. 说明 1.用例图&#xff08;Use Case Diagram&#xff09;。2.展现了一组用例、参与者&#xff08;Actor&#xff09;以及它们之间的关系。3.用例图通常包括以下的内容&#xff1a;用例、参与者、用…

uniapp开发App,手机顶部状态栏问题

问题&#xff1a;在使用uniapp开发手机App时&#xff0c;因为HBuildX创建的应用默认是沉浸式样式&#xff0c;如果去除自带的导航栏之后&#xff0c;页面会直通手机顶部状态栏&#xff0c;解决办法有一下几个 方法1&#xff1a;可以使用uniapp官方文档提供的解决方案 https://u…

java混淆的公司有哪些

一些提供 Java 混淆服务的公司包括&#xff1a; PreEmptive Solutions&#xff1a;PreEmptive Solutions 提供了一系列用于保护 Java 和 .NET 应用程序的工具&#xff0c;包括混淆、代码压缩、加密和漏洞检测等功能。 DexGuard&#xff1a;DexGuard 是 Guardsquare 公司推出的…

transformer架构详细详解

一、transformer的贡献 transformer架构的贡献&#xff1a;该架构只使用自注意力机制&#xff0c;没有使用RNN或卷积网络。且可以实现并行计算&#xff0c;加快模型训练速度。 &#xff08;将所有的循环层全部换成&#xff1a;multi-headed self-attention&#xff09; 二、t…

深度学习在三维点云处理与三维重建中的应用探索

目录 点云数据处理 数据清洗 数据降噪和简化 数据配准 特征提取 数据增强 数据组织 性能考量 PointNet PointNet 算法问题 改进方法 三维重建 重建算法 架构模块 流程步骤 标记说明 优点和挑战 点云数据处理 数据清洗 去噪&#xff1a;点云数据通常包含噪声…

CentOS 7安装Zookeeper

说明&#xff1a;本文介绍如何在CentOS 7操作系统下使用Zookeeper 下载安装 首先&#xff0c;去官网下载所需要安装的版本&#xff0c;我这里下载3.4.9版本&#xff1b; 上传到云服务器上&#xff0c;解压 tar -xvf zookeeper-3.4.9.tar.gz修改配置 进入Zookeeper目录下的co…

【华为OD机试】高效货运【C卷|200分】

【华为OD机试】-真题 !!点这里&#xff01;&#xff01; 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 老李是货运公司承运人&#xff0c;老李的货车额定载货重量为 wt。 现有两种货物&#xff1a; 货物 A 单件重量为 wa&#xff0c;单件运费利润为 pa 货物 B 单件重量为…

(最详细)关于List和Set的区别与应用

关于List与Set的区别 List和Set都继承自Collection接口&#xff1b; List接口的实现类有三个&#xff1a;LinkedList、ArrayList、Vector。Set接口的实现类有两个&#xff1a;HashSet(底层由HashMap实现)、LinkedHashSet。 在List中&#xff0c;List.add()是基于数组的形式来添…

复合升降机器人教学科研平台——技术方案

一&#xff1a;功能概述 1.1 功能简介 复合升降机器人是一款集成移动底盘、机械臂、末端执行器、边缘计算平台等机构形成的教学科研平台&#xff0c;可实现机器人建图导航、路径规划&#xff0c;机械臂运动学、动力学、轨迹规划、视觉识别等算法功能和应用&#xff0c;提供例如…