算法|数据结构学习笔记之线性表(02)( 二 )


  • 否则 , 返回数组下标i的值

  • (4)顺序表查找
    【算法描述】
    • 查找指定元素e , 返回下标
    • 遍历数组 , 判断当前元素是否等于查找的元素e
    • 若找到 , 则返回下标+1 , 否则 , 返回-1

    这里查找 , 有一个新的概念:平均查找长度(ASL:Average Search Length) 。
    (5)顺序表插入
    【算法描述】
    • 在第i个位置 , 插入元素e
    • 首先判断插入下标是否合理 , 不合理 , 返回错误信息
    • 合理 , 则判断数组是否已满 , 已满 , 则返回错误信息
    • 采用 realloc 函数重新分配内存空间
    • 未满 , 则将下标i之后的数组元素 , 向后移动一位 , 直到第i为 , 设置i的值为e
    • 表长加1

    (6)顺序表删除
    【算法描述】
    • 判断删除下标i是否合理 , 不合理 , 则返回错误信息
    • 合理 , 则将i+1之后的元素 , 向前移动一位
    • 表长减1

    1.4、线性表的链式表示(1)链表定义
    线性表的链式存储 , 用一组任意的存储单元来存储线性表中的数据元素 , 这组存储单元可以是连续的 , 也可以是不连续的 。
    只需要记住下一个元素的地址即可 。
    • 链表中的每个数据元素及其下一个元素的地址称为结点(node)
    • 结点包含两部分:数据域、指针域
    • 数据域:存储数据元素的值
    • 指针域:存储下一个节点的元素地址
    • 链表的这种存储特性 , 称为:顺序存储 。
    和前面说到的顺序表的存储特性:随机存储 , 是有区别的 。 顺序表 , 只需要直到索引下标即可找到数据元素 , 而链表 , 需要从头结点开始 , 按照顺序遍历 , 直到找到数据元素结束 。
    (2)链表分类
    线性表的链式表示 , 可以分为如下几种:
    • 单链表
    • 循环链表
    • 双向链表
    • 双向循环链表
    • 二叉链表
    • 十字链表
    • 邻接表
    • 邻接多重表
    1.5、单链表实现(1)单链表定义
    采用C语言中的结构体 , 定义单链表 。
    • 一个数据域
    • 一个指针域

    2)单链表初始化
    【算法描述】
    • 生成一个新节点作为头结点 , 然后L指向头结点
    • 然后它的指针域设置为NULL , 表示空链表

    (3)取值
    【算法描述】
    • 查找第i个元素
    • 从头开始遍历链表 , 采用j作为计数
    • 当j<i , 并且当前节点不为NULL , 则循环继续
    • 否则 , 返回错误信息

    (4)查找
    【算法描述】
    • 查找指定元素 , 返回链表结点
    • 未查找到 , 则返回null

    (5)插入
    【算法描述】
    • 在第i个位置结点之后插入元素

    (6)删除
    【算法描述】
    • 删除第i个结点元素

    (7)(头插法)创建单链表
    【算法描述】