1、数据存储方式:可以采用列表或单链表
2、操作:
Stack() 创建一个新的空栈
push(data) 添加一个新的元素data到栈顶
pop() 弹出栈顶元素
peek() 返回栈顶元素
is_empty() 判断栈是否为空
size() 返回栈的元素个数
"""
采用列表存储的方式
"""
class Stack(object):
"""栈"""
def __init__(self):
"""初始化"""
self.__list = [] # 定义一个列表用于存放数据
def push(self, data):
"""添加一个新的元素data到栈顶"""
self.__list.append(data) # 把列表的尾部作为栈顶
def pop(self):
"""弹出栈顶元素"""
return self.__list.pop() # 从列表尾部出栈操作
"""
也可以把列表头部作为栈顶,如果把列表头部作为栈顶,
则压栈就是 self.__list.insert(0, data),
出栈则是self.__list.pop(0)
此种方式与把列表尾部作为栈顶区别在于,列表尾部操作时间复杂度是O(1),而头部操作时间复杂度是O(n)
"""
def peek(self):
"""返回栈顶元素"""
if self.__list: # 列表为空时,返回None,否则返回最后一个元素
return self.__list[-1]
else:
return None
def is_empty(self):
"""判断栈是否为空"""
return not self.__list # 列表为空时,返回True,否则返回False
def size(self):
"""返回栈的元素个数"""
return len(self.__list)
if __name__ == '__main__':
s = Stack()
s.push(1)
s.push(2)
s.push(3)
s.push(4)
print("栈顶数据:", s.peek())
print("判空:", s.is_empty())
print("长度:", s.size())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print("栈顶数据:", s.peek())
print("判空:", s.is_empty())
print("长度:", s.size())
执行结果
栈顶数据: 4
判空: False
长度: 4
4
3
2
1
栈顶数据: None
判空: True
长度: 0
"""
采用单链表存储的方式
"""
import SingleLinkList
class Stack(object):
"""栈"""
def __init__(self):
"""初始化"""
self.__sll = SingleLinkList() # 定义一个链表用于存放数据
def push(self, data):
"""添加一个新的元素data到栈顶"""
self.__sll.add(data) # 把链表的头部作为栈顶
def pop(self):
"""弹出栈顶元素"""
data = self.peek() # 获取栈顶的元素
if data:
self.__sll.remove(data) # 删除栈顶的元素
return data # 把链表的头部作为栈顶
def peek(self):
"""返回栈顶元素"""
return self.__sll.index(0) # 直接返回首节点的元素
# return self.__sll._SingleLinkList__head.data # 可以通过实例访问类的私有变量
def is_empty(self):
"""判断栈是否为空"""
return self.__sll.is_empty() # 直接返回链表判空结果 True空
def size(self):
"""返回栈的元素个数"""
return self.__sll.length() # 直接返回链表的长度
if __name__ == '__main__':
s = Stack()
s.push(1)
s.push(2)
s.push(3)
s.push(4)
print("栈顶数据:", s.peek())
print("判空:", s.is_empty())
print("长度:", s.size())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print("栈顶数据:", s.peek())
print("判空:", s.is_empty())
print("长度:", s.size())
执行结果
栈顶数据: 4
判空: False
长度: 4
4
3
2
1
栈顶数据: None
判空: True
长度: 0