78 面向对象程序设计精彩案例——自定义栈

设计自定义栈类,模拟入栈、出栈、判断栈是否为空、判断栈是否已满以及改变栈大小的操作。

class Stack:
    # 构造方法
    def __init__(self, maxlen=10):
        self._content = []
        self._size = maxlen
        self._current = 0

    # 析构函数,释放列表控件
    def __del__(self):
        del self._content

    # 清空栈中的元素
    def clear(self):
        self._content = []
        self._current = 0

    # 测试栈是否为空
    def isEmpty(self):
        return not self._content

    # 修改栈的大小
    def setSize(self, size):
        # 不允许新的栈小于已有元素数量
        if size < self._current:
            print('new size must >=' + str(self._current))
            return
        self._size = size

    # 测试栈是否已满
    def isFull(self):
        return self._content == self._size

    # 入栈
    def push(self, v):
        if self._current < self._size:
            # 在列表尾部追加元素
            self._content.append(v)
            # 栈中元素加1
            self._current = self._current + 1
        else:
            print('stack is full')

    # 出栈
    def pop(self):
        if self._current:
            # 栈中元素个数减1
            self._current = self._current - 1
            # 弹出并返回列表尾部元素
            return self._content.pop()
        else:
            print('stack is empty')

    def __str__(self):
        return 'stack(' + str(self._content) + ', maxlen=' + str(self._size) + ')'

    # 复用 __str__ 方法的代码
    __repr__ = __str__


if __name__ == '__main__':
    s = Stack()  # 创建栈对象
    s.push(5)  # 元素入栈
    s.push(8)
    s.push('a')
    print(s.pop())
    s.push('b')
    s.push('c')
    print(s)
    s.setSize(8)  # 修改栈大小
    print(s)
    s.setSize(3)
    s.clear()  # 清空栈元素
    print(s.isEmpty())
    s.setSize(2)
    s.push(1)
    s.push(2)
    s.push(3)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我还记得那天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值