队列可以做两端增删数据元素
队列中的数据元素遵循'先进先出'的原则,也称为FIFO结构(First In First Out)
从空队列中弹出数据和向满队列中压入数据,均视为错误
class SQueue:
# 创建空队列
def __init__(self):
self._elem = []
# 判空
def is_empty(self):
return self._elem == []
# 判满 (因使用list无固定大小来实现,故不需要判满)
# 压入数据
def push(self, data):
# 从列表头插入数据
self._elem.insert(0, data)
# 弹出数据
def pop(self):
# 需要判断队列是否为空
if self.is_empty():
raise IndexError("stack error:试图从空队列中弹出数据")
# 从列表尾移出数据
return self._elem.pop()
# 自测代码
if __name__ == "__main__":
# 创建自己的队列
myqueue = SQueue()
# 压入数据 aaa/bbb/ccc/ddd
myqueue.push('aaa')
myqueue.push('bbb')
myqueue.push('ccc')
myqueue.push('ddd')
# 弹出数据
while not myqueue.is_empty():
print(myqueue.pop())
# 空队列中获取数据
myqueue.pop()
栈限制只能在栈顶进行数据插入和删除操作
栈中数据元素遵循'后进先出'的原则,也称为FILO结构(First In Last Out)
向满栈中压入数据和从空栈中弹出数据,均视为错误
class SStack:
# 构建空栈
def __init__(self):
self._elem = []
# 判空
def is_empty(self):
return self._elem == []
# 判满 (因使用list无固定大小来实现,故不需要判满)
# 压入数据
def push(self, elem):
# 从列表尾部插入数据
self._elem.append(elem)
# 弹出数据
def pop(self):
# 需要判断栈是否为空
if self.is_empty():
raise IndexError("stack error:试图从空栈中弹出数据")
# 从列表的尾部弹出数据
return self._elem.pop()
# 自测代码
if __name__ == "__main__":
# 创建自己的栈
mystack = SStack()
# 压入数据 10/20/30/40
mystack.push(10)
mystack.push(20)
mystack.push(30)
mystack.push(40)
# 弹出所有数据
while not mystack.is_empty():
print(mystack.pop())
# 试图从空栈中弹出数据
mystack.pop()
因篇幅问题不能全部显示,请点此查看更多更全内容