python实现链表的删除_学好python拿高薪系列二(2):数据结构之链表一

大家好,上一期我们分享了顺序表有关部分的内容,那么在这一期我们将分享的是python中链表这种数据结构的内容。

本文目录

1、链表基本知识引入

2、单链表

3、单链表与顺序表的对比

f3f5e923c3f7c7f9b488d8ebc5e4f9af.png

链表引入

  • 为什么引入链表

外部原因来说,顺序表每次申请时需要一块连续的存储空间,而在扩充时需要进行数据的搬迁,地址管理用起来不灵活。

而对链表本身而言,使用链表的结构能够充分利用计算机内存空间,实现灵活的内存动态管理,特别是链表在容量扩充上非常方便,只需要改变指针指向即可。

  • 链表的定义

链表(Linked list)是一种常见的数据结构,是一种线性表,但不像顺序表一样在连续地址存放数据,而是在每一个节点(数据存储单元,分为数据域和下一地址域)里存放下一个节点的位置信息(地址)。

77c795c11a1933def268e2357ddf2b8c.png

单链表

单链表是最简单的一种链表形式,每一个节点包含数据域和下一地址域。并且这个节点指向链表中的下一个节点,最后一个节点的下一地址域指向空值。

  • 识记:

1、表元素elem用来存放具体的数据

2、下一地址域next用来存放下一个节点的位置信息(python中的标识)

3、变量p指向头结点的位置,从此节点出发能找到链表中任意节点

  • 单链表的操作

1、is_empty()判断是否为空

2、length()求链表长度

3、travel()遍历整个链表

4、add(item)链表头部添加元素

5、append(item)链表尾部添加元素

6、insert(index,item)指定位置添加元素

7、remove(item)删除节点

8、search(item)查找节点是否存在

272852277ab5bc46027fef1497556a9d.png
  • 代码实现
#链表的节点实现,用一个类对象表示一个节点class SingleNode(object): #单链表节点信息 def __init__(self,item): self.item=item#数据域 self.next=None#下一地址域#声明一个单链表类,用于封装单链表的各种方法class SingleLinkedList(object): #初始化 def __init__(self,node=None): self._head=None#定义头节点 #判断链表是否为空 def is_empty(self): return self._head==None #判断链表的长度 def length(self): curl = self._head # 定义游标指针 count = 0 while curl != None: count += 1 curl = curl.next return count #遍历单链表 def travel(self): curl=self._head#定义游标指针 count=0 while curl!=None: print(curl.item,end=" ") count+=1 curl=curl.next #链表头部添加元素,头插法 def add(self,item): node=SingleNode(item) node.next=self._head self._head=node #链表尾部添加元素 def append(self,item): #new一个节点 node=SingleNode(item) #链表为空或不为空,单独判断 if self.is_empty(): self._head=node return else: curl=self._head while curl.next!=None: curl=curl.next curl.next=node #指定位置添加元素,范围应该是从0到链表长度+1 def insert(self,index,item): #根据要插入的位置进行不同的插入操作 if index<=1: self.add(item) elif index>(self.length()): self.append(item) else: pre=self._head count=1 while count
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值