栈:一种后进先出(LIFO)的线性表; push:进栈;pop:出栈; |
队列:一种先进先出(FIFO)的线性表; 每个元素总是从队列的 rear 端进入队列的,然后等待该元素 之前的所有元素都出队之后,当前元素才能出队 |
双端队列(deque):它可以在两端同时进行插入、删除操作 |
# 双端队列
from collections import deque
stack = deque(maxlen=20) #构造最大长度为10的队列
# stack.append('Erlang') #队尾添加元素
for i in range(10):
stack.append(i) #队尾入栈/入队——单个元素
print("队列长度:{},队列:{}".format(len(stack),stack))
for i in range(10):
stack.appendleft(i) #队首入栈/入队——单个元素
print("队列长度:{},队列:{}".format(len(stack),stack))
for i in range(9):
stack.pop() #队尾出栈/出队——单个元素
print("队列长度:{},队列:{}".format(len(stack),stack))
for i in range(7):
stack.popleft() #队首出栈/出队——单个元素
print("队列长度:{},队列:{}".format(len(stack),stack))
stack.reverse() #队列反转
print("队列长度:{},队列:{}".format(len(stack),stack))
stack.extend([5,6]) #队尾入栈/入队——列表、元组
stack.extendleft((7,8)) #队首入栈/入队——列表、元组
print("队列长度:{},队列:{}".format(len(stack),stack))
stack.insert(2,3) #在队列序号为2的位置插入10,其他元素顺序往后移动
# a=stack.index(3) #获取元素在队列中的索引
#print(stack.count(0)) #获取元素在队列中出现的次数
# stack.copy()
# stack.remove(3) #删除队列中的元素
print("队列:old,队列长度:{},队列:{}".format(len(stack),stack))
new_stack=stack.copy() #队列深拷贝
print("队列:new,队列长度:{},队列:{}".format(len(stack),new_stack))
stack.append(1)
print("队列:old,队列长度:{},队列:{}".format(len(stack),stack))
print("队列:new,队列长度:{},队列:{}".format(len(stack),new_stack))
stack.rotate() #执行队列旋转,使收尾相连,队尾元素会被移到队头
print(len(stack))
print("队列:old,队列长度:{},队列:{}".format(len(stack),stack))
print("队列:new,队列长度:{},队列:{}".format(len(stack),new_stack))
# stack.clear() #将队列清空
堆:假设有 n 个数据元素的序列 k0,k1,...,kn-1,当且仅当满足 ki≤k2i+1 且 ki≤k2i+2(其中 i=0,2,...,(n-1)/2)
时,可以将这组数据称为小顶堆(小根堆);或者满足 ki≥k2i+1 且 ki≥k2i+2(其中 i=0,2,...,(n-1)/2)
时,可以将这组数据称为大顶堆(大根堆)。
Python 并没有提供“堆”这种数据类型,它是直接把列表当成堆处理的。Python 提供的 heapq 包中有一些函数,当程序用这些函数来操作列表时,该列表就会表现出“堆”的行为。
- heapify(heap):将堆属性应用到列表上。
- merge(*iterables, key=None, reverse=False):将多个有序的堆合并成一个大的有序堆,然后再输出。
- heappop(heap):将堆中最小元素弹出。
- heappushpop(heap, item):将item 入堆,然后弹出并返回堆中最小的元素。
- heapreplace(heap, x):将堆中最小元素弹出,并将元素x 入堆。
- heappush(heap, item):将 item 元素加入堆。
- nlargest(n, iterable, key=None):返回堆中最大的 n 个元素。
- nsmallest(n, iterable, key=None):返回堆中最小的 n 个元素。