0
点赞
收藏
分享

微信扫一扫

对Python列表进行封装和二次开发实现自定义栈结构


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

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._current == self._size
    #入栈
    def push(self, v):
        if self._current < self._size:
            #在列表尾部追加元素
            self._content.append(v)
            #栈中元素个数加1
            self._current = self._current + 1
        else:
            print('Stack Full!')
    #出栈
    def pop(self):
        if self._content:
            #栈中元素个数减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__

将代码保存为myStack.py文件,下面的代码演示了自定义栈结构的用法。

>>> from myStack import Stack  #导入自定义栈
>>> s = Stack()    #创建栈对象
>>> s.push(5)   #元素入栈
>>> s.push(8)
>>> s.push('a')
>>> s.pop()  #元素出栈
'a'
>>> s.push('b')
>>> s.push('c')
>>> s   #查看栈对象
Stack([5, 8, 'b', 'c'], maxlen=10)
>>> s.setSize(8)   #修改栈大小
>>> s
Stack([5, 8, 'b', 'c'], maxlen=8)
>>> s.setSize(3)
new size must >=4
>>> s.clear() #清空栈元素
>>> s.isEmpty()
True
>>> s.setSize(2)
>>> s.push(1)
>>> s.push(2)
>>> s.push(3)
Stack Full!

举报

相关推荐

0 条评论