【数据结构与算法】顺序表

顺序表

  • 一.顺序表的原理
    • 1.是什么
    • 2.数据结构
  • 二.顺序表的初始化
  • 三.顺序表增加元素
  • 四.顺序表插入元素
  • 五.顺序表删除元素
  • 六.顺序表的销毁
  • 七.总结

一.顺序表的原理

1.是什么

顺序表是一种线性的结构,类似于数组,但是中间不能有空值.
元素顺序地存储在一段连续的内存空间中.
顺序表中的元素类型是相同的.
顺序表的大小是固定的.
查找的速度很快,但是插入和删除需要移动大量的元素.
适用于元素访问频繁,但插入和删除操作较少的场景。

2.数据结构

包含一个基地址指针,一个记录当前个数的长度,和一个初始化顺序表的大小的结构体.
在这里插入图片描述
顺序表里面什么类型的都可以,我这里是自定义的人类结构体.
在这里插入图片描述

二.顺序表的初始化

初始化我们就需要对结构体的3个值进行赋值.
基地址,我们new手动开辟堆区内存
当前长度初始化为0
内存大小自己设定
在这里插入图片描述
当然这里做了一下防御性编程,如果堆区内存没有开辟成功就直接返回.
随便定义的一个宏.
在这里插入图片描述

三.顺序表增加元素

因为我们手动开辟的空间是一个数组,所以我们可以通过下标来进行添加数据.
因为我们添加数据是一个一个进行添加,相当于尾插法,而且数组的下标是从0开始.
所以我们可以直接通过,当前长度为下标进行添加,然后对当前长度加1.
在这里插入图片描述
当然如果内存满了就添加不了了,直接退出.

四.顺序表插入元素

插入元素就很好玩了,需要进行乾坤大罗伊,容我画个图,带你理解.
在这里插入图片描述
所以当我们要在数组某个位置插入一个图的时候,我们也需要进行移动.
那么如何能达到这种移动的效果呢,其实就是相当于覆盖,将前一个的值赋值到后面一个值.
为了保证值不受影响,我们从后往前进行赋值.
在这里插入图片描述
参数i是插入的位置,people是插入的元素.
我们需要做防御性编程,插入的位置不能离谱,还有满了就不能插了
从当前有的最后一个值的后一个开始,依次将前面的值赋值到后面.
在要插入的位置就设置当前要插入的值.

五.顺序表删除元素

原理跟插入是差不多的,也需要大量的移动.
只不过这次是将后面的值赋值到前面.
相当于是将要删除的值进行了覆盖,从而达到元素删除的效果.
在这里插入图片描述
当然,这里有一个要删除的特殊位置,那就是当删除的是顺序表的尾巴的时候,我们可以直接对当前值减一即可,访问不到.相当于就是删除.

六.顺序表的销毁

这个就很简单了,newdelete来进行销毁.
在这里插入图片描述
如果基地址不为空,就进行销毁,同时将长度和大小都设置为0.

七.总结

总的来说,顺序表的应用十分广泛,它在许多领域中都发挥着重要的作用,特别是当需要快速随机访问数据时。
相当于是数组的升级版可以进行插入和删除数据,使其更加的灵活.

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

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

相关文章

单关节电机动力学辨识

这是一个单关节电机的动力学辨识过程,这是一个yaw轴转动电机的动力学辨识过程 1、动力学建模 (1)整体动力学 F J α f F J\alpha f FJαf 单关节的物理量包括惯性项、离心力和科氏力、摩擦力。这里忽略离心力和科氏力,据说…

