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

目录

一.引言        

二.顺序表概念

三.顺序表的实现

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.mzph.cn/web/45106.shtml

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

相关文章

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

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

【Java】链表的头插法和尾插法

头插法 头插法就是在已有的节点的前面插入新节点 如何实现 (1)先定义一个节点类ListNode,里面有value值和地址 public class ListNode {int value;ListNode next;public ListNode(int value){this.value value;}Overridepublic String t…

让我们一起来看看这些强大的中国汽车品牌如何勇攀巅峰!

咱们中国的汽车品牌,就是这么牛!你知道吗?他们已经悄悄崛起,一步步向着更广阔的海外市场进军了。尽管这个过程可能有点坎坷,但是“勇敢”始终是他们前行的动力,推动着他们不断向前,打造属于我们…

AGI 之 【Hugging Face】 的【文本摘要】的 [评估PEGASUS ] / [ 微调PEGASUS ] / [生成对话摘要] 的简单整理

AGI 之 【Hugging Face】 的【文本摘要】的 [评估PEGASUS ] / [ 微调PEGASUS ] / [生成对话摘要] 的简单整理 目录 AGI 之 【Hugging Face】 的【文本摘要】的 [评估PEGASUS ] / [ 微调PEGASUS ] / [生成对话摘要] 的简单整理 一、简单介绍 二、文本摘要 三、在CNN/Daily…

秋招突击——7/9——MySQL索引的使用

文章目录 引言正文B站网课索引基础创建索引如何在一个表中查看索引为字符串建立索引全文索引复合索引复合索引中的排序问题索引失效的情况使用索引进行排序覆盖索引维护索引 数据库基础——文档资料学习整理创建索引删除索引创建唯一索引索引提示复合索引聚集索引索引基数字符串…

C#基于任务的异步模式(TAP)

1、C#异步模式分类 基于任务的异步模式(TAP) 基于事件的异步模式(EAP)和异步编程模型模式(APM) 2、基于任务的异步模式(TAP) 基于任务的异步模式(TAP)用单个方…

夹子音转换器matlab

操作过程点击此处观看 上段时间补习了一下傅里叶变化的知识,突发奇想可以根据此做一款声音转换器,使用工科神器Matlab进行完成,并且开发了可操作界面如下图所示: 功能实现与描述 软件中可以实现声音的录制、回放、文件的保存与…

性能测试(2)

jmeter参数化 loadrunner Jmeter IP欺骗,也称为IP欺诈,是指通过伪装、篡改IP地址的方式,进行网络攻击或欺骗行为。这种行为可能会导致网络安全问题,包括身份盗窃、数据泄露、DDoS攻击等。为了保护自己的网络安全,用户…

MySQL-表的约束

文章目录 一、空属性二、默认值三、zerofill四、列描述五、主键删除主键追加主键复合主键根据主键快速索引 六、自增长last_insert_id() 七、唯一键八、外键class表(主表)student表(从表) 一、空属性 之前我们将表的机构&#xff…

文心一言:如何备考软考架构师

提问:软考高级:架构师指导,有哪些考点、重点考点有哪些?需要如何备考?案例分析题如何做?论文如何写? 文心一言回答1700字如下: 针对软考高级架构师的考试,以下是对考点、重点考点、备…

DiffusionModel-Transformer知识回顾

论文链接: Attention Is All You Need CNN vs RNN vs Transformer CNN(卷积神经网络) 特点: 局部连接:每个卷积神经元只与输入数据的局部区域连接,这有助于捕捉局部特征。权重共享:卷积核的权重…

运行在Linux上的程序越来越慢的排查思路

1、通过free -h 排查内存使用情况,是否内存满了 2、通过df -h 排查磁盘的使用情况,磁盘是否没有空间了 3、检查系统资源配置情况,比如使用ulimit -a检查当前会话的资源限制,如最大文件数、打开文件描述符数等,看是否…

清华计算几何-ConvexHull(凸包)-求极点InTriangle/ToLeft Test

ConvexHull(凸包) 凸包是什么 凸包是计算几何一个非常基础核心的概念。我理解的凸包就是给定一个点集合, 最外围的点的包围体就是凸包。如下所示: 极点(ExtremityPoint) 给定的点集合中, 如果一个点存在一条直线, 让其他所有点都在于该直线的同一侧, 则该点为极点。 非极点 …

JavaScript进阶(7) ----构造函数和原型对象

目录 构造函数 prototype 定义: 使用场景: constructor 使用场景: 原型proto 原型链 定义 特点 instanceof 运算符 原型继承的基本概念 在JavaScript中,构造函数和原型是面向对象编程的核心概念,它们共同构…

海康工业相机驱动

1.新建基于对话框的MFC程序,界面布局如下 2.修改控件ID,为控件绑定变量 3.创建全局变量,构造函数中初始化变量,初始化对话框界面,补齐各控件按钮响应函数 全文程序如下: // MFC_GrabimageDlg.h : 头文件 /…

【动态规划Ⅰ】斐波那契、爬楼梯、杨辉三角

动态规划—斐波那契系列 什么是动态规划斐波那契数组相关题目509. 斐波那契数 Easy1137. 第 N 个泰波那契数 Easy 杨辉三角118. 杨辉三角 Easy 爬楼梯相关题目70. 爬楼梯 Easy746. 使用最小花费爬楼梯 Easy 什么是动态规划 动态规划是一种通过将原问题分解为相对简单的子问题来…

近期几首小诗汇总-生活~卷

生活 为生活飘零,风雨都不阻 路见盲人艰,为她心点灯 贺中科大家长论坛成立十五周年 科学家园有喜贺 园外丑汉翘望中 曾一学子入我科 正育科二盼长大 憧憬也能入此家 与科学家论短长 园外翘首听高论 发现有隙入此坛 竟然也能注册成 入园浏览惶然立 此贴…

JAVA中的回溯算法解空间树,八皇后问题以及骑士游历问题超详解

1.回溯算法的概念 回溯算法顾名思义就是有回溯的算法 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法&#xff…

[线性RNN系列] Mamba: S4史诗级升级

前言 iclr24终于可以在openreview上看预印本了 这篇(可能是颠覆之作)文风一眼c re组出品;效果实在太惊艳了,实验相当完善,忍不住写一篇解读分享分享。 TL;DR (overview) Structured State-Sp…

xshell公钥免密登录

设备:一台linux系统机器,一台windows系统机器 软件:xshell 要求:公钥免密登录 一、生成公钥、私钥 1、打开shell ; 点击工具 ; 新建用户生成密钥向导 2、生成密钥参数 密钥类型:RS…