栈的理解
![在这里插入图片描述](https://img-blog.csdnimg.cn/b19cb9f9592b400bba85a0e5475acdaf.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAT3V0bG9vayheX14p,size_13,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/00257d74cc02463d86b5c0b86f2a26f2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAT3V0bG9vayheX14p,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/02a9211f43064063886b1605dca62823.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAT3V0bG9vayheX14p,size_15,color_FFFFFF,t_70,g_se,x_16)
栈的实现
思路
- 以列表作为基础数据,进行封装
[ 1, 2, 3, 4 ]
列表的左侧作为栈底,列表的右端作为栈顶 - 元素从栈顶依次入栈和出栈,要注意,栈采用的是先进后出原则
代码
class Stack(object):
"""栈的封装[1, 2, 3, 4]"""
def __init__(self):
self.stack = []
def push(self, value):
"""入栈"""
self.stack.append(value)
print(f'入栈元素{value}')
def pop(self):
"""出栈"""
if self.is_empty():
raise Exception('栈为空')
item = self.stack.pop()
print(f'出栈元素{item}')
return item
def is_empty(self):
"""判断栈是否为空"""
return len(self.stack) == 0
def top(self):
"""返回栈顶元素"""
if self.is_empty():
raise Exception('栈为空')
return self.stack[-1]
def __len__(self):
"""魔术方法,len(object)自动执行的方法"""
return len(self.stack)
if __name__ == '__main__':
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print(len(stack))
stack.pop()
print(stack.is_empty())
print(stack.top())
![在这里插入图片描述](https://img-blog.csdnimg.cn/27d9c83a8ce7457e8bd9f69839735383.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAT3V0bG9vayheX14p,size_12,color_FFFFFF,t_70,g_se,x_16)