目? ? ? 录
1. 栈简介
1.1 栈的概念
1.2 栈的类型
1.2.1 是否能动态增长
1.2.2 栈的实现方式
2. Python 中使用列表 list 实现栈
2.1 栈的常规操作
2.2 栈的代码实现
1. 栈简介
1.1 栈的概念
????????栈,英语 Stack,又称为堆栈,是一种特殊的数组或者说列表;可存入数据元素、访问元素、删除元素。它最大的特点是只能允许在栈顶端(top)进行加入数据(动作称为 push)和输出数据(动作称为 pop)。 ????????它不能按照下标读取数据,任何时候可以访问、删除的元素都是此前最后存入的那个元素,访问顺序是固定的,即后进先出(LIFO, Last In First Out),与顶部对应的端称为“底部”bottom。
1.2 栈的类型
1.2.1 是否能动态增长
????????在其他语言中,栈根据是否能动态增长,分为静态栈和动态栈。尤其是 C、Java 中使用固定长度分配内存时候,是静态栈。可以动态的增长栈长度的,是静态栈。
? ? ? ? 在 Python 中一般是支持动态增长的,所以多半是动态栈。如果需要实现静态栈,也可以加上限定来实现。
1.2.2 栈的实现方式
? ? ? ? Python 中栈的实现方式一般分两种,一个是使用列表实现,一个是使用链表实现。
? ? ? ? 使用列表实现方便快捷,代码实现简单,下面会写出使用列表实现栈的代码,使用链表实现的,会在链表章节进行描述。
2. Python 中使用列表 list 实现栈
2.1 栈的常规操作
????????栈的操作包括下面的内容:
- ????????Stack(optional: callable data)? ? ? ?创建一个新的空栈,或者使用可迭代对象初始化栈
- ????????push()? ? ? ? 添加一个新的元素 item 到栈顶
- ????????pop()? ? ? ? ? 弹出栈顶 top 元素
- ????????peek()? ? ? ? 返回 top 栈顶元素,即只读功能
- ????????is_empty() 判断栈是否为空
- ????????size()? ? ? ? ?返回栈的元素个数
- ????????__str__()? ? 供 print 函数使用时候直接调用
2.2 栈的代码实现
class Stack(object):
def __init__(self,vals=None):
self.stack=[]
self.stack_size=0
if(vals ):
for val in vals:
self.stack.append(val)
self.stack_size+=1
# 压栈
def push(self,val):
self.stack.append(val)
self.stack_size+=1
return(True)
# 弹出栈顶元素
def pop(self):
if(self.stack_size==0):
return(None)
else:
self.stack_size-=1
return(self.stack.pop())
# 读取栈顶元素
def peek(self):
if(self.stack_size==0):
return(None)
else:
return(self.stack[-1])
# 判断栈是否为空
def is_empty(self):
if(self.stack_size==0):
return(True)
else:
return(False)
# 获得栈的元素的个数
def size(self):
return(self.stack_size)
# 提供给 print 函数
def __str__(self):
return("This is a stack ==>{0}".format(self.stack))
# stack1
print("*"*16+"create a empty stack"+"*"*16)
stack1=Stack()
print(stack1)
stack1.push(0)
stack1.push(1)
stack1.push(2)
print("*"*16+"push three elements"+"*"*16)
print(stack1)
stack1.pop()
stack1.pop()
print("*"*16+"pop two elements"+"*"*16)
print(stack1)
# stack1
print("*"*16+"create a stack as ['a','b','c','d']"+"*"*16)
stack1=Stack(['a','b','c','d'])
print(stack1)
print("*"*16+"judge the stiack is empty"+"*"*16)
print(stack1.is_empty())
print("*"*16+"read the top element"+"*"*16)
print(stack1.peek())
print("*"*16+"get the stack len"+"*"*16)
print(stack1.size())
''
要是大家觉得写得还行,麻烦点个赞或者收藏吧,想个博客涨涨人气,非常感谢!
'''
|