数据结构 - 线性表-上 (二) - 十安辰

数据结构 - 线性表-上 (二)

定义:

零个或者多个数据元素的有限序列

基本概念

前驱和后继

数据结构中,一组数据中的每个个体被称为“数据元素”(简称“元素”)。
对于具有“一对一”逻辑关系的数据,线性表中有准确的术语:

  • 某一元素的左侧相邻元素称为“直接前驱”,位于此元素左侧的所有元素都统称为“前驱元素”;
  • 某一元素的右侧相邻元素称为“直接后继”,位于此元素右侧的所有元素都统称为“后继元素”;


以图 1 数据中的元素 3 来说,它的直接前驱是 2 ,此元素的前驱元素有 2 个,分别是 1 和 2;同理,此元素的直接后继是 4 ,后继元素也有 2 个,分别是 4 和 5。如图 4 所示:

图 1 前驱和后继

基本特征

  1. 集合中必存在唯一的一个“第一元素”。
  2. 集合中必存在唯一的一个 “最后元素” 。
  3. 除最后一个元素之外,均有唯一的后继(后件)。
  4. 除第一个元素之外,均有唯一的前驱(前件)。

线性表-顺序存储结构

线性表的顺序存储结构,指的是用一段连续的存储单元依次存储线性表的数据元素。
线性表的顺序存储结构主要是通过自定义结构体来实现
顺序顺序存储结构需要三个属性:

  • 存储空间的起始位置:数组名data
  • 线性表的最大存储容量:MAXSIZE
  • 线性表的当前长度:length

主要的操作有:

  • 查询
  • 插入
  • 删除

下面给出定义

// 定义数据类型
type ElemType int
//设置表的最大存储空间
const MAXSIZE = 30
//表的结构定义
type SqList struct {
	data   [MAXSIZE]ElemType
	length int
}

主要操作之查询

对于顺序存储结构,查询操作极为简单,此算法的时间复杂度位O(1),只需传入相应位置参数i即可
``func ``(``p ``*``SqList``) ``GetElemte``(``i ``int``) (``res ``ElemType``, ``err ``error``)
算法略

主要操作之插入

插入操作的时间复杂度为O(n)
func ``(``p ``*``SqList``) ``Insert``(``i ``int``, ``e ``*``ElemType``) ``error ``{
思路如下:

  • 如果插入位置不合理,抛出异常
  • 如果线性表长度大于数组长度,则抛出异常或者增加容量
  • 从最后一个元素开始,向前遍历到第i个位置,将它们都向后移动一个位置
  • 将要插入的元素填入位置i处
  • 将表长加1

主要操作之删除

删除操作涉及到移动元素,时间复杂度为O(n)
func ``(``p ``*``SqList``) ``DelElemte``(``i ``int``) ``error
思路如下:

  • 判断删除位置是否正确,错误则抛出异常
  • 删除元素的直接后继开始,向后遍历,每个元素依次向前移动一位
  • 删除最后一个元素
  • 将表长减1

优缺点

优点:

  • 无需为表示表中元素之间的逻辑关系而增加额外的存储空间
  • 可以快速的存取表中任一位置的元素

缺点:

  • 插入和删除操作需要移动大量的元素
  • 当线性表长度变化较大时候,难以提前确定存储空间的大小,而动态分配空间又会消耗大量计算资源
  • 造成存储空间的碎片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值