【数据结构】python实现简单的链表栈(Linkedlist Stack)

python实现简单的链表栈(Linkedlist Stack)

最近学校在学数据结构,我整理了几篇文章讲一讲相关的实践。本文基于python实现简单的链表物理结构,并实现一个栈逻辑结构。

代码结构

首先,一个简单的链表需要由两个类组成。分别是节点类(class Node)和链表类(class LinkedList).因为本文实现的是栈结构,我们将链表类起名为(class LStack).

节点类

节点类代码非常简单,一个节点存储一个数据(elm)和一个指向下一个节点的指针(nxt):

class Node:
    def __init__(self, elm, nxt):
        self.elm = elm
        self.nxt = nxt

链表类

链表类控制节点类的实例的生成和销毁。链表类的实例包含若干个节点类的实例。在链表类中我们实现了若干python接口来方便计算操作。
其中__add__和__iadd__实现了和其他可遍历对象的加法联动(比如数组list)。
自定义的pop和push方法实现了逻辑栈的基本操作,push往栈顶添加元素,pop将栈顶的元素移出。还有其他的一些基本的自定义方法用于查找和反转链表。
值得注意的是,这个链表类的所有返回查找值的操作(例如stack_instance[i]),返回的都是某一个节点存储的数值,而不是节点的内存地址。

class LStack:
    def __init__(self, s=None):
        self.head = None
        if s is not None:
            for x in s:
                self.push(x)
            self.reverse()

    def __getitem__(self, i):
        if i < 0:
            i = len(self) + i
        if i < 0 or i >= len(self):
            raise IndexError
        for j, x in enumerate(self):
            if i == j:
                return x

    def __setitem__(self,i,x):
        if i < 0:
            i = len(self) + i
        if i < 0 or i >= len(self):<
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值