• 数据结构-线性表


    线性表

    线性表是具有相同数据类型的n(n对于等于0)个数据元素的有限序列,其中n为表长,当n=0时线性表是一个空表。若用L命名线性表,则其一般表示为
    L = ( a 1 , a 2 , … , a i , a i + 1 , … , a n ) L=\left(a_{1}, a_{2}, \ldots, a_{i}, a_{i+1}, \ldots, a_{n}\right) L=(a1,a2,,ai,ai+1,,an)
    image-20220806125430868

    InitList(&L):初始化表。构造一个空的线性表L,分配内存空间

    DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占用的内存空间

    ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e

    ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值

    LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素

    GetElem(L,i):按位查找操作。。

    其他常用操作:

    Length(L):求表长。返回线性表L的长度,即L中数据元素的个数

    PrintList(L):输出操作。按前后顺序输出线性表L的所有元素值

    Empty(L):判空操作。若L为空表,则返回true,否则返回false

    顺序表的定义

    用顺序存储的方式实现线性表

    顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现

    静态分配

    image-20220806155328492

    动态分配

    image-20220806160015447

    顺序表的特点

    1. 随机访问,即可以在O(1)时间内找到第i个元素

    2. 存储密度高,每个节点只存储数据元素

    3. 拓展容量不方便

    4. 插入、删除操作不方便,需要移动大量元素

    线性表的插入与删除

    插入

    image-20220806203219999

    优化

    image-20220806204821735

    插入操作的时间复杂度

    image-20220806205240099

    删除

    image-20220806205827295

    删除操作的时间复杂度

    image-20220806210212068

    线性表的查找

    按位查找

    image-20220807144107261

    image-20220807144301786

    按位查找的时间复杂度

    image-20220807145009220

    按值查找

    image-20220807145138384

    按值查找的时间复杂度

    image-20220807145758138

    单链表的定义

    image-20220809152356893

    单链表

    优点:不要求大片连续空间,改变容量方便

    缺点:不可随机存取,要耗费一定空间存放指针

    不带头结点的单链表

    image-20220809154059123

    image-20220809154241859

    带头结点的单链表

    image-20220809154316715

    image-20220809154453484

    单链表的插入删除

    按位序插入(带头结点)

    image-20220813144052935

    在第一个位置插入图示

    image-20220813144601102

    在中间位置插入

    image-20220813144932788

    在表尾插入

    image-20220813145030698

    按位序插入(不带头结点)

    image-20220813152440597

    指定结点的后插操作

    image-20220813153325764

    指定结点的前插操作

    image-20220813153518473

    image-20220813153638013

    按位序删除(带头结点)

    image-20220813154756178

    指定结点的删除

    image-20220813155115600

    单链表的查找

    按位查找

    image-20220813211648981

    按值查找

    image-20220813212124408

    求表的长度

    image-20220813212306720

    单链表的建立

    尾插法建立单链表

    image-20220813212608222

    image-20220813212720996

    后插操作

    image-20220813212905549

    正向建立单链表

    image-20220813214820470

    头插法建立单链表

    image-20220813214948333

    双链表

    image-20220817154330474

    双链表的初始化(带头结点)

    image-20220817154447377

    image-20220817154621849

    双链表的插入

    image-20220817154751495

    解决插入的位置是最后一个结点的情况

    image-20220817154914958

    双链表的删除

    image-20220817160752709

    双链表的遍历

    image-20220817160907280

    循环链表

    image-20220817171229275

    循环单链表

    image-20220817171817623

    循环双链表

    image-20220817172104674

    循环双链表的初始化

    image-20220817173544950

    循环双链表的插入

    image-20220817180701365

    image-20220817180822627

    双链表的删除

    image-20220817180726781

    image-20220817180843243

    静态链表

    静态链表:分配一整片连续的内存空间,各个结点集中安置

    image-20220817203054082

    用代码定义一个静态链表

    image-20220817205110928

    顺序表和链表的比较

    存储结构

    顺序表:

    优点:支持随机存取、存储密度高

    缺点:大片连续空间分配不方便,改变容量不方便

    链表:

    优点:离散的小空间分配方便,改变容量方便

    缺点:不可随机存取,存储密度低

    image-20220817225918011

  • 相关阅读:
    IDC TechScape中国数据安全发展路线图,美创两款产品获重点推荐
    GPT实战系列-搭建LangChain流程简单应用
    Flutter——最详细(AppBar)使用教程
    排序算法模板
    const的自己理解
    【Java】LinkedList模拟实现
    节点操作.
    智能运维探索(二) | 如何利用人工智能实现告警关联分析
    Spring事务
    1、SySeVR环境配置(上)
  • 原文地址:https://blog.csdn.net/weixin_42403632/article/details/126455580