线性表--顺序表-1

主要内容

  1. 顺序表基础练习题

一.基础练习题

1.从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出位置由最后元素填补,若顺序表为空,则显示出错信息并退出运行。

代码如下(示例):
算法思想:搜索整个顺序表,查找最小元素并记住其位置,搜索结束后用最后一个元素填补空出的原最小值元素的位置。bool Del_Min(sqList &L,ElemType &value){
//删除顺序表L中最小元素结点,并通过引用型参数value返回其值
//若删除成功,则返回true;否则返回falseif(L.length==0)return false; //表空,中止操作返回value=L.data[0];int pos=0; //假定0号元素的值最小for(int i=1;i<L.length;i++) //循环,寻找具有最小值的元素if(L.data[i]<value){ //让value记忆当前具有最小值的元素value=L.data[i];pose=i;}L.data[pos]=L.data[L.length-1]; //空出的位置由最后一个元素提填补L.length--;return true; //此时,value即为最小值
}

2.设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)。

代码如下(示例):
算法思想:扫描顺序表L的前半部分元素,对于元素L.data[i](0<=i<L.length/2),
将其与后半部分的对应元素L.data[L.length-i-1]进行交换。void Reverse(Sqlist &L){Elemtype temp; //辅助变量for(i=0;i<L.length/2;i++){temp=L.data[i]; //交换L.data[i]与L.data[L.length-i-1]L.data[i]=L.data[L.length-i-1];L.data[L.length-i-1]=temp;}
}

3.将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。

代码如下(示例):
算法思想:首先,按顺序不断取下两个顺序表表头较小的节点存入新的顺序表中。
然后,看哪个表还有剩余,将剩下的部分加到新的顺序表后面。bool Merge(SeqList A,SeqList B,SeqList &C){
//将有序顺序表A和B合并为一个新的有序顺序表Cif(A.length+B.length>C.maxSize) //大于顺序表的最大长度return false;int i=0,j=0,k=0;while(i<A.length&&j.B.length){if(A.data[i]<=B.data[j])C.data[k++]=A.data[i++];elseC.data[k++]=B.data[j++];}while(i<A.length) //还剩一个没有比较完的顺序表C.data[k++]=A.data[i++];while(j<B.length)C.data[k++]=B.data[j++];C.length=k;return true;
}

4.已知在一维数组A[m+n]中依次存放两个线性表(a1,a2,…,am)和(b1,b2,…bn).编写一个函数,将数组中两个顺序表的位置互换,即将(b1,b2,…bn)放在(a1,a2,…am)的前面。

代码如下(示例):
算法思想:先将数组A[m+n]中的全部元素(a1,a2,...am,b1,b2,...bn)原地逆置为(bn,bn-1,...b1,am,am-1,..a1),
再对前n个元素和后m个元素分别使用逆置算法,即可得到(b1,b2,..bn,a1,a2,...am),从而实现顺序表的位置互换。typedef int DataType;void Reverse(DataType A[],int left,int right,int arraySize){if(left>=right || right>=arraySize)return;int mid=(left+right)/2;for(i=0;i<mid-left;i++){DataType temp=A[left+i];A[left+i]=A[right-i];A[right-i]=temp;}
}
void Exchange(DataType A[],int m,int n,int araySize){Reverse(A,0,m+n-1,arraySize);Reverse(A,0,n-1,arraySize);Reverse(A,n,m+n-1,arraySize);
}

5.设将n(n>1)个整数存放到一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p(O<p<n)个位置,即将R中的数据由(X0,X1,…,Xn-1)变换为(Xp,Xp+1,…,Xn-1,X0,X1,…Xp-1)。

要求:1) 给出算法的基本设计思想。
2)根据设计思想,采用 C或 C++或 Java 语言描述算法,关键之处给出注释
3) 说明你所设计算法的时间复杂度和空间复杂度

