数据结构书后习题

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.mzph.cn/web/139.shtml

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

相关文章

Docker八股总结

1. 容器和虚拟机的区别 传统虚拟机技术是虚拟出一套硬件后&#xff0c;在其上运行一个完整操作系统&#xff0c;在该系统上再运行所需应用进程&#xff1b;而容器内的应用进程直接运行于宿主的内核&#xff0c;容器内没有自己的内核&#xff0c;而且也没有进行硬件虚拟。因此容…

【MATLAB源码-第191期】基于matlab的4QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术&#xff0c;作为一种高效的调制方案&#xff0c;能够通过在相同的带宽条件下传输更多的数据位来满足这一需求。…

EasyImage2.0 简单图床开源 多功能 简单易用图床系统源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 支持API 支持仅登录后上传 支持设置图片质量 支持压缩图片大小 支持文字/图片水印 支持设置图片指定宽/高 支持上传图片转换为指定格式 支持限制最低宽度/高度上传 支持上传其他文件格…

突破“三个九”!离子阱量子计算再创新高

如果把量子计算比作一场球赛&#xff0c;Quantinuum无疑又打了一记漂亮的好球。实际上&#xff0c;结合今年春季在量子体积、逻辑量子比特和布线问题等方面的进展&#xff0c;这个团队已经接近于完成一场完美的比赛。 3月&#xff0c;Quantinuum的研究人员证明了QCCD架构的可扩…

Linux学习之路 -- PCB介绍 -- 进程优先级

1、什么是优先级&#xff1f; 进程需要某一种资源&#xff0c;而系统要通过特定的方式来决定谁先获得这些资源&#xff0c;而系统的做法就是给不同的进程安排不同的优先级。让优先级高的进程先享有一些资源。 2、为什么要有优先级 因为资源的缺乏&#xff0c;所以系统的才会…

C# 开源 工业相机库 调用海康相机 大恒相机

C# MG.CamCtrl 工业相机库 介绍一、使用案例二、使用介绍1、工厂模式创建实例2、枚举设备&#xff0c;初始化3、启动相机4、取图5、注销相机 三、接口1、相机操作2、启动方式3、取图4、设置/获取参数 介绍 c# 相机库&#xff0c;含海康、大恒品牌2D相机的常用功能。 底层采用回…

Django模型的字段选项

每一种字段类型都需要指定一些特定的参数。例如&#xff0c;CharField&#xff08;及其子类&#xff09;需要接收一个max_length参数&#xff0c;用以指定数据库存储VARCHAR数据时的字节数。 一些可选的参数是通用的&#xff0c;可以用于任何字段类型&#xff0c;下面具体介绍…

访问学者申请的成功经验

在申请成为访问学者时&#xff0c;经验是至关重要的。下面知识人网小编将介绍一些可以帮助您成功申请的经验和技巧。 首先&#xff0c;了解目标机构或大学的研究方向和需求是非常重要的。在申请之前&#xff0c;仔细研究该机构的学术项目、研究成果以及教授的专业领域&#xff…

C++笔试强训day2

目录 1.牛牛的快递 2. 最小花费爬楼梯 3.数组中两个字符串的最小距离 1.牛牛的快递 链接 单纯分类讨论&#xff0c;不加赘述。 详细代码&#xff1a; #include <iostream> using namespace std; #define ll long long int main() { float mg; char st; cin >>…

[C++][算法基础]最大公约数(欧几里得算法)

给定 n 对正整数 ,&#xff0c;请你求出每对数的最大公约数。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一个整数对 ,。 输出格式 输出共 n 行&#xff0c;每行输出一个整数对的最大公约数。 数据范围 1≤n≤, 1≤,≤2 输入样例&#xff1a; 2 3 …

C/C++基础----内存相关

