线性结构的存储类型

线性结构的存储类型

顺序标:顺序标就是数组,也成为向量vector、高维向量及称为张量即tensor
链表:单链表、双链表、循环链表

线性表概念

表目、文件、索引、表的长度、空表
线性表由节点表和关系表组成二元组;

  • 节点集由有限的顺序元素组成,关系则有前驱、后继关系。第一个元素称为表头,最后一个元素称为表尾,其他都是内部元素。前驱后继关系具有反对称性和传递性。
  • 元素在线性表中的位置称为下标或者是索引。
  • 元素的个数称为表长,长度为0的表就是空表,线性表易于存储和操作。
线性表按照访问方式分为三种类型:
  • 直接访问型:可以根据下标定位元素的位置。如数组向量就是直接访问的线性表,单个的记录类型也是线性结构
  • 目录索引型:例如字典还有散列表
  • 顺序访问型:必须在表中挨个查找所需元素,例如链表,为了提高检索的速度,做一些有效的索引。
    在这里插入图片描述
    数据结构由逻辑、存储和运算三个因素的不同,只要有一个有所不同,就可以看作不同的数据结构。
线性表的逻辑结构
  • 线性表的长度
  • 表头
  • 表尾
  • 当前位置
    在这里插入图片描述
    线性表的存储结构:
    顺序表:按照索引值从小到大存在一片相邻的连续区域
    紧凑结构
    在这里插入图片描述
    链表:
  • 单链表
  • 双链表
  • 循环链表
    在这里插入图片描述
    根据存储结构不同分为数组、链表
    顺序表是一个非常高效的存储结构就表达了逻辑关联,不需要额外的存储域就表达逻辑上相邻关系
    链表需要通过指针的关系来表达逻辑顺序,因此需要指针这样的额外存储空间
    另外,链表的存储效率不如顺序表
    线性表分类:
线性表

–不限制操作

–插入和删除都在同一端进行

在这里插入图片描述
按照操作可以把线性表分为普通线性表、栈、队列三种
普通的线性表,操作不受任何限制
栈的插入和删除在同一端进行
队列的插入和删除分别在两端进行
栈的先进后出的性质,在深度优先搜索、递归等算法中有很好地应用
队列的先进先出的性质,在宽度优先搜索、层次化处理算法中有很好的应用

顺序表

定义:

顺序表节点的定义基本上继承了线性表的模板,不同的是首先要定义一个数组,数组的最大长度为maxsize,数组当前元素的个数为curlen,只有在下标零到当前元素的区间中的那些数据在逻辑上是有效的

顺序表的操作:

跟线性表ADT中定义已知,主要是增删查改,定义了线性表的类模板接口以后,顺序或链式的不同实现方式,其相应的运算函数接口是一致的,因此在构造上一层应用的时候,调用的方式不需要改变,只要修改相应的头文件就可以。

顺序表中插入元素的方法

1;append是在表尾添加元素
2;insert在当前位置之前插入元素

顺序表的插入和删除操作

顺序表的插入操作还是需要保证逻辑结构和存储结构一致,是当前的待插入位置,首先要腾空,我们把相应的数据元素逐个下移,最后把待插入的元素X填入腾空的位置
在这里插入图片描述

顺序表插入的算法:

1;传入的参数是当前位置p和待插入的值value,判断一下表中是否还有存储空间;
2;如果表已经满了,则插入失败;
3;否则擦好看待插入位置p是否在表的逻辑长度范围内也就是[0, curlen]之间,如果越界,则不允许插入;
4;如果是一个有效的可插入位置,从表尾开始到待插入的位置的元素,逐个后移一位,接着把待插入的元素填入刚腾出的位置P,完成插入操作,线性表规模增加了1,返回值表示插入成功。
5;删除是插入的逆操作,为了保持逻辑和存储对应,删除当前元素知乎,从下一个元素已知到表尾逐个往上移,当前线性表的元素个数-1
在这里插入图片描述

顺序表的删除算法

1;首先传入待删除的下标位置p,检查当前的长度,如果小于等于零,那就是空表,不允许删除。
2;检查下标P是不是在[0,curlen],合理的顺序表元素范围之内,如果超出当前表的下标范围,则报告删除操作非法;
3;对于合法的下标范围的p,从当前元素一直到表尾,把后面的元素逐个往前移,表的实际长度缩短1;
4;删除后顺序表还保持了紧密的存储特性,也就是存储结构保留了顺序的逻辑顺序关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值