栈的实现

栈是一个LIFO数据结构,也就是后进去的元素先出来,栈中的元素没有任何的
相互关联,栈可以实现的操作也很简单,除了建立空栈,判断空栈外,只有对
栈顶压入元素,弹出元素,查看栈顶元素。

我们通过顺序表和链接表依次来实现一个栈的类:
通过顺序表实现:

class StackOverFlow(ValueError):
    pass

class Stack:
    maxElem = 9
    # 指定栈最大能存储的元素数量
    # 注意一点是我们在这里利用python数组实现的栈结构,所以栈
    # 是不会被填满的,在这里添加一个maxElem类属性只是假设有一个
    # 栈有一个最大值
    def __init__(self):
        self._elem = []
        
    def is_empty(self):
        if not self._elem:
            return True
        return False
    
    def push(self, elem):
        if len(self._elem) == Stack.maxElem:
            print("栈已满,无法加入")
            raise StackOverFlow
        self._elem.append(elem)
        
    def pop(self):
        if len(self._elem) == 0:
            raise StackOverFlow("栈为空,干嘛删")
        return self._elem.pop()
    
    def get_top(self):
        if len(self._elem) == 0:
            raise StackOverFlow("栈为空,无法拿")
        return self._elem[-1]

通过链接表实现:

class StackOverFlow(ValueError):
    pass

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

class Stack:
    def __init__(self):
        self._head = None

    def is_empty(self):
        return self._head == None

    def push(self, elem):
        new_node = Node(elem, self._head)
        self._head = new_node

    def pop(self):
        if self._head == None:
            raise StackOverFlow("栈为空")
        elem = self._head.elem
        self._head = self._head.next
        return elem

    def top(self):
        if self._head == None:
            raise StackOverFlow("栈为空")
        return self._head.elem
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值