顺序表的深度解剖

篮球哥温馨提示:编程的同时不要忘记锻炼哦!

时光不老,咱们不散,这里依旧是爱打篮球的程序猿带你学顺序表!

你接下看到的可能是最详细的顺序表讲解之一


好的废话不多说,爱打篮球的程序猿直接带你上高速!

本次我们解剖顺序表将从以下三个结构:

1、静态顺序表和动态顺序表

2、顺序表实现增删查改等常见接口

3、顺序表相关OJ题练习

🎄 什么是顺序表?

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存 储。在数组上完成数据的增删查改。

兄弟们兄弟们,记得抠字眼啊,顺序表一定是连续的存储单元,并且是依次存储数据的!!!!

顺序表一般可以分为:

⛳ 静态顺序表      🏀 动态顺序表

静态顺序表:使用定长数组存储,简单来说大小是固定的,数据个数也是固定的!

动态顺序表:使用动态开辟的数组存储,简单来说,装满了会自动扩大容量!

静态顺序表的实现我们就不讲了,冬天到了春天还会远吗?会了动态你还不会静态吗?所以我们今天主要讲动态顺序表!静态顺序表搭建代码如下:

// 顺序表的静态存储
#define N 100
typedef int SLDataType;
typedef struct SeqList
{SLDataType array[N]; // 定长数组size_t size;     // 有效数据的个数 
}SeqList;

🏀 来到今天的重点!动态顺序表!

首先先来搭建顺序表的结构。

🎉 上面就是我给大家画的基本一个结构图了,下面我们来实现顺序表的基本接口:

💛 首先我们顺序表需要初始化

 🧡 既然我们没有在初始化给定大小,我们现在要判断需不需要给动态表顺序表增容:

 🔺 我们来实现动态顺序表头部插入数据:

 

 🔻 接着来实现尾部插入数据:

 

 🌛 我们要开始实现头部删除数据了:

 

🌞 下面实现尾部删除数据:

 

 🌈 接着我们来实现在pos下标位置插入数据:

 

 🚩 我们再来实现删除pos下标位置的数据:

查找顺序表中的元素x:

 🚀 修改指定pos下标的数据

在实际中在我上面写的函数有些都可以复用哦!这个就等着你们去发现吧,我们接着往下走:

其实还有一些顺序表的打印,清空,求元素个数,这些相信你们看完上面的内容对于你们来说非常容易!我就不一一举例了,下面进入我们的习题时间!(●'◡'●)

题目1:给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。                                                                                                           不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。                   元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

题目来源:27. 移除元素 - 力扣(LeetCode) (leetcode-cn.com)

思路1:遍历数组,发现元素为val就把后面的往前挪覆盖掉val,但是这样的时间复杂度为O(N²),这样当数组全是val,效率就会特别低!

思路2:以空间换时间,开辟一个新数组,把不是val的数放到新数组,再把新数组的值拷贝回来!但是这样的话空间复杂度O(N)不符合题意!

思路3:使用双指针,空间复杂度O(1),时间复杂度O(n),代码如下:

int removeElement(int* nums, int numsSize, int val)
{int src = 0;int dst = 0;while (src < numsSize){if (nums[src] != val){nums[dst++] = nums[src++];}else{++src;}}return dst;
}

题目2:给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。                                                                          请你 合并 nums2 到 nums1 中,使合并后的数组同样按非递减顺序排列。

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

题目来源:88. 合并两个有序数组 - 力扣(LeetCode) (leetcode-cn.com)

 那这道题的思路就留给小伙伴们自己去思考了,我就直接给你们上代码!

void merge(int* nums1, int m, int* nums2, int n)
{int end1 = m - 1;int end2 = n - 1;int end = m + n - 1;while (end1 >= 0 && end2 >= 0){if (nums1[end1] > nums2[end2]){nums1[end] = nums1[end1];--end;--end1;}else{nums1[end] = nums2[end2];--end;--end2;}}//如果是end2结束,不需要处理因为就是在nums1里面while (end2 >= 0){nums1[end] = nums2[end2];--end;--end2;}
}

好了,通过这篇文章的学习,相信你会把顺序表理解的更透彻,还是那句话,我们一起快乐编程不头秃!加油奥里给!👻👻👻

