python实现列表栈和链表栈

本文介绍了如何使用Python实现两种栈数据结构:列表栈和链表栈。列表栈直接利用Python内置的列表功能,而链表栈则通过创建节点类来实现。文中展示了两个类的定义,包括插入(push)、删除(pop)、检查是否为空(empty)等基本操作,并提供了查看栈顶元素(peek)的方法。通过这两种方式,读者可以更好地理解栈的内部工作原理和Python中数据结构的应用。
摘要由CSDN通过智能技术生成

python实现列表栈类和链表栈类

列表栈:

列表栈的实现很简单,仅需要直接利用列表的内置函数即可。

class Stack_St:
    '''顺序表栈'''
    def __init__(self, max_size):
        self.List = []
        self.max_size = max_size
    def push(self, element):
        if self.full() == 0:
            self.List.append(element)
            return True
        else:
            return False
    def pop(self):
        if self.empty() == 0:
            self.List.pop(self)
            return True
        else:
            return False 
    def full(self):
        if len(self.List) == self.max_size:
            return True
        else:
            return False
    def empty(self):
        if len(self.List) == 0:
            return True
        else:
            return False
    def find(self, element):
        try:
            index = self.List.index(element)
            return index
        except:
            return -1
    def peek(self):
        if self.empty():
            return None
        else:
            return self.List[-1]

链表栈:

实现链表栈的时候,我们还要新建一个结点类。
插入元素的时候,我们选择用尾部插入法。

class Node:
    def __init__(self, value, next = None):
        self.value = value
        self.next = next

class Stack_Ll:
    '''链表栈'''
    def __init__(self):
        self.head = Node(None)
        self.rearNode = self.head
        self.size = 0
    def push(self,value):
        newNode = Node(value)
        self.rearNode.next = newNode
        self.rearNode = newNode
        self.size += 1
    def pop(self):
        if self.empty():
            return False
        else: 
            tempNode = self.head
            while tempNode.next != self.rearNode:
                tempNode = tempNode.next
            tempNode.next = None
            self.rearNode = tempNode
            self.size -= 1
    def empty(self):
        if self.head.next:
            return False
        else:
            return True 
    def peek(self):
        if self.empty():
            return False
        else:
            return self.rearNode.value
    def __str__(self):
        output = []
        p = self.head
        while p.next:
            p = p.next
            output.append(str(p.value))
        return ",".join(output)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值