代码如下(示例):
算法思想:可将这个问题视为把数组 ab 转换成数组 ba(a代表数组的前p 个元素,b代表数组中余下的n-p个元素),
先将a逆置得到a^(-1)b,再将b逆置得到a^(-1)b^(-1),最后将整个a逆置得到(a^(-1)b^(-1)^-1))= ba。
设 Reverse 函数执行将数组元素逆置的操作,对abcdefgh 向左循环移动3(p=3)个位置的过程如下:
Reverse(0,p-1)得到 cbadefgh:
Reverse(pn-1)得到 cbahgfed;
Reverse(0,n-1)得到defghabc;:Reverse 中,两个参数分别表示数组中待转换元素的始末位置。
void Reverse(int R[],int from,int to){int i,temp;for(i=0;i<(to-from+1)/2;i++){temp=R[from+i];R[from+i]=R[to-i];R[to-i]=temp;}
} //Reverse
void Converse(int R[],int n,int p){Reverse(R,0,p-1);Reverse(R,p,n-1);Reverse(R,0,n-1);
}
上述算法中三个Reverse函数的时间复杂度分别为 O(p/2)O((n-p)/2)0(n/2),
故所设计的算法的时间复杂度为 O(n),空间复杂度为 O(1)。
另解,借助辅助数组来实现。
算法思想:创建大小为p的辅助数组 S,将R中前p 个整数依次暂存在 S中,同时将 R中后 n-p 个整数左移,
然后将 S中暂存的p个数依次放回到R中的后续单元。时间复杂度为 O(n),空间复杂度为 O(p)

总结

以上是今天要讲的内容,练习了一些线性表–顺序表的习题。

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

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

相关文章

持续集成交付CICD:Jenkins通过API触发流水线

目录 一、理论 1.HTTP请求 2.调用接口的方法 3.HTTP常见错误码 二、实验 1.Jenkins通过API触发流水线 三、问题 1.如何拿到上一次jenkinsfile文件进行自动触发流水线 一、理论 1.HTTP请求 &#xff08;1&#xff09;概念 HTTP超文本传输协议&#xff0c;是确保服务器…

JS特效:跟随鼠标移动的小飞机

前端网页中&#xff0c;用JS实现鼠标移动时&#xff0c;页面中的小飞机向着鼠标移动。 效果 源码 <!DOCTYPE html> <html><head><style>*{margin: 0;padding: 0;}body{height: 100vh;background: linear-gradient(200deg,#005bea,#00c6fb);}#plane{…

[C/C++]数据结构 链表(单向链表,双向链表)

前言: 上一文中我们介绍了顺序表的特点及实现,但是顺序表由于每次扩容都是呈二倍增长(扩容大小是自己定义的),可能会造成空间的大量浪费,但是链表却可以解决这个问题. 概念及结构: 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接…

HC-SR501传感器制作一个报警系统

接线图&#xff1a; 引脚连接&#xff1a; 1. 将 PIR 信号引脚连接到 arduino 数字 引脚 13。 2. 将 PIR V 引脚连接 到 arduino 5v 引脚。 3. 将 PIR GND 引脚连接到 arduino GND 引脚。 4. 将arduino数字 引脚12连接 到220欧姆电阻&#xff0c;并将该电阻连接到 LED V …

Java Swing猜单词游戏

内容要求 1&#xff09; 本次程序设计是专门针对 Java 课程的,要求使用 Java 语言进行具有一定代码量的程序开发。程序的设计要结合一定的算法&#xff0c;在进行代码编写前要能够设计好自己的算法。 2&#xff09;本次程序设计涉及到 Java 的基本语法&#xff0c;即课堂上所…

提升工作效率,打造精细思维——OmniOutliner 5 Pro for Mac

在当今快节奏的工作环境中&#xff0c;如何高效地组织和管理我们的思维和任务成为了关键。而OmniOutliner 5 Pro for Mac正是为此而生的一款强大工具。无论你是专业写作者、项目经理还是学生&#xff0c;OmniOutliner 5 Pro for Mac都能帮助你提升工作效率&#xff0c;打造精细…

Fibonacci 数列与黄金分割

mapp[1 for item in range(30)] for item in range(3,30):mapp[item]mapp[item-1]mapp[item-2]pass numint(input()) if num>19:print("0.61803399")pass else:anss float((mapp[num]*1.0) / (mapp[num 1]*1.0))print(format(anss,.8f))进行短程的打表就可以看出…

实用篇-ES-DSL查询文档

数据的存储不是目的&#xff0c;我们希望从海量的酒店数据中检索出需要的信息&#xff0c;这就是ES的搜索功能 官方文档: https://elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html#query-dsl。DSL是用来查询文档的 Elasticsearch提供了基于JSON的DSL来定…

将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出

要将给定的表达式树转换为等价的中缀表达式&#xff0c;可以通过遍历表达式树的方式来实现。以下是一个以递归方式实现的示例代码&#xff1a; class Node:def __init__(self, value):self.value valueself.left Noneself.right Nonedef convert_to_infix_expression(root)…

