数据结构与算法笔记(8) -栈

栈是一种简单的缓冲存储结构,它只支持数据项的存储和访问,不支持数据项之间的任何关系。
栈具有后进先出的特性。

栈的实现:
基于栈的特性,实现一个栈可以基于两种结构,线性表和列表

1. 异常类
class StackUnderflow(ValueError):
    pass
2. 基于线性表实现栈
class Stack(object):

    def __init__(self):
        self._elems = []

    def is_empty(self):
        return self._elems == []

    def top(self):
        if self.is_empty():
            raise StackUnderflow('in Stack.top()')
        return self._elems[-1]

    def push(self, elem):
        self._elems.append(elem)

    def pop(self):
        if self.is_empty():
            raise StackUnderflow('in Stack.pop()')
        return self._elem.pop()
2. 基于链表实现栈

在Python中,list结构是基于动态顺序表实现的,因此不会出现栈满的情况,但是,list需要一块连续的存储空间(1. 空间代价),当存储空间满时需要更换更大的空间,这个扩容的操作代价很高(2. 时间代价);因此,对于这两个问题,使用链表可以很好的解决。

class Node(object):

    def __init__(self, elem, next_=None):
        self.elem = elem
        self.next = next_


class Stack(object):
    
    def __init__(self):
        self.top = None

    def is_empty(self):
        return self.top is None

    def top(self):
        if self.is_empty():
            raise StackUnderflow('in Stack.top()')
        return self.top.elem

    def push(self, elem):
        self.top = Node(elem, self.top)
    
    def pop(self):
        if self.is_empty():
            raise StackUnderflow('in Stack.pop()')
        p = self.top
        self.top = p.next
        return p.elem
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值