• 第3章 线性表


    在数据结构中,线性表应该是最简答的一种结构了吧。因为自己实现过List接口(MyCollectionFrameWork),因此对线性表的理解比较透彻。

    装完逼后我们继续按着书中的思路走:

    首先作者也是装了一波逼,然后引出了线性表的定义

    • 线性表:0个或多个数据元素的有限序列

    然后提出了线性表抽象数据类型的定义

    • 下面列出了线性表最基本的操作

      • 初始化操作

      • 判断线性表是否为空

      • 清空线性表

      • 获取线性表中任意一个位置的元素

      • 判断线性表是否包含指定元素

      • 在线性表的任意位置插入某一元素

      • 删除线性表中任一位置的某个元素

      • 获取线性表的元素个数

    之后又提出了线性表两种物理结构之一的顺序存储结构:

    • 定义:用一段地址连续的存储单元依次存储线性表中的元素

    • 实现:使用一维数组实现,可查看jdk中的ArrayList实现,比较简单

    • 插入和删除:书中是用了一个美女插队的故事说明,我这边就只有图了,有兴趣可以自己去看故事去。

    • 总之,线性表的顺序存储无论是线性结构还是算法实现都比较简单,相信大家看看List源码的实现都能看懂,然后也可以自己写个顺序存储的线性表。

    然而,顺序存储也存在种种缺点,如插入和删除需要移动大量元素,难以确定容量大小等,因此有了链式存储结构,书中分为单链表和双向链表分别进行阐述,这里直接以链表统称,以双链表为例,因为双链表和单链表本质一样:

    • 链表的实现关键是产生节点对象,每个节点用来存储一个元素,并使用头结点指向前一个节点,使用尾结点指向后一个节点

    • 总的来说,顺序存储是不断向数组里面添加或删除元素,而链式存储是不断产生节点对象或删除节点对象,下面说明了顺序存储和链式存储的对比:

    然后又描述了循环链表

    • 将终端尾结点的指针引用指向头结点即可实现循环链表

    最后,作者给了这样一张图,感觉挺有用的:

  • 相关阅读:
    14款经典的MySQL客户端软件
    淘宝、百度软件工程师们小调皮,各种霸气外漏
    使用Navicat for Oracle工具连接oracle出错:ORA-12737
    解析xlsx与xls--使用2012poi.jar
    LUOGU P4163 [SCOI2007]排列
    LUOGU P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
    LUOGU P1438 无聊的数列 (差分+线段树)
    LUOGU P1967 货车运输(最大生成树+树剖+线段树)
    LUOGU P3382 【模板】三分法 (三分)
    LUOGU P4027 [NOI2007]货币兑换 (斜率优化+CDQ分治)
  • 原文地址:https://www.cnblogs.com/realsoul/p/5862172.html
Copyright © 2020-2023  润新知