数据结构书后习题

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++;
		else
			L.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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软考127-上午题-【软件工程】-McCabe度量法

一、McCabe度量法 1-1、定义 McCabe 度量法是通过定义环路复杂度&#xff0c;建立程序复杂性的度量。 它基于一个程序模块的程序图中环路的个数。计算有向图G的环路复杂性的公式为&#xff1a; V(G) m - n 2 闭合区域 1 其中V(G)是有向图 G 中的环路个数&#xff0c;m 是…

【C语言__结构体__复习篇3】

目录 前言 一、结构体基础知识 1.1 结构体的语法形式 1.2 创建结构体变量 1.3 结构体变量的初始化 1.4 点(.)操作符和箭头(->)操作符 二、匿名结构体 三、结构体自引用 四、结构体内存对齐 4.1 内存对齐的规则 4.2 出现结构体内存对齐的原因 4.3 修改默认对齐数 五、结…

8:系统开发基础--8.1:软件工程概述、8.2:软件开发方法 、8.3:软件开发模型、8.4:系统分析

转上一节&#xff1a; http://t.csdnimg.cn/G7lfmhttp://t.csdnimg.cn/G7lfm 课程内容提要&#xff1a; 8&#xff1a;知识点考点详解 8.1&#xff1a;软件工程概述 1.软件的生存周期 2.软件过程改进—CMM Capability Maturity Model能力成熟度模型 3.软件过程改进—CMMI—…

Jmeter配置服务器监控插件

1.安装插件管理器 插件官网地址&#xff1a;JMeter Plugins :: JMeter-Plugins.org 点击 Plugins Manager,如上图所示&#xff0c; &#xff0c;点击jar file下载“plugins-manager.jar”&#xff0c;下载后放到“jmeter\lib\ext”目录下&#xff0c;重启jmeter。 2.安装资源…

LeetCode 94 二叉树的中序遍历

题目描述 二叉树的中序遍历 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入…

Composite 组合

意图 将对象组合成树形结构以表示“部分-整体”的层级结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 结构 其中&#xff1a; Component为组合中的对象声明接口&#xff1b;在适当情况下实现所有类共有接口的默认行为&#xff1b;声明一个接口用于访问和管…

Spring Boot(二)— 自定义Spring Boot Starter

在Spring Boot中&#xff0c;自定义Spring Boot Starter是一个常见且强大的功能&#xff0c;它允许开发者为特定的功能或库创建自己的自动配置&#xff0c;从而简化集成过程。 1 前置知识 Spring Boot的事件为应用的启动和关闭提供了详细的上下文信息&#xff0c;使得开发者能…

OSI七层网络模型 —— 筑梦之路

在信息技术领域&#xff0c;OSI七层模型是一个经典的网络通信框架&#xff0c;它将网络通信分为七个层次&#xff0c;每一层都有其独特的功能和作用。为了帮助记忆这七个层次&#xff0c;有一个巧妙的方法&#xff1a;将每个层次的英文单词首字母组合起来&#xff0c;形成了一句…

腾讯云优惠券详细介绍及领券步骤详解

随着云计算技术的不断发展和普及&#xff0c;越来越多的企业和个人开始选择使用云服务来满足自身的需求。腾讯云作为国内领先的云服务提供商&#xff0c;以其稳定、高效、安全的服务赢得了广大用户的信赖。为了回馈广大用户&#xff0c;腾讯云经常推出各种优惠活动&#xff0c;…

【JS】数组交换位置

公式 arr.splice(oldIndex, delCount, ...arr.splice(newIndex, delCount, arr[oldIndex])) arr - 操作的数组delCount - 删除的数组个数oldIndex - 交换位置的数组下标1newIndex - 交换位置的数组下标2...arr - 提取数组里的元素 splice删除元素时&#xff0c;返回一个数组&a…

利用计算机视觉算法提取裂纹相关特征参数信息

ABCnutter/CrackFeature: &#x1f680;使用计算机视觉相关算法提取裂缝的骨架&#xff08;矢量化&#xff09;、轮廓【支持提前修复断裂裂缝】&#xff0c;以及几何特征参数&#xff08;长度、宽度、面积和主要方向&#xff09;【欢迎Star】。主要流程以及相关算法如下&#x…

异构超图嵌入的图分类 笔记

1 Title Heterogeneous Hypergraph Embedding for Graph Classification&#xff08;Xiangguo Sun , PictureHongzhi Yin , PictureBo Liu , PictureHongxu Chen , PictureJiuxin Cao , PictureYingxia Shao , PictureNguyen Quoc Viet Hung&#xff09;【WSDM 2021】 2 Co…

1038: 顺序表中重复数据的删除

解法&#xff1a; #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {int n, k;cin >> n;vector<int> arr(n);for (auto& x : arr) cin >> x;cin >> k;int sum 0;for (auto x : arr…

句柄ros::NodeHandle nh(“~“)与nh对launch文件参数配置(param)的影响

ros::NodeHandle nh("~"); 改为&#xff1a; ros::NodeHandle nh; 即可 /*************************分割线 ************************/ 如果原本是&#xff1a; ros::NodeHandle nh;可以改成&#xff1a; ros::NodeHandle nh("~"); 试试

反射与动态代理

一、反射 什么是反射? 反射允许对成员变量&#xff0c;成员方法和构造方法的信息进行编程访问 1.获取class对象的三种方式 Class这个类里面的静态方法forName&#xff08;“全类名”&#xff09;&#xff08;最常用&#xff09; 通过class属性获取 通过对象获取字节码文件对…

浏览器原理---事件循环

浏览器原理 学习浏览器原理对于我们开发是很有必要的 我们可以了解到浏览器内部工作原理对自己的代码进行优化 进程线程 首先了解进程和线程 进程就就是内存在正在进行的应用程序 在内存中独占一个内存空间 并且进程之间是隔离的 可以看到每个应用都有一个进程 占用空间内存…

【300套】基于Springboot+Vue的Java毕业设计项目(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f9e1;今天给大家分享300的Java毕业设计&#xff0c;基于Springbootvue框架&#xff0c;这些项目都经过精心挑选&#xff0c;涵盖了不同的实战主题和用例&#xff0c;可做毕业…

【C++进阶】RAII思想&智能指针

智能指针 一&#xff0c;为什么要用智能指针&#xff08;内存泄漏问题&#xff09;内存泄漏 二&#xff0c;智能指针的原理2.1 RAII思想2.2 C智能指针发展历史 三&#xff0c;更靠谱的shared_ptr3.1 引用计数3.2 循环引用3.3 定制删除器 四&#xff0c;总结 上一节我们在讲抛异…

Vulnhub靶机 DC-1渗透详细过程

Vulnhub靶机:DC-1渗透详细过程 目录 Vulnhub靶机:DC-1渗透详细过程一、将靶机导入到虚拟机当中二、攻击方式主机发现端口扫描web渗透利用msf反弹shell数据库信息web管理员密码提权 一、将靶机导入到虚拟机当中 靶机地址&#xff1a; https://www.vulnhub.com/entry/dc-1-1,29…

Open CASCADE学习|BRepOffsetAPI_DraftAngle

BRepOffsetAPI_DraftAngle 是 Open CASCADE Technology (OCCT) 中用于创建带有草图斜面的几何体的类。草图斜面是一种在零件设计中常见的特征&#xff0c;它可以在零件的表面上创建一个倾斜的面&#xff0c;通常用于便于零件的脱模或是增加零件的强度。 本例演示了如何创建一个…