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

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.线性表的链式存储结构
    定义:单链表
    在这里插入图片描述增加头节点的单链表:
    在这里插入图片描述
    头节点和头指针的异同:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值