《数据结构与算法-Python语言描述》读书笔记(3)第3章线性表(关键词:数据结构/算法/Python/线性表/顺序表)

本文是《数据结构与算法-Python语言描述》第三章的读书笔记,重点介绍了线性表的概念、顺序表和链接表的实现。其中详细探讨了线性表的操作,如创建、访问、插入和删除元素,并通过Python实现单链表,包括表头变量、结点定义、链表操作的复杂度和不同链表的变形。还涉及到线性表在实际问题中的应用,如Josephus问题的解决方法。
摘要由CSDN通过智能技术生成

本章的预备知识(读者自己补充的):

(1) 谓词(在本章中,“谓词pred”(即predicate)首次出现在“3.3 链接表 - 3.3.2 单链表 - 扫描、定位和遍历 - 按元素定位”中。)
解释

离散数学都会讲的一个词语,简单来说就是代入某个论域内的变量就可以产生真或假结果的表达式。比如 x=y+3就是一个谓词,代入(4,1)就是True,代入(0,0)就是False。

参考文献:

如何理解计算机科学相关里出现的“谓词”?

我的理解:

判定某个表达式为True还是False。

金山词霸的释义

vt.断言,断定; 宣布,宣讲; 使基于;
vi.断言,断定;
n.谓语; 述语;
adj.谓语的; 述语的;

(2)结点(在本章中,“结点”首次出现在“3.3 链接表 - 3.3.2 单链表 - 【P79 - P80】”中,我认为是重点,至少在本章是单链表的基础,理解它很重要!!!这里篇幅有限,建议去阅读原文。)
解释

单链表单向链接表)的结点是一个二元组,其表元素域elem保存着作为表元素的数据项(或者数据项的关联信息),链接域next里保存同一个表里的下一个结点的标识(这里我存在一点疑问,“标识”是不是指“链接”、“内存地址”)。
这里写图片描述

(3)表头变量、表头指针、head(在本章中,“表头变量、表头指针”首次出现在“3.3 链接表 - 3.3.2 单链表 - P80 【也就是说。。。】”中,据我的阅读,至少本章用的是head来代表表头变量。)
我的理解:

表头变量是一个变量,这个变量保存着这个表的首结点的引用(或称为链接)。

(4)rear
金山词霸释义:

n 后部;后面;后尾

第3章 线性表

这里写图片描述

3.1 线性表的概念和表抽象数据类型

3.1.1 表的概念和性质

这里写图片描述

3.1.2 表抽象数据类型

读者笔记:这一节讲了线性表实现者使用者需要从各自角度需要考虑的问题使用者角度考虑一个线性表数据结构应该提供哪些操作请到书上仔细阅读!

线性表的操作

这里写图片描述

表抽象数据类型

(读者笔记:这一小节我就不截图了,书上仔细看,也值得仔细看。)
这里写图片描述

3.1.3 线性表的实现:基本考虑

(读者笔记:这一小节提到了线性表的两种基本实现模型,详情看书上,值得仔细阅读!!)
这里写图片描述

3.2 顺序表的实现

这里写图片描述

3.2.1 基本实现方式

(读者笔记:本小结涉及了“引用”、“链接”、“间接访问”、“索引”、“存储区”等概念,建议仔细阅读,我就不详细截图了。)
这里写图片描述

3.2.2 顺序表基本操作的实现
创建和访问操作

(读者笔记:这一小节内容有点多,我就不截图了。详细看书上吧。)
这里写图片描述
创建空表:
简单判断操作:
访问给定下表i的元素:
遍历操作:
查找给定元素d的(第一次出现的)位置:
查找给定元素d在位置k之后的第一次出现的位置:

最后几个操作都需要检查表元素的内容,属于基于内容的检索。数据存储和检索是一切计算和信息处理的基础。

总结一下:不修改表结构的操作只有两种模式,或者是直接访问,或者是基于一个整型变量,按下标循环并检查和处理。

变动操作:加入元素

这里写图片描述
这里写图片描述
尾端加入新的数据项:
新数据存入元素存储区的第i个单元:

变动操作:删除元素

这里写图片描述
这里写图片描述
尾端删除元素:
删除位置i的数据:
基于条件的删除:

顺序表及其操作的性质

各种访问操作,如果其执行中不需要扫描表内容全部一部分,其时间复杂度都是O(1)需要扫描表内容操作时间复杂度都是O(n)
表的顺序实现(顺序表)的总结:
这里写图片描述

3.2.3 顺序表的结构
两种基本实现方式

(读者笔记:这一小节仅截图“分离式结构”,详细见书上。)
这里写图片描述

替换元素存储区

分离式实现的最大优点是带来了一种新的可能:可以在标识不变的情况下,为表对象换一块元素存储区。也就是说,还是原来的表,其内容可以不变,但是容量改变了。
这里写图片描述
如果采用分离式技术实现,可以在不改变对象的情况下换一块*更大的元素存储区*,使加入元素操作可以正常完成。操作过程如下:
1)另外申请一块更大元素存储区
2)把表中已有的元素复制到新存储区
3)用新的元素存储区替换原来的元素存储区改变表对象的元素区链接)。(这里参见图3.6b,读者补充,)
4)实际加入新元素

后端插入和存储区扩充

(读者补充:这一小节我没有仔细读,感觉不是很重要,但建议下次仔细阅读。)

3.2.4 Python的list
list的基本实现技术

这里写图片描述

一些主要操作的性质

这里写图片描述

几个操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值