【数据结构】顺序表的应用

news2024/9/17 7:17:21

目录

一.引言        

二.顺序表概念

三.顺序表的实现

1.定义顺序表

2.顺序表初始化

​编辑

3.检查空间,如果满了,进行增容

4.顺序表尾插

5.顺序表尾删

6.顺序表头插

7.顺序表头删

​编辑

8.顺序表查找

9.顺序表在pos位置插入x

10.顺序表删除pos位置的值

11.顺序表销毁

12.顺序表打印


一.引言        

        在计算机科学中,数据结构是计算机存储、组织数据的方式。顺序表作为一种线性表,以其简单、易用的特点,成为了许多高级数据结构的基础。了解顺序表的工作原理和实现方法,对于我们更好地理解计算机科学具有重要意义。


二.顺序表概念

        顺序表(Sequential List)是一种线性表,它的特点是数据元素在物理存储上连续,且元素之间的逻辑顺序与物理顺序相同。在顺序表中,数据元素按照一定的顺序排列,每个元素都有一个确定的位置,可以通过索引(或称为下标)直接访问。

以下是顺序表的基本概念和特性:

  1. 数据元素:顺序表中的每一个对象称为数据元素,可以是整数、浮点数、字符或者更复杂的记录类型。

  2. 索引(下标):顺序表中的每个数据元素都有一个索引,通常从0开始计数,用于指示元素在表中的位置。

  3. 长度:顺序表的长度是指表中数据元素的个数,长度可以根据需要进行动态调整,但通常有一个最大容量限制。

  4. 存储空间:顺序表通常在计算机内存中占用一段连续的存储空间,以便于通过索引快速访问元素。

  5. 随机访问:顺序表支持随机访问,即可以在O(1)的时间复杂度内直接访问到任意位置的元素。

  6. 顺序性:顺序表中的元素按照一定的顺序排列,元素之间的顺序关系是相邻的,即第一个元素紧邻第二个元素,以此类推。

顺序表的主要操作包括:

  • 初始化:创建一个空的顺序表。
  • 插入:在顺序表的指定位置插入一个新的数据元素。
  • 删除:从顺序表中删除指定的数据元素。
  • 查找:根据特定条件在顺序表中查找数据元素。
  • 排序:对顺序表中的元素进行排序。
  • 清空:将顺序表中的所有元素删除,使其变为空表。
  • 遍历:按照顺序访问顺序表中的每一个元素。

顺序表的优缺点如下:

优点

  • 访问效率高:随机访问能力强,访问任意元素的时间复杂度为O(1)。
  • 存储密度高:顺序表的数据元素紧密排列,不需要额外的空间存储元素间的关系。

缺点

  • 插入和删除操作效率低:在顺序表的中间或头部插入或删除元素时,可能需要移动大量元素,时间复杂度为O(n)。
  • 固定容量:通常顺序表的容量是固定的,若存储空间不足,需要进行扩容操作,这可能会导致性能下降。

顺序表是实现其他复杂数据结构(如栈、队列等)的基础,它在算法设计和实际应用中有着广泛的使用。  (后续也会发布用顺序表来实现栈和队列)

三.顺序表的实现

        静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间大小,所以下面我们实现动态顺序表。

1.定义顺序表

        这里使用typedef函数来讲重命名为SLDateType是因为插入顺序表的数据不会是固定不变的,这么做也是为了方便后续管理和更新。

2.顺序表初始化

        将结构体里的array指向空指针,防止其变为野指针。

3.检查空间,如果满了,进行增容

        结构体里的capacity的主要功能就在这一板块实现,主要是为了检查顺序表内数据是否存满。如果满了就使用realloc函数来再次开辟空间。(这里使用了三目操作符,不懂的小伙伴可以点击三目操作符)

4.顺序表尾插

5.顺序表尾删

        此操作简单易懂,需要注意的是这里的删除并不是真正物理上删除了数据,而是逻辑上减小了size的值,使print读取不到他,来做到删除的效果。

6.顺序表头插

7.顺序表头删

8.顺序表查找

9.顺序表在pos位置插入x

10.顺序表删除pos位置的值

11.顺序表销毁

12.顺序表打印

        这里类型于数组的打印,都是需要循环来实现的。

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

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

相关文章

深入探讨:CPU问题的深度分析与调优

引言 你是否曾经遇到过这样的情况:系统运行突然变慢,用户抱怨不断,检查后发现CPU使用率居高不下?这时候,你会如何解决?本文将详细解析CPU问题的分析与调优方法,帮助你在面对类似问题时游刃有余。 案例分析:一次CPU性能瓶颈的解决过程 某知名互联网公司在一次促销活动…

Dubbo基础知识

1、什么是 Dubbo ? Dubbo是基于Java的高性能轻量级的RPC分布式服务框架,致力于提供透明化的RPC远程服务调用方案,以及SOA服务治理方案。现已成为Apache 基金会孵化项目。 2、为什么要使用Dubbo? 背景: 随着互联网的快速发展,Web应…

JAVA毕业设计147—基于Java+Springboot的手机维修管理系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringboot的手机维修管理系统(源代码数据库)147 一、系统介绍 本项目分为用户、管理员、维修员三种角色 1、用户: 注册、登录、新闻公告、售后申请、申请列…

使用Samba或NFS实现文件共享

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、SAMBA文件共享服务 1987年,微软公司和英特尔公司共同定制了SMB(Server Messages Block)服务器消息块协议&am…

板级调试小助手(2)ZYNQ自定义IP核构建属于自己的DDS外设

