02线性表

线性表

线性表的定义——零个或多个数据元素的有限序列

线性表特点:

  • 数据元素之间是有序
  • 数据元素之间是一对一的关系
  • 有限性(线性表的数据元素个数是有限的)

注意:零个数据元素的有限序列被称为空表

线性表的数据元素个数是有限的

线性表的抽象数据类型

ADT 线性表(List)
Data
    1、线性表数据元素是一个集合{a_1,a_2,a_3....,a_n},数据元素的类型     DataType(int,char,自定义)
    2、前驱——除了第一个元素a_1之外,每个元素有且只有一个直接的前驱元素
    3、后继——除了最后a_n之外,每个元素有且只有一个直接的后继元素
    4、每个数据元素之间的关系是一对一的关系
Operation
    InitList(*List)     创建一个空的线性表List
    InsertElement(*List, index,elem)    在线性表List的           index下标处插入元素elem    
    DeleteElement(*List,index,*elem)    删除线性表List中第i个元    素,并返回删除元素的指针e
    GetLenght(*List)    返回线性表的元素个数
    IsEmpty(*List)  检查是否是空的线性表
    ClearList(*List)    清除线性表
    GetElement(*List,index,*elem)   返回该下标index对应的元素
endADT

img点击并拖拽以移动

线性表的顺序存储

线性表的顺序存储结构,是指用一段地址连续的存储单元依次存储线性表的数据元素

1、我们需要定义线性表的最大存储空间
    # define MAX_SIZE 255
2、线性表里需要有统一类型的元素集合
    typedef int ElemType;起别名 int————ElemType
   例如:
   typedef struct{
       int id;
       char *name;
   }ElementType;
3、定义顺序表结构
    typedef struct{
        ElementType datas[MAX_SIZE];
        int length;
    }

描述线性表的顺序存储结构需要三个属性:

  1. 存储空间的起始位置:数组datas的存储位置
  2. 线性表的最大存储容量:数组长度MAX_SIZE
  3. 线性表的当前长度:length

地址计算方法: 下标是从零开始的

第n个元素的内存地址 = 数组的内存地址 + 第n个元素的下标n-1

访问顺序表的元素:
    可用  *(datas + 0) 访问第一个元素
    一直到 *(datas + n-1)最后一个元素

position    位置,从1开始
index       下标,从0开始

顺序结构的插入与删除

顺序表插入数据元素

将数据元素a插入到顺序表(a_1,a_2,a_3,...,a_i,a_i+1,..,a_n)下标为i的位置

下标为i及下标为i以后的所有数据元素后移

下标i的位置放入数据元素a

注意:

  • 插入元素后的顺序表长度变为n+1;
  • 插入元素后,最后一个元素的下标变为n;
  • C语言数组实现时,顺序表长度不能超过它的最大长度;

顺序表删除数据

将第i个数据元素从顺序表(a_1,a_2,....,a_i,a_i+1,..,a_n)中删除

  • 找到第i个位置的数据元素

  • 将第i个数据元素以后的数据元素依次覆盖前一个位置

  • 顺序表当前长度减1

线性表顺序存储结构的优点:

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

线性表顺序存储结构的缺点:

  1. 插入和删除操作需要移动大量的元素
  2. 当线性表长度变化较大时,难以确定存储空间的容量
  3. 造成空间的“碎片”
posted @   小白学安全  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示