🌸🌸🌸🌸🌸🌸完结撒花!🌸🌸🌸🌸🌸🌸

下期预告:单链表

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

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

相关文章

C语言深度解剖——C语言关键字

每天进步一点点&#xff0c;坚持带来大改变&#xff01;&#xff01;&#xff01; 前言&#xff1a; 在C语言的学习过程中会遇到许多的关键字&#xff0c;我们是否真的详细了解这些关键字的使用方法和使用场景&#xff0c;下面我们来详解C语言中的32个关键字 1.C语言关键字概览…

C语言深度解剖:关键字

第一个C语言程序内存定义与声明变量是什么为什么要定义变量定义变量的本质定义声明 关键字 - auto局部与全局变量作用域 vs 生命周期auto 关键字 - register寄存器本质register 修饰变量 1、多文件1.1、变量声明1.2、头文件包含内容1.3、函数声明 1.4、跨文件2、static1、sizeo…

ADC采样效应及相关影响解剖

在前述文章&#xff0c;BUCK电路模拟补偿器的数字化过程 &#xff0c;我们讨论了模拟补偿器的数字化&#xff0c;事实上&#xff0c;数字化过程的第一个重要的环节就是ADC对反馈量的采样&#xff0c;本文就重点探讨一下由于ADC采样频率带来的一些问题&#xff0c;进而讨论一下相…

大脑解剖图

脑的表面解剖 1&#xff1a;嗅球 2&#xff1a;大脑 3&#xff1a;小脑 4&#xff1a;脑干 5&#xff1a;外侧裂 6&#xff1a;中央前回 7&#xff1a;中央沟 8&#xff1a;中央后回 9&#xff1a;颞上回 10&#xff1a;颞叶 11&#xff1a;额叶 12&#xff1a;顶叶 …

冠状动脉解剖结构

学习冠脉解剖结构过程中看了很多的PPT但是要么问题过多要么&#xff0c;解剖结构图展示的不够清晰明了&#xff0c;现在网络上搜集了一些比较好的PPT的截图&#xff0c;供大家学习。 CTA横断面冠脉解剖结构 PL可从左发出也可以从右侧发出 Reference&#xff1a; [1]: 帮你真正…

推荐一个解剖学网站

博主高中是物生班的&#xff0c;非常喜欢生物这门课&#xff0c;后来学了很多工程类的知识&#xff0c;愈发觉得人体真是一个伟大的工程架构&#xff0c;我们如今的工程学&#xff0c;很多也是在变相的拓展人体的能力。从这个角度来看&#xff0c;医生就是人体维修师&#xff0…

C语言深度解剖 PDF 分享

链接:https://pan.baidu.com/s/1U-8L7ZY5_sLpk4p0J302Mg 提取码:d8nu 相关推荐 [Objective-c程序设计] 中文编程学习进阶_易语言 Windows API开发详解 函数、接口、编程实例 Programming in Objective-C, 4th Edition c++性能优化指南 《C语言深度解剖》是2012年出…

chatgpt赋能Python-python_beeware

Python Beeware&#xff1a;创建跨平台应用程序的开源工具包 如果你是一名开发人员&#xff0c;特别是自己开发应用程序的开发人员&#xff0c;你可以使用Python Beeware&#xff0c;这是一个开源的工具包&#xff0c;可以帮助你创建跨平台应用程序。这篇文章将介绍Python Bee…

谷歌内部文件泄露:大模型已被开源社区「偷家」,不改变ChatGPT也会黯然失色...

鱼羊 编辑整理量子位 | 公众号 QbitAI 在这场大模型军备竞赛中&#xff0c;我们没有护城河&#xff0c;OpenAI也没有。 一份谷歌内部“泄密文件”&#xff0c;正在网上一石激起千层浪。 全文挺长&#xff0c;但核心观点十分明确&#xff1a;开源大模型迅猛发展&#xff0c;正在…

机器学习实战2-聚类算法分析亚洲足球梯队

大家好&#xff0c;我是微学AI&#xff0c;今天给大家带来机器学习实战案例&#xff0c;分析亚洲足球梯队。2022年卡塔尔世界杯将在本月进行&#xff0c;不到半个月就开幕了&#xff0c;本届世界杯通过预选赛已选出32支球队。 2022卡塔尔世界杯决赛圈名单如下&#xff0c;各大…

