# 入栈操作
def push(self, value):
cur = Node(value)
cur.next = self.top
self.top = cur
# 出栈操作
def pop(self):
if self.is_empty():
raise Exception('Stack is empty')
else:
cur = self.top
self.top = self.top.next
del cur
等同于链表的插入和删除。
相比于链表其实简单了,因为堆栈没有next指针。
for i in range(len(data)):
stack.push(data[i])
print(stack.peek())
for i in range(len(data)):
print(stack.pop())
输出入栈时和出栈时的数值。
while index + 1 < size and s[index + 1].isdigit():
index += 1
num = 10 * num + ord(s[index]) - ord('0')#两位数或者更多的解决方式
解决了两位数以上的数字的方式,记一下
# 如果当前元素值较小,则直接让当前元素值入栈。 # 如果当前元素值较大,则一直出栈,直到当前元素值小于栈顶元素。 # 出栈时,出栈元素是第一个大于当前元素值的元素。则将其映射到 num_map 中。 算法笔记这里有点没搞懂,应该是说栈顶元素下一个更大的元素就是当前元素,然后弹出栈顶元素。代码的解释更清楚一些:
while stack and num > stack[-1]:
num_map[stack[-1]] = num
stack.pop()
ans = [0 for _ in range(n)]#巧妙地运用stack[-1]获得了index
while stack and T[i] > T[stack[-1]]:
index = stack.pop()
ans[index] = (i-index)
用index来解决气温问题,值得注意。