数据结构与算法-线性表(上)

作者:逍遥Sean
简介:一个主修Java的Web网站\游戏服务器后端开发者
主页:https://blog.csdn.net/Ureliable
觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言!

前言

算法非常重要,它是计算机科学的核心之一。算法是一组解决问题的步骤和规则,可以帮助我们在计算机程序中完成各种任务。好的算法可以优化程序的性能,提高程序的效率,并使程序更易于理解和维护。算法也是计算机科学中一种非常基础的概念,对于计算机科学专业的学生来说,学好算法将为他们日后的学习和工作奠定非常重要的基础。

👆上面的话是别人说的
👇下面是我说的

有用没用不知道(可能潜移默化在开发中会受到这些思想影响),没事搞搞还是很有趣的😁~

本节写线性表概念以及线性表顺序存储结构的操作方法。

1 线性表简介

线性表是一种线性结构,由同一类型的数据元素构成一个有序序列。线性表中的数据元素称为元素,每个元素都有一个唯一的前驱元素和后继元素,除第一个元素外,其他元素都有一个前驱元素;除了最后一个元素,其他元素都有一个后继元素。线性表常用的实现方式有数组和链表。常见的线性表包括数组、链表、栈、队列等。线性表的应用广泛,例如在数据结构中保存序列、在数据库中保存表格数据等。

2 线性表的抽象数据类型

线性表是一种抽象数据类型,它由一组相同数据类型的元素组成,数据元素之间的关系是一对一的关系。线性表具有以下特点:

  • 具有一个头和一个尾;
  • 元素具有顺序关系,即每个元素都有唯一的前驱和后继;
  • 元素的个数有限,但可以动态地增加或删除。

线性表主要包括以下操作:

  • 初始化表:创建一个空的线性表;
  • 插入元素:向线性表中插入一个元素;
  • 删除元素:删除线性表中指定位置的元素;
  • 获取元素:获取指定位置的元素;
  • 查找元素:查找指定元素在线性表中的位置;
  • 清空表:清空线性表中的所有元素;
  • 获取表长度:获取线性表中元素的个数。

这些操作可以通过编程语言中的各种语法实现,如数组、链表等。

3 线性表的顺序存储结构

线性表的顺序存储结构指的是将线性表中的元素按照其在逻辑上的顺序依次存储在一段连续的存储空间中,因此也被称为顺序表。其基本结构是由一个一维数组和一个记录线性表元素个数的变量组成。线性表中每一个元素在数组中占用一个位置,该位置可以通过元素在线性表中的位置和数组中的起始位置计算得出。顺序表具有随机存取的特点,可以通过下标直接访问某个元素,时间复杂度为O(1)。

顺序表的操作主要包括以下几个方面:

  1. 初始化操作:创建一个空的顺序表,并指定其最大长度;
  2. 插入操作:向顺序表中某个位置插入元素;
  3. 删除操作:从顺序表中某个位置删除元素;
  4. 查找操作:按照元素值或下标查找某个元素;
  5. 修改操作:修改顺序表中某个位置的元素值;
  6. 遍历操作:依次访问顺序表中的每个元素。

4 顺序存储结构的插入和删除

线性表的顺序存储结构是指线性表中的元素按照其逻辑顺序在一段连续的存储区间中依次存储,通常用数组来实现。在此结构中,插入和删除元素的操作涉及到数组的元素移动。

插入元素
插入元素的一般情况是:在第 i 个位置插入元素。具体步骤如下:

  1. 检查插入位置是否合法。如果 i 不在 [1, length+1] 范围内,插入操作无效。
  2. 如果线性表已满,则需要进行扩容。可以新建一个更大的数组,将原来的元素复制到新数组中,再将新元素插入到新数组指定位置。如果该线性表需要频繁进行插入操作,可以预留一定的空间,避免频繁扩容。
  3. 从后往前遍历数组,将下标从 i-1 开始的所有元素向后移动一个位置,空出下标为 i 的位置。
  4. 将新元素插入到下标为 i 的位置。
  5. 将线性表长度加1。

删除元素

删除元素的一般情况是:删除第 i 个位置的元素。具体步骤如下:

  1. 检查删除位置是否合法。如果 i 不在 [1, length] 范围内,删除操作无效。
  2. 从前往后遍历数组,将下标从 i+1 开始的所有元素向前移动一个位置,覆盖下标为 i 的元素。
  3. 将线性表长度减1。

需要注意的是,删除元素时并不需要将数组中的实际元素删除,只需要将元素逻辑上删除即可(即将元素覆盖或标记为删除状态),因为在线性表的顺序存储结构中,元素的逻辑顺序和物理顺序是一致的。如果仅仅是删除元素并不影响线性表的长度,但是如果进行插入操作时,需要检查线性表是否已满,如果已满则需要进行扩容操作。

链式存储结构下节再写🤞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逍遥Sean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值