python——队列与堆

栈:一种后进先出(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 个元素。
发布了109 篇原创文章 · 获赞 22 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42233538/article/details/103589963