2020-07-09更新

细细琢磨了一下以前的这篇文章,感觉这样不太能体现链表的精髓,要想真的想深入研究链表这种数据结构,在没有指针的语言中,还是应该用静态链表来模拟真正链表比较好。

对于静态链表,个人认为要先想想下面几点:

静态链表的存储结构是什么?

没有指针,怎么来模拟指针?怎么模拟C语言中地址的概念

怎么去模拟内存管理?

OK, 先来聊聊第1、2点,静态链表在没有指针的语言中用数组来实现,用一组地址连续的存储单元来存放数据(第一次了解到这里,我也是懵圈的,数组???这不就是顺序表吗,怎么和链表扯上关系?),有意思的就来了,我们就用数组的下标来代替地址吧!!!对,要学会静态链表,你就先要把数组看做一个内存空间,数组下标就是这个空间的地址。C有指针就相当于可以在整个内存空间的海洋里遨游,而静态链表就是只能在自己搭建的舞台上起舞。

当你认识到数组来模拟一片内存空间,下标就是地址的时候,我们就要来解决实际问题了,也就是怎么模拟内存的管理?

一、肯定是定义节点item类,其中data保存数据,next保存下一个节点的下标(也可以理解为下一个的位置或者地址),静态链表类SLinkList,在初始化函数__init__里创建一个size+1大小的列表link(因为我的设计是将0节点设为头结点,不保存数据,用来记录链表长度length,链表尾部rear等信息)。

现在内存空间创建好了,那么问题又来了,我们怎么知道哪些节点是链表里面的,哪些节点是空闲的?在这里我想到了一个比较巧妙的方法,不用另外创建一个数组去存储空闲空间信息。因为初始化的时候所有的空间都是空闲的,我们可以先将所有的空闲节点连起来(也就是第i个节点保存第i+1个节点的位置),然后头结点用一个变量space指向第一个空闲空间的位置,这样我们就保持space永远指向一个空闲节点的位置,即可随时知道那个位置是空闲的了。代码如下,通过代码可以比较直观的理解我的意思。

1 classitem (object):2 def __init__(self, data):3 self.data =data4 self.next =None5

6 classSLinkList(object):7 '''

8 静态链表,就是用数组来模拟链表,那么数组的下标就当做是节点的地址,9 这个概念是静态链表的核心10 '''

11 def __init__(self, size = 100):12 '''

13 初始化主要是用于初始化链表的大小,而非创建链表14 '''

15 self.link = [item(None) for i in range(size + 1)] #申请size大小的节点空间[0,1,2,...,size],其中下标0的节点作为头结点

16 self.link[0].next = None #表示空表

17 self.link[0].space = 1 #指向第一个节点,因为初始化时第一个节点为空闲节点

18

19 i = 1

20 while i

<

<

<

<

<

<

<

<

<

<

<

<

python链表_python数据结构之链表(一)相关推荐

  1. python链表的创建_python数据结构之链表的实例讲解

    在程序中,经常需要将组(通常是同为某个类型的)数据元素作为整体 管理和使,需要创建这种元素组,变量记录它们,传进传出函数等. 组数据中包含的元素个数可能发变化(可以增加或删除元素). 对于这种需求,最 ...

  2. python链表值讲解_python数据结构之链表的实例讲解

    在程序中,经常需要将⼀组(通常是同为某个类型的)数据元素作为整体 管理和使⽤,需要创建这种元素组,⽤变量记录它们,传进传出函数等. ⼀组数据中包含的元素个数可能发⽣变化(可以增加或删除元素). 对于这 ...

  3. python链表值讲解_python数据结构之链表详解

    python数据结构之链表详解 数据结构是计算机科学必须掌握的一门学问,之前很多的教材都是用C语言实现链表,因为c有指针,可以很方便的控制内存,很方便就实现链表,其他的语言,则没那么方便,有很多都是用 ...

  4. c语言单链表功能,[数据结构]单链表(C语言)的各种功能

    06-03阅读200,000 + 链表是一种常见的基本数据结构,在此充分利用了结构指针. 链表可以动态存储和分配,即链表是一个功能非常强大的数组. 他可以在节点中定义多种数据类型,并可以根据需要随意添 ...

  5. java城市链表_数据结构城市链表 1. 城市链表 [问题描述]将若干城市的信息 联合开发网 - pudn.com...

    数据结构城市链表 所属分类:文章/文档 开发工具:Java 文件大小:174KB 下载次数:7 上传日期:2017-12-18 18:37:53 上 传 者:叁佰 说明:  1. 城市链表 [问题描述 ...

  6. 【单向链表】数据结构——单向链表的介绍与代码实现笔记

    从今天开始将修炼数据结构专栏,将持续更新,分模块学习. 数据结构--单向链表 一.数据结构 1.什么是数据结构? 2.逻辑结构和物理结构 二.链表--线性结构 1.首先介绍下链表和数组的区别 2.链表 ...

  7. C++学习 链表,数据结构,链表读取,打印,文件输入

    链表 链表是一种很常见的数据结构,通过对链表的相关操作,可以了解: 指针的作用, 函数的传参规则, 读取文本和写入文本. 一.引入库和函数 代码如下(示例): #include<iostream ...

  8. python数据结构之链表_Python数据结构之翻转链表

    翻转一个链表 样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 一种比较简单的方法是用"摘除法".就是 ...

  9. python列表是顺序表还是链表_Python数据结构与算法(链表使用详解)

    链表 单向链表 p是头节点,指向第一个值,最后一个是伪节点,因为不指向地址. 表元素域elem用来存放具体的数据 链接域next用来存放下一个节点的位置(python中的标识) 变量p指向链表的头节点 ...

最新文章

  1. Error:Execution failed for task ':app:dexDebug'. com.android.ide.common.process.ProcessException
  2. or函数python_Python numpy.bitwise_or函数方法的使用
  3. Centos换源 加快软件安装速度 2021-03-17
  4. 01背包及其变种(物品无限背包、恰好装满背包)
  5. 美团点评Kubernetes集群管理实践
  6. git获取管理员权限 windows,windows下git怎么管理权限
  7. SpringCloud Sentinel 使用restTemplate的两种配置介绍
  8. 做春节海报没有思路?传统节日年味十足,PSD分层模板,给你灵感!
  9. LeetCode刷题——11. 盛最多水的容器
  10. 编译onnx-tensorrt产生libnvonnxparser.so
  11. ZYNQ使用W25Q256问题笔记
  12. 节奏大师-触动脚本(源码)
  13. 蓝桥杯——鲁卡斯队列
  14. 政策热市场冷 中国新能源汽车遇尴尬
  15. 图片转成pdf格式怎么转?三个好用的方法教给你
  16. 音频焦点(AudioFocus)应用与源码解析
  17. 同济大学软件学院万院长谈择业(转载)
  18. Spark基础学习笔记06:搭建Spark On YARN集群
  19. 软件行业考哪些证书可以拿到高薪,含金量比较高?
  20. 开发者 发展 8 效率 web服务 如何学习

热门文章

  1. 助推国产基础软硬件建设,巨杉数据库与湘江鲲鹏完成产品兼容认证
  2. 四款常用浏览器比较、简介
  3. 新零售时代线上线下的变革
  4. 美国TIKTOK小店申请条件
  5. 3D点云系列(一)点云介绍
  6. 2022年全球半导体行业10大技术趋势
  7. 从线性分类器到卷积神经网络
  8. PyTorch实现 | 车牌OCR识别,《PyTorch深度学习之目标检测》
  9. 新病毒或已潜伏电脑 同样源自美国武器库
  10. 【HDOJ】2155 小黑的镇魂曲