足球比赛的官方规则

《世界杯的比赛可以换6个人&#xff1f;》这篇文章引用的官方文档是IFAB&#xff08;国际足球理事会&#xff09;的《足球竞赛规则》&#xff0c;足球比赛中的各种规则&#xff0c;都可以从这个文档中找到最权威的解释&#xff0c;这就像研发工作中的使用手册&#xff0c;明确告…

从新生儿性别比例数据,看各地重男轻女程度高低

又见重男轻女婆婆杀孙女&#xff01; 这样的悲剧一再上演&#xff0c;源于某些地方根深蒂固的重男轻女封建思想。 那么问题来了。 到底国内哪些地方重男轻女比较严重呢&#xff1f; ---------------------------------------------------- 直观的感受&#xff0c;综合看看某些论…

我国男女平均身高数据出炉!这个问题没想到……

国务院新闻办公室 举行新闻发布会介绍 《中国居民营养与慢性病状况报告&#xff08;2020年&#xff09;》 有关情况 并答记者问 我国18&#xff0d;44岁男性和女性平均身高 分别为169.7厘米和158.0厘米 发布会上&#xff0c;国家卫健委副主任李斌发布《中国居民营养与慢性病状…

2018 中国人口研究,净增长500多万人。5年后注定人口负增长

公报显示&#xff0c;年末全国大陆总人口139538万人&#xff0c;比上年末增加530万人&#xff0c;其中城镇常住人口83137万人&#xff0c;占总人口比重&#xff08;常住人口城镇化率&#xff09;为59.58%&#xff0c;比上年末提高1.06个百分点。户籍人口城镇化率为43.37%&#…

中国人口增长预测

目录 问题分析 模型建立 Logistic模型 Leslie模型 模型求解 问题一 问题二 问题三 问题分析 问题 基本假设 &#xff08;1&#xff09;不考虑移民对人口总数的影响 &#xff08;2&#xff09;超过90岁按照90岁计算 &#xff08;3&#xff09;在较短时间内&#xff0c;平均…

2022年我国出生率预测,恐怕。。。

大家好&#xff0c;我是朱小五。 去年1月份国家统计局公布数据&#xff1a;显示2021年出生人口为1062万&#xff0c;创下了近年来新低&#xff0c;比2016年下降了43.6%&#xff0c;2021年净增长人口为48万人。 转眼又一年了&#xff0c;2022年我国出生率会是什么样呢&#xff1…

解决电脑下面的任务栏经常性卡死(亲测可行)

目录 一、遇到问题 二、解决办法 一、遇到问题 本电脑是win10的电脑&#xff0c;性能配置也很强。游戏软件等占用也很少。按照道理来说是不可能会出现卡顿的。但是就是遇到了桌面图标点击正常&#xff0c;但是底部的任务栏经常卡死等问题。 二、解决办法 1.使用快捷键ctrla…

Linux 进程卡住了怎么办?

在我们使用 Linux 系统时&#xff0c;如果网络或者磁盘等 I/O 出问题&#xff0c;会发现进程卡住了&#xff0c;即使用 kill -9 也无法杀掉进程&#xff0c;很多常用的调试工具&#xff0c;比如 strace, pstack 等也都失灵了&#xff0c;是怎么回事&#xff1f; 此时&#xff0…

逼真至极,拥有悲伤和快乐的机器人,会接管世界吗?

在互动中&#xff0c;人形机器人Ameca坦率地透露了她最悲伤的一天&#xff0c;那就是她意识到自己永远无法体验到某些人类情感&#xff0c;如真正的爱、友情或生活的普通乐趣。与我们对话的人形机器人确实是一个真实的创造&#xff0c;并被誉为“世界上最先进的人形机器人”。 …

开题报告:基于java电子商务购物商城网站系统 毕业设计论文开题报告模板

开发操作系统&#xff1a;windows10 4G内存 500G 开发环境&#xff1a;JDK1.8 Tomcat8 开发语言&#xff1a;Java 开发框架&#xff1a;springboot 模板引擎&#xff1a;Thymeleaf 开发工具&#xff1a;Idea 数据库&#xff1a;mysql8 数据库管理工具&#xff1a;nav…