大话数据结构--第三章 线性表

  • 线性表(List):零个或多个数据元素有限序列
    • 有限
    • 序列:有且仅有 直接前驱元素  直接后继元素
    • 数据元素:由相同类型的一个或多个数据项组成
  • 线性表的抽象数据类型(基本操作)
    • 增(ListInsert)、删(ListDelete,ClearList)、初(InitList)、查(ListEmpty,GetELem,LocateElem、ListLength)
    • 复杂操作 = 基本操作的组合
  • 线性表的存储结构
    • 顺序存储结构SqList(一维数组实现)
      • 描述SqList三个属性:起始位置,最大存储容量,当前长度
      • 插入和删除操作
      • 优劣性:
        • 优点:相比于链式存储结构,无需为元素之间的逻辑关系增加额外的存储空间;快速存取元素
        • 缺点:插入和删除操作需要移动大量元素;线性表长度变化大时,难以确定存储空间长度;造成存储空间的碎片,浪费空间资源
    • 链式存储结构LinkList
      • 描述LinkList关键词:结点、数据域、指针域(每个结点只有一个指针域是单链表)、头结点(头指针)、尾结点(null或^)
        • 头指针和头结点区别:
          • 头指针:无论链表是否为空,头指针均不为空。头指针是链表的必要元素;头指针是链表指向第一个结点的指针,如有头结点,则是指向头结点的指针
          • 头结点:头结点是为了操作的统一性而设立;头结点不一定是链表的必要元素
      • 单链表的读取、插入(malloc)和删除(free)操作
      • 单链表的整表创建(malloc)(动态生成链表):头插法和尾插法
        • srand和rand区别:srand(time(0))重置随机数种子,以当前时间为参数;rand每次生成的随机数序列不变
        • malloc和new的区别:new返回制定类型的指针且自动计算所需大小;malloc必须人工计算字节数且将返回值强制转换成实际类型指针,如(linklist)malloc(sizeof(node))
      • 单链表的整表删除(free)
    • 单链表结构和顺序存储结构的优缺点:
      • 存储分配方式:顺序存储结构用连续的存储单元;链式存储结构用任意存储单元
      • 时间性能:
        • 查找:顺序O(1);单链表O(n)
        • 插入和删除:顺序O(n);单链表O(1)
      • 空间性能:顺序需要预先分配空间;单链表无需预先分配空间,且个数不受限制
    • 循环链表
      • 单循环链表(循环链表)
        • 头指针单指针-->尾指针单指针rear(基于查找开始结点和终端结点时间复杂度改进)
      • 双向链表(基于查找上一级结点的时间复杂度)
        • 优缺点:比单向链表多了反向遍历查找功能;在插入和删除时,更改两个指针变量
        • 插入和删除更改指针变量的顺序:先搞定插入的前驱和后继,再搞定后结点的前驱,最后解决前结点的后继
    • 静态链表
      • 出现原因:对于basic等早期高级语言,没有指针,也没有对象引用机制,无法实现链表结构---->数组代替指针描述单链表,即静态链表,又称游标实现法
      • 描述静态链表关键字:数据域data、游标cur、下标
      • 注意:单链表的搜索次序
      • 静态链表优缺点:
        • 优点:相比于顺序结构,在插入和删除操作时,只需要修改游标,不需移动元素
        • 缺点:失去了顺序结构的随机存取特性;未解决连续分配表长难以确定的问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值