一、前言 在上期文章中讲述了小助手的系统结构和原理。在PYNQ的框架开发中,我们一般可以将PL端当做PS端的一个外设,通过读写寄存器的方式来操作外设的功能,就类似于在开发ARM和DSP中操作外设一样,不同时的是,我们可以通…

关于前端数据库可视化库的选择,vue3+antd+g2plot录课计划

之前:antdv 现在:g2plot https://g2plot.antv.antgroup.com/manual/introduction 录课内容:快速入门 图表示例: 选择使用比较广泛的示例类型,录课顺序如下: 1、折线图2、面积图3、柱形图4、条形图5、饼…

[Qt] Qt Creator中,新建QT文件时选择界面模版下的各选项

在Qt Creator中,新建文件时选择界面模版下的各选项具有特定的意义,这些选项主要帮助开发者根据项目需求快速生成不同类型的文件。以下是对这些选项的详细解释: 0. Qt Item Model 意义:列表模型是Qt中用于表示和操作数据的强大抽…

Ubuntu下载安装chrome浏览器

方法一:wget下载并安装 1、创建文件夹存安装包 cd /root/Downloads mkdir chrome 2、下载安装包到文件夹内 wget -c https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -P /root/Downloads/chrome 3、安装 cd chrome sudo dpkg -i go…

从0开始的STM32HAL库学习5

旋转编码计数器 修改中断代码 void EXTI0_IRQHandler(void) {/* USER CODE BEGIN EXTI0_IRQn 0 */if(__HAL_GPIO_EXTI_GET_FLAG(PB0_Pin)){if(HAL_GPIO_ReadPin(PB1_GPIO_Port, PB1_Pin)GPIO_PIN_RESET){count--;}/* USER CODE END EXTI0_IRQn 0 */HAL_GPIO_EXTI_IRQHandler…

【论文极速读】 可微分检索索引(Differential Search Index, DSI)

【论文极速读】 可微分检索索引(Differential Search Index, DSI) FesianXu 20240714 at WeChat Search Team 前言 最近从朋友处得知了DSI这个概念,所谓的可微分检索索引DSI,就是通过语言模型将检索过程中的索引和召回…

virtualbox的ubuntu默认ipv4地址为10.0.2.15的修改以及xshell和xftp的连接

virtualbox安装Ubuntu后,默认的地址为10.0.2.15 我们查看virtualbox的设置发现是NAT 学过计算机网络的应该了解NAT技术,为了安全以及缓解ip使用,我们留了部分私有ip地址。 私有IP地址网段如下: A类:1个A类网段&…

持续学习的综述: 理论、方法与应用(三:泛化分析)

前文连接:持续学习的综述: 理论、方法与应用(一) 前文连接:持续学习的综述: 理论、方法与应用(二:理论基础) 泛化分析 目前持续学习的理论研究主要是在增量任务的训练集上进行的,假…

Java面试题:MVCC

MVCC 保证事务的隔离性 排它锁: 一个事务获取了数据行的排他锁,其他事务就不能再获取该行的其他锁 MVCC: 多版本并发控制 维护一个数据的多个版本,使读写不存在冲突 具体实现依靠 隐藏字段 mysql中隐藏了三个隐藏字段 db_trx_id:最近修改事务 db_roll_ptr:指向上一个…

【Linux】Linux必备的基础指令

目录 Linux必备的基础指令一 、 什么是Linux二、 Linux常用命令2.1 ls2.2 pwd2.3 cd2.4 touch2.5 cat2.6 mkdir2.7 rm 三、 Linux重要指令3.1 cp3.2 mv3.3 tail3.4 vim3.5 grep3.6 ps3.7 netstat Linux必备的基础指令 一 、 什么是Linux 系统编程&⽹络编程 Linux⾃⾝提供…

适合创业公司使用的wordpress主题

对于创业公司来说,‌选择一个适合的WordPress主题至关重要,‌它不仅能够提升公司网站的外观和用户体验,‌还能帮助优化搜索引擎排名,‌从而吸引更多的潜在客户。‌以下是一些推荐的WordPress主题,‌特别适合创业公司使…

【vue3-命名规范以及注意事项】

使用多字组件名 使用详细的道具定义props 在提交的代码中,prop定义应该总是尽可能详细,至少指定类型。 在声明期间,道具名应该始终使用camelCase。当在in-DOM模板中使用时,props应该是串式的。单文件组件模板和JSX可以使用keba…

【leetcode】整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: …

C语言丢失精度 如何实现高精度计算

(1)int 类型举例 int :占4个字节,也就是32位,及最大值是2^32-11024*1024*1024*4-14294967295 以上说法错误,因为Int是有符号类型整数,所以最高位是符号位,及int的最大值应该是2^31…

[BJDCTF2020]EasySearch1

知识点: 1.swp泄露 2.md5碰撞 3.PHP代码审计 4.SSI代码执行漏洞 // Apache SSI 远程命令执行漏洞复现 看着像sql注入,不过注入无果,扫一下目录试试~ 发现是swp泄露. SWP文件泄露漏洞是指在使用 Vim编辑器 编辑一个文件时,Vim会在…

​前端Vue自定义签到获取积分弹框组件设计与实现

摘要 随着前端技术的不断演进,开发的复杂性日益凸显。传统的整体式开发方式在面临功能迭代和修改时,常常牵一发而动全身,导致开发效率低下和维护成本高昂。组件化开发作为一种解决方案,通过实现模块的独立开发和维护,…