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):<