malloc分配内存 用法 参数为要开辟内存的大小&#xff08;字节为单位&#xff09;返回值为void*,所以要强转一下语法&#xff1a;malloc()动态开辟20个字节的内存&#xff0c;代码&#xff1a;#include <iostream>using namespace std;int main() {int *a (int *) mal…

基于Hadoop的电商用户行为分析系统设计与实现的系统架构设计

采集层&#xff1a;利用Flume采集电商服务器端用户行为数据&#xff0c;把数据处理后发送至HDFS。 存储层&#xff1a;用户行为数据采集上传至HDFS存储&#xff0c; 导入到数据仓库Hive进行计算处理&#xff0c;分析结果保存至MySql数据库中。 计算层&#xff1a;根据分析需求建…

Vue2+ElementUI的el-table实现新增数据行与删除的功能

Vue2ElementUI的el-table实现新增数据行与删除的功能 文章目录 Vue2ElementUI的el-table实现新增数据行与删除的功能1. 代码2. 效果 1. 代码 TableIndex.vue如下 <template><div><div><el-button click"add" class"filter-item" pl…

通过ABAP程序自动创建信息对象-第二弹

前言 上一篇讲了通过ABAP程序去自动生成BW的ADSO模型&#xff0c;这一篇讲讲信息对象的自动生成&#xff0c; 一、实现效果 对于BW顾问来说&#xff0c;模型建完之后&#xff0c;就要开始选择用字段还是用信息对象进行建模&#xff0c;如果信息对象不存在呢&#xff0c;那么…

SpringBoot整合Activiti7——实战之放假流程(会签)

文章目录 代码实现部署流程启动流程填写放假通知任务投票审批xml文件 会签场景&#xff1a; 开始 - 填写放假通知单&#xff08;代理人&#xff09;- 投票审批&#xff08;指定多个参与人&#xff09;- 根据设置的完成条件后&#xff0c;全部参与人必须完成后&#xff0c;自动结…

小米su7全力提高产能,小米su7的这几个问题你都知道吗?车载随身wifi哪款最好用?公认最好的随身wifi格行随身wifi怎么样?

小米汽车官方近日回应网友关切&#xff0c;透露小米SU7非创始版交付进度。工厂正处于生产爬坡阶段&#xff0c;正全力提升产能和物料准备节奏&#xff0c;以加快交付效率。对于锁单后能否调整提车时间&#xff0c;小米汽车表示将与销售沟通协商。 当然关于网友们的问题也进行了…

条码的基础知识

条码的基础知识 条码&#xff1a;条码是由一组按一定编码规则排列的条、空符号组成&#xff0c;用以表示一定的字符、数字及符号组成的信息 一维码 Code 128 Code 128 是一种密度很高的字母数字代码系统&#xff0c;可对其进行双向扫描。此代码系统可编码整个 128 ASCII 字…

ERROR in [eslint] reorder to top import/first

情景再现&#xff1a;在react开发的时候&#xff0c;导入组件、函数时报错&#xff1a;Import in body of module; reorder to top import/first … 原因&#xff1a;在import语句前有变量声明 解决&#xff1a; 变量的声明&#xff0c;要放在import之后 // 错误示例 import {…

物联网网络传输,STM32和ESP32

2024.4.17 今天主要是记录一下我这个STM32F407和esp8266组成的互联网板子的一些例程运行心得&#xff0c; 下面这个例程是STM32发AT指令给esp8266&#xff0c;使得esp8266作为tcp client连接到我的手机热点&#xff0c;然后我用电脑连接wifi&#xff0c;打开tcp server&#x…

【CDN产品测评-笔记】探索云服务中的安全和性能增强功能

【CDN产品测评-笔记】探索云服务中的安全和性能增强功能 写在最前面1. DNS管理&#xff1a;核心的域名服务功能2. DDoS防护&#xff1a;构筑坚不可摧的防线3. Web防护&#xff1a;智能化的网络攻击防御4. BOT管理&#xff1a;精准识别与流量控制5. 加速服务&#xff1a;提升全球…