栈是一种运算受限的线性表,仅允许在一段进行元素的插入和删除操作,最后入栈的元素最先出栈,最先入栈的元素最后出栈,即 “先入后出”(FILO)或 “后入先出”(LIFO)。
自定义栈类。
class Stack(object):
def __init__(self, maxsize=100): # 初始化空栈
self.items = []
self._size = maxsize
self._cnt = 0 # 计数器
def isfull(self): # 判断是否为满
return self._cnt == self._size
def isempty(self): # 判断是否为空
return self.items == []
def setsize(self, size):
if size < self._cnt:
print("修改后大小小于原来大小。")
return
else:
self._size = size
def push(self, item): # 入栈
if self._cnt < self._size:
self.items.append(item)
self._cnt += 1
else:
print("栈已满,无法入栈。")
def pop(self): # 出栈
if Stack.isempty(self):
print("栈已空,无法出栈。")
else:
self._cnt -= 1
return self.items.pop()
def peek(self): # 查看栈顶元素
return self.items[len(self.items) - 1]
def size(self): # 查看当前栈的大小
return self._cnt
def clear(self): # 清空栈
self.items = []
self._cnt = 0
def __del__(self): # 析构方法,释放列表空间
del self._cnt
# 当前对象的字符串表示,使用print()时会调用,此法给人阅读
def __str__(self):
return 'Stack_' + str(self.items)
将代码保存为stackDfg.py文件
可用下面代码来使用自定义的栈类。
from stackDfg import Stack
s = Stack()
s.push(5)
s.push(8)
s.push('a')
print(s)
s.pop()
print(s)
s.push('b')
s.push('c')
print(s)
s.setsize(8)
print(s)
s.setsize(3)
print(s)
s.clear()
print(s)
print(s.isempty())
print(s.isfull())
s.setsize(2)
print(s)
s.push(1)
s.push(2)
s.push(3)
print(s)
上面的代码演示了自定义栈结构的用法。