- 数据结构学习笔记
- 教材:严蔚敏《数据结构》
思考结果记录与分享 有不对的地方欢迎指出和探讨
本文将类比 <工程上py的List能实现的广义表> 与 <教材上中广义表> 的存储逻辑
Ⅰ PyListObject
以下还原py底层源码List的简单存储逻辑示意
实际上 这样看还不是特别直观
让我们把宏定义内容直接搬到PyListObeject实例创建的地方
现在我们可以清楚地看到一个PyListObject里头到底存了些什么
ⅡPyListObeject & GL
这样的存储逻辑与广义表的存储又有什么联系呢?
让我们来用py的list实现一个广义表
我根据上文对源码存储逻辑的理解
画出了PyList实现广义表的存储逻辑
根据上述逻辑图 其实可以发现
PyList实现广义表的逻辑其实和书上介绍的头尾链表存储的广义表极为相似
无论是存储原子结点或是存储表结点
头尾链表存储的广义表和PyList都是存结点的地址
Ⅲ类比PyList & GL小结
• 比较不同的是 Py 工程上实现的 List 实际上更灵活 能够利用 PyObject 在结
点存储任何数据类型对象(包括 int / string / list …
全部的对象都有一个共同的基类(Py 中“万物皆对象”
• Py 利用多态来实现不同数据类型集成列表的访问