数据结构--python实现链表结构

在c++中,我们以指针的形式直接访问数据的地址,在这些较为现代的预言中,单链表结构中的一个节点,包含了一个数据项和指针值。一个特殊的空值(或nil),表示指针值是一个空链接。我们并不使用数组来构建不连续的内存,而是直接向计算机请求一个指针指向一个新的节点,这个节点来自于名为对象堆的一个内建的不连续内存区域。然后,我们在该节点中设置了指向另一个节点的指针,由此建立了到结构中的其他数据的一个链接。然而,c++中得通过一种特殊的处理或删除操作,来向其返回那些不再使用的节点。

python程序员使用对 对象的引用建立起了节点和链表结构。在Python中,任何变量都可以引用任何内容,包括None值,它意味着一个空的链接。由此。Python程序员通过定义包含两个字段的一个对象,从而定义了一个单链表节点。这两个字段是:数据项的一个引用和到另一个节点的一个引用。Python为每一个新的节点对象提供了动态分配的非连续的内存,并且当对象不再被引用程序引用的时候,会自动把内存返回给系统(垃圾收集)。


定义一个单链表节点类。

如下是一个简单的、单链表节点类的代码,代码放在模块node.py中。

"""
File: node.py
定义一个单链表节点类
"""
class Node(object):
    def __init__(self,data,next = None):
        self.data = data
        self.next = next
创建一个单链表结构,并且访问输出其内容:
"""
File: testnode.py
测试节点类。
"""
from node import Node

head = None

#创建一个单链表结构
for count in range(1,6):
    head = Node(count,head)

#输出节点内容,输出完后,单链表结构也销毁了
while head != None:
    print(head.data)  #输出:5, 4, 3, 2, 1
    head = head.next

单链表结构创建好后其结构如下图:

这里写图片描述

head为头指针,指向第一个节点对象(head为变量,是第一个节点对象的引用),最后一个节点对象的字段值next为None值。

单链表结构上的操作
1. 遍历

遍历操作需要一个临时变量,这个变量先初始化为链表结构的head指针,然后控制一个循环,如下所示:

from node import Node

head = None

#创建一个单链表结构
for count in range(1,6):
    head = Node(count,head)

probe = head
#输出节点内容,输出完后,单链表结构依然存在
while probe != None:
    print(probe.data) #输出:5, 4, 3, 2, 1
    probe = probe.next

通常,遍历一个单链表结构会访问每一个节点,并且当遇到一个空链接的时候终止。因此,值None充当负责停止这个过程的哨兵。

遍历在时间上是线性的,并且不需要额外的内存。

2. 搜索

在这个例子中,会出现两个可能的哨兵:

  • 空链接,表明不再有要检查的数据。
  • 等于目标项的一个数据项,表明一次成功的搜索。

如下是搜索一个给定项的代码:

from node import Node

head = None

#创建一个单链表结构
for count in range(1,6):
    head = Node(count,head)

probe = head
targetItem = 3 #搜索链表结构中是否存在数据项为3的节点

while probe != None and targetItem != probe.data:
    probe = probe.next

if probe != None:
    print("目标数据项t
  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值