读书笔记:《大话数据结构》第三章线性表

1.线性表的定义
定义:线性表(List)是零个或者多个数据元素的有限序列。
关键点:

  1. 序列意味着元素之间是有顺序的。
  2. 线性表是有限的。
  3. 在复杂的线性表中,一个数据元素可以由若干个数据项组成。
  4. 线性表中数据类型要相同。

2.线性表的抽象数据模型

3.线性表的顺序存储结构

  1. 1.定义:线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
  2. 存储方式:一般用数组来实现顺序存储结构。
  3. 数据长度和线性表长度的区别:数组长度是存放线性表存储空间的长度,存储分配后这个量一般是不变的。线性表长度是线性表数据中元素的个数,随着线性表的插入和删除而改变。 一般数组长度要大于等于当前线性表长度。
  4. 地址计算方法:
    存储器中的每个存储单元都有自己的编号,这个编号就是地址。
    LOC(ai+1)=LOC(ai)+c
    LOC(ai)=LOC(a1)+(i-1)c
    其中c为存储单元a
    i为第i个元素的存储位置。
    由此可以知道顺序存储结构进行存取操作时的时间复杂度为O(1),具有该特点的存储结构叫作随机存取结构。
    4.顺序存储结构的插入与删除
    之前说过线性表的顺序储存结构进行存取操作时的时间复杂度为O(1),而进行插入或者删除时,其时间复杂为O(n),所以其比较适合元素个数不太变化,而更多是存取数据应用。
    5.线性表顺序存储结构的优缺点
    优点:
    1.不需要表示元素之间的逻辑关系而增加额外的存储空间。
    2.可以快速存取表中任一位置的元素。
    缺点:
    1.插入和删除操作需要移动大量元素。
    2.当线性表长度变化时,难以确定存储空间的容量。
    3.造成存储空间的“碎片”。
    6.线性表的链式存储结构
    定义:单链表
    读书笔记:《大话数据结构》第三章线性表_第1张图片增加头节点的单链表:
    读书笔记:《大话数据结构》第三章线性表_第2张图片
    头节点和头指针的异同:

读书笔记:《大话数据结构》第三章线性表_第3张图片
代码描述:
读书笔记:《大话数据结构》第三章线性表_第4张图片
7.单链表的读取
获得链表第i个数据的算法思路:
1.声明一个结点p指向链表第一个结点,初始化j从1开始;
2.当j 3.若链表末尾p为空,则说明第i个元素不存在;
4.否则查找成功,返回结点p的数据。
核心思想:工作指针后移。
8.单链表的插入与删除
插入:
读书笔记:《大话数据结构》第三章线性表_第5张图片
核心代码:s–>next=p–>next; p–>next=s; 顺序不可交换。
注意点:单链表的表头和表尾的特殊情况,操作是相同的,如下图所示:
读书笔记:《大话数据结构》第三章线性表_第6张图片
删除:
读书笔记:《大话数据结构》第三章线性表_第7张图片
核心代码: p–>next=p–>next–>next,用q来代替p–>next 即是
q=p–>next; p–>next=q–>next;
结论:对于插入或者删除数据越频繁的操作,单链表的效率优势就越明显。
9.单链表的整表创建
10.单链表的整表删除
11.单链表结构与顺序存储的结构的优缺点
单链表结构和顺序存储结构的对比:
读书笔记:《大话数据结构》第三章线性表_第8张图片
12.静态链表
13.循环链表
定义:将单链表中终端结点的指针端由空指针改为指向头结点,使得整个单链表形成一个环,即该单链表首尾相连称其为单循环链表,简称循环链表(circular linked list)。
14.双向链表
定义:双向链表(double liked list)是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。
15.总结
读书笔记:《大话数据结构》第三章线性表_第9张图片
线性表的两种存储结构是其它数据结构的基础。

你可能感兴趣的:(数据结构与算法)