SolidEdge二次开发(C#)-环境配置

文章目录 1、前言2、环境配置2.1 安装Solidworks20242.2 安装VS20222.3 查看Com组件2.3.1 在VS2022中创建一个wpf工程项目2.3.2 添加com组件 1、前言 SolidEdge是Siemens PLM Software公司旗下的三维CAD软件,采用Siemens PLM Software公司自己拥有专利的Parasolid作…

使用Java和Spring Retry实现重试机制

使用Java和Spring Retry实现重试机制 大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将探讨如何在Java中使用Spring Retry来实现重试机制。重试机制在处理临时性故障和提高系统稳…

Pandas筛选数据的10种方法

Pandas是Python中用于数据操作和分析的强大库之一.它提供了丰富的功能来处理和筛选数据.本文将介绍Pandas中筛选数据的10种常用方法,并通过示例展示具体操作步骤. 1. 基于条件筛选 Pandas支持通过布尔索引根据条件筛选数据.这是最常用的筛选方法之一. import pandas as pd# …

2679. 矩阵中的和

两种方法: 第一种:先对二维列表的每一列进行排序,然后对每一列的数据进行逐个比较,找出最大值。 class Solution:def matrixSum(self, nums: list[list[int]]) -> int:result0mlen(nums)nlen(nums[0])for i in range(m):nums…

js动画插件-vue

分享一个动画插件 学习 动画插件 是进入大厂的必备技能 首先我们需要先学会 去使用js 动画 封装好的 GreenSock 动画平台 (GSAP) greensock.com/gsap/ 就是这个插件 我现在分享一个用例 其实很简单 但是 具体的属性 和很多 内容需要慢慢使用 慢慢看…

C++客户端Qt开发——系统相关(文件操作)

2.文件操作 ①输入输出设备类 在Qt中,文件读写的类为QFile。QFile的父类为QFileDevice,QFileDevice提供了文件交互操作的底层功能。QFileDevice的父类是QIODevice,QIODevice的父类为QObject。 QIODevice是Qt中所有输入输出设备(input/output device,简称I/O设备)…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 环形字符串最长子串(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

响应式原理实现(2)vue2和vue3

响应式2 vue2响应式实现 提供shallow,决定是否需要深度响应 /*******************新增 shallow*******************/ export function defineReactive(obj, key, val, shallow) { /****************************************************/const property Object…

【React】useState:状态管理的基石

文章目录 一、什么是 useState?二、useState 的基本用法三、useState 的工作原理四、高级用法五、最佳实践 在现代前端开发中,React 是一个非常流行的库,而 useState 是 React 中最重要的 Hook 之一。useState 使得函数组件能够拥有自己的状态…

【Nodejs基础06】Node.js常用命令总结

执行JS文件:node xx 初始化package.json: npm init -y(所在文件夹不能有中文或特殊符号) 下载本地软件包:npm i 软件包名(软件包源码全部集成在node_modules文件夹中) 下载全局软件包:npm i …

深入理解synchronized(简记)

深入理解synchronized 管程synchronized对象的内存布局锁状态记录锁对象状态转换偏向锁轻量级锁锁对象转换总结 管程synchronized Java 参考了 MESA 模型,语言内置的管程(synchronized)对 MESA 模型进行了精简。 对象的内存布局 对象头 Mar…

Nginx笔记(一)

一、Nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 [13],同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.…

如何在宝塔面板给域名配置 SSL 证书

首先需要有证书 这里以阿里云为例 1. 首先进入到 SSL 证书管理控制台 选择个人测试证书,并点击购买 免费的可以使用三个月。 购买完成之后回到控制台。 点击创建证书,将标红的地方填写,其他默认就好。 然后提交审核就行。 这里需要对域名…

岁月未央,深情永驻,暮春的脚步渐行渐远,夏日的微风轻拂而来,时光的车轮从未停歇,岁月的篇章仍在续写

《岁月未央,深情永驻》暮春的脚步渐行渐远,夏日的微风轻拂而来,时光的车轮从未停歇,岁月的篇章仍在续写。在这流转的光阴中,我们追寻着,思索着,感悟着生命中那些最真挚、最动人的情感。 回首暮春,那是一场花事的落幕,却也是诗意的延续。岁月的舞台上,每一个远去的季…

【React】组件:全面解析现代前端开发的基石

文章目录 一、什么是组件?二、组件的类型三、组件的生命周期四、状态管理五、属性传递六、组合与继承七、最佳实践 在现代前端开发中,React 已成为开发者构建用户界面的首选框架之一。React 的强大之处在于其组件化设计,允许开发者将 UI 拆分…

day09-linux系统优化

01.知识点回顾 常用命令 1.pwd 2.cd-~...../../ 3.ls-l 详细信息-a 查看隐藏的文件 4.touch 5.mkdir-p 递归创建目录 6.cat 查看文件内容-n 显示行号 7.cp 复制文件-r 复制目录 8.mv 移动文件/目录 9.rm 删除文件-r 删除目录-f 强制删除不提示 10.tree 树形结构 11…

Wireshark自定义协议解析器插件C语言开发二

接着上一篇安装文章,在wireshark插件开发完成后,仿真的dll并不能直接分享使用,当另外电脑缺少必要的c环境或依赖项时候,在打开wireshark软件时候即会报错。 上图是仿真得到的dll文件路径,但是并不能在其他没有安装了v…

java——final关键字

final关键字是最终的意思,可以修饰(类、方法、变量) 修饰类:该类被称为最终类,特点是不能被继承了修饰方法:该方法被称为最终方法,特点是不能被重写了修饰变量:该变量只能被赋值一次…

linux驱动--中断

中断号和中断的申请 中断号的添加-----定义设备节点,描述当前设备 通过设备树文件获取 /dts/xxxx.dts文件中进行设备的设置 在dts设备树文件中进行设备的定义,包括继承的设备,中断号的设置 需要对我们的dts设备树文件进行编译&#xff0…