阿里云ESSD云盘、高效云盘和SSD云盘介绍和IOPS性能参数表

阿里云服务器系统盘或数据盘支持多种云盘类型&#xff0c;如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等&#xff0c;阿里云服务器网aliyunfuwuqi.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延…

SpringBoot-AOP-基础到进阶

SpringBoot-AOP AOP基础 学习完spring的事务管理之后&#xff0c;接下来我们进入到AOP的学习。 AOP也是spring框架的第二大核心&#xff0c;我们先来学习AOP的基础。 在AOP基础这个阶段&#xff0c;我们首先介绍一下什么是AOP&#xff0c;再通过一个快速入门程序&#xff0c…

【我和Python算法的初相遇】——体验递归的可视化篇

&#x1f308;个人主页: Aileen_0v0 &#x1f525;系列专栏:PYTHON数据结构与算法学习系列专栏&#x1f4ab;"没有罗马,那就自己创造罗马~" 目录 递归的起源 什么是递归? 利用递归解决列表求和问题 递归三定律 递归应用-整数转换为任意进制数 递归可视化 画…

Docker安装MinIO遇到的问题汇总——持续更新中

文章目录 Docker安装MinIO遇到的坑前言问题1&#xff1a;执行docker run报错Error response from daemon问题2&#xff1a;启动MinIO容器浏览器无法访问问题3&#xff1a;上传文件报错InvalidResponseException问题4&#xff1a;上传文件报错Connection refused最终的启动指令问…

Jmeter 吞吐量Per User作用

第一点&#xff1a;Per User仅在Total Execution时生效 第二点&#xff1a;Per User 选中后 聚合报告中将统计的的样本数将变成线程组配置的线程数*吞吐量控制器配置的执行样本数量&#xff08;前提是线程组配置执行接口的次数线程数*循环数 大于吞吐量控制器配置的执行样本数…

gittee启动器

前言 很多小伙伴反馈不是使用gitee&#xff0c;不会寻找好的项目&#xff0c;在拿到一个项目不知道从哪里入手。 鼠鼠我呀就是宠粉&#xff0c;中嘞&#xff0c;老乡。整&#xff01;&#xff01;&#xff01; git的基本指令 在使用gitee的时候呢&#xff0c;我们只需要记住…

Adversarially Robust Neural Architecture Search for Graph Neural Networks

Adversarially Robust Neural Architecture Search for Graph Neural Networks----《面向图神经网络的对抗鲁棒神经架构搜索》 摘要 图神经网络&#xff08;GNN&#xff09;在关系数据建模方面取得了巨大成功。尽管如此&#xff0c;它们仍然容易受到对抗性攻击&#xff0c;这对…

力扣周赛372 模拟 思维 位运算 java

100131. 使三个字符串相等 ⭐ AC code class Solution {public int findMinimumOperations(String s1, String s2, String s3) {int len1 s1.length();int len2 s2.length();int len3 s3.length();int n Math.min(len1,len2);n Math.min(n,len3);int i 0;while(i < n…

在Java代码中指定用JAXB的XmlElement注解的元素的顺序

例如&#xff0c;下面的类RegisterResponse 使用了XmlRootElement注解&#xff0c;同时也使用XmlType注解&#xff0c;并用XmlType注解的propOrder属性&#xff0c;指定了两个用XmlElement注解的元素出现的顺序&#xff0c;先出现flag&#xff0c;后出现enterpriseId&#xff0…

freeCodeCamp响应式网页设计笔记

h1到h6标题元素&#xff0c;用于表明其内容的重要性&#xff0c;数字越低&#xff0c;重要性越高&#xff0c;所以h2元素内容的重要性应该低于h1元素&#xff0c;所以在编程中&#xff0c;每页应尽量只使用一个h1元素&#xff0c;并将重要性较低的标题放在重要性较高的标题之下…

Excel查询时用vlookup或者xlookup时,虽然用的参数选择的是精确匹配,但是发现不能区分大小写,应该如何解决?

Excel查询时用vlookup或者xlookup时&#xff0c;虽然用的参数选择的是精确匹配&#xff0c;但是发现不能区分大小写&#xff0c;应该如何解决&#xff1f; Index函数解决 INDEX([excel1.xlsx]Sheet1!$E:$E,MATCH(1,EXACT(G5,[excel1.xlsx]Sheet1!$E:$E)*1,0))重点说明&#x…