# -*- coding: utf-8 -*-
# @File : data_structure.py
# @Date : 2021-08-11-9:10
# @Author : love_in_fall
# @文件修改历史
# >> 编辑时间
# >> 修改内容
class Stack(object):
'''
model:栈的功能:先进先出FIFO,后进先出LIFO.
StackLong:当等于0时,意思是不指定栈的长度
关于栈生长方向:栈统一向上生长.最新的元素永远是位于第 0的位置
关于栈的大小:当栈的长度大于设定长度时,就会将之前的数据按顺序移出去,
该项不受 model 参数影响。
'''
def __init__(self,model: str='FIFO',StackLong: int=0):
self.items = []
self.model = model
self.StackLong = StackLong
def isEmpty(self):
return self.items == []
def push(self, item): # 将一个新项添加到栈的顶部 [栈被修改]
self.items.insert(0,item)
if not self.StackLong == 0:
self.items = self.items[:self.StackLong]
def pop(self): # 返回栈顶 顶部项,并且要删除它 [栈被修改]
if self.model=='FIFO': # 先进先弹出
return self.items.pop()
elif self.model=='LIFO':# 后进先出
self.items.reverse()
value_pop = self.items.pop()
self.items.reverse()
return value_pop
def peek(self): # 返回栈顶 顶部项,但不会删除它 [栈不会被修改]
if self.model == 'FIFO':
return self.items[len(self.items) - 1]
elif self.model == 'LIFO': # 后进先出
return self.items[0]
def size(self):
return len(self.items)
if __name__ == '__main__':
stack_1 = Stack(model='FIFO',StackLong=4)
stack_1.push('xx')
stack_1.push('52')
stack_1.push([12, 32])
stack_1.push(99)
print('01:',stack_1.items)
stack_1.push(999)
print('02:',stack_1.items)
print('栈顶1',stack_1.peek()) # 返回栈顶的项
print('03',stack_1.items)
print('栈顶2',stack_1.pop()) # 弹出顶项
print('04',stack_1.items)
|