栈
栈的操作
Stack.peek()
:返回栈顶元素。Stack.push(x)
:向栈中添加元素x。Stack.pop()
:返回并删除栈顶元素的。Stack.isEmpty()
:返回栈是否为空。Stack.length()
:返回栈的长度。Stack.traversal()
:遍历栈。
顺序栈(数组实现栈)
采用顺序存储结构的栈称为顺序栈,通过一维数组用一片地址连续的存储空间来存储栈的元素,并指定栈顶位于序列末端。当有新元素入栈或栈顶元素出栈我们只需要改变栈顶位标即可。
class Stack:
def __init__(self):
self.data = []
# 返回栈顶元素
def peek(self):
return self.data[-1]
# 进栈
def push(self, data):
self.data.append(data)
# 出栈
def pop(self):
return self.data.pop()
# 返回栈是否为空
def isEmpty(self):
return self.data == []
# 返回栈的长度
def length(self):
return len(self.data)
# 遍历栈
def traversal(self):
print(*self.data)
测试:
s=Stack()
print("是否为空:",s.isEmpty()) # True
s.traversal() #
print("-----------------")
s.push(4)
s.push('dog')
print(s.peek()) # dog
s.traversal() # 4 dog
print("-----------------")
s.push(True)
s.traversal() # 4 dog True
print("-----------------")
print("长度:",s.length()) # 3
print("-----------------")
print("是否为空:",s.isEmpty()) # False
print("-----------------")
s.push(8.4)
s.traversal() # 4 dog True 8.4
print("-----------------")
print(s.pop()) # 8.4
s.traversal() # 4 dog True
print("-----------------")
print(s.pop()) # True
s.traversal() # 4 dog
print("-----------------")
print("长度:",s.length()) # 2
print("-----------------")
链栈(链表实现栈)
因为栈只通过栈顶来做插入和删除操作,所以比较好的方法是将栈顶放在单链表的头部,栈顶指针和单链表的指针合二为一。
class Stack:
def __init__(self):
self.top = None
# 返回栈是否为空
def isEmpty(self):
return self.top is None
# 返回栈顶元素
def peek(self):
return self.top.data
# 进栈
def push(self, data):
node = Node(data)
node.next = self.top
self.top = node
# 出栈
def pop(self):
temp = self.top
self.top = self.top.next
return temp.data
# 遍历栈
def traversal(self):
current = self.top
while current is not None:
print(current.data, end=' ')
current = current.next
print()
# 返回栈的长度
def length(self):
count = 0
current = self.top
while current is not None:
count += 1
current = current.next
return count
测试:
s=Stack()
print("是否为空:",s.isEmpty()) # True
s.traversal() #
print("-----------------")
s.push(4)
s.push('dog')
print(s.peek()) # dog
s.traversal() # dog 4
print("-----------------")
s.push(True)
s.traversal() # True dog 4
print("-----------------")
print("长度:",s.length()) # 3
print("-----------------")
print("是否为空:",s.isEmpty()) # False
print("-----------------")
s.push(8.4)
s.traversal() # 8.4 True dog 4
print("-----------------")
print(s.pop()) # 8.4
s.traversal() # True dog 4
print("-----------------")
print(s.pop()) # True
s.traversal() # dog 4
print("-----------------")
print("长度:",s.length()) # 2
print("-----------------")