《我的第一本算法书》链表Python代码实现

《我的第一本算法书》链表的Python实现

一、链表

1、链表的基本结构

链表的每个单元都包括了存储的数据和指向下一个单元的指针

2、链表单元的代码结构

class Data(object):
    def __init__(self, content):
        self.next = None
        self.content = content

二、链表的常用方法

1、顺序访问

在这里插入图片描述

链表为分散存储,想要访问数据,只能从第1个数据开始顺着指针指向进行。

(1)初始化单元数据
    Blue = Data('Blue')
    Yellow = Data('Yellow')
    Red = Data('Red')
(2)建立单元间链接
    Blue.next = Yellow
    Yellow.next = Red
(3)建立访问方法

单向链表有尽头,不断向后访问直至指针指向空处(None)

def checkLinkList(head_data)
    tmp = head_data
    while tmp:
        print(tmp.content, end='')
        if tmp.next:
            print(' → ', end='')
        else:
            print('')
        tmp = tmp.next

执行checkLinkList(Blue)结果:

Blue → Yellow → Red

2、添加数据

将插入数据位置的前一个单元的指针指向新数据,将新数据单元的指针指向下一个单元即可。

    Green = Data('Green')
    Green.next = Yellow
    Blue.next = Green

Blue后面插入一个Green的新数据,执行checkLinkList(Blue)结果:

Blue → Green → Yellow → Red

3、删除数据

将目标单元的前一个单元的指针指向目标单元的下一个单元,即可完成删除。

    Green.next = Red

Green的指针指向Red以删除Yellow,执行checkLinkList(Blue)结果:

Blue → Green → Red

三、拓展链表

1、循环链表(环形链表)

单链表末端重新指向首端形成环形的链表。
在这里插入图片描述

Red的指针指向Blue,注意需要修改访问方法,判断回到首端则停止继续访问,否则将无限循环访问下去:

def checkLinkList(head_data):
    tmp = head_data
    while tmp:
        print(tmp.content, end='')
        if tmp.next:
            print(' → ', end='')
        else:
            print('')
        tmp = tmp.next
        
        #增加代码
        if tmp is head_data:
            print(tmp.content, end='...')
            break

Red.next = Blue后调用checkLinkList(Blue)输出结果:

Blue → Green → Red → Blue...

2、双向链表

每个数据单元都有两个指针,分别指向前一个单元和后一个单元
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值