1.堆
堆是一个二叉树,其中每个父亲节点的值都不大于其所有子节点的值。
使用数组或列表来实现堆时,对于所有的k(下标,从0开始)都满足heap[k]<=heap[2k+1]和heap[k]<=heap[2k+2],并且堆中最小的元素总是位于二叉树的根节点。 栈又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
import heapq #引入堆模块
import random #引入random模块
data=random.shuffle(list(range(10))) #列表初始化为打乱的数字
heap=[] #建堆
for n in data:
heapq.heappush(heap,n) #堆初始化
heapq.heappush(heap,0.5) #新数据入堆
heapq.heappop(heap) #弹出最小的元素,堆会自动重建
list=[1,2,3] #初始化列表
heapq.heapify(list) #将列表转换为堆
heapq.heapreplace(list,6) #替换列表中的元素值,自动重建堆
heapq.nlargest(2,list) #返回堆中最大的两个元素
heapq.nsmallest(1,list) #返回堆中最小的元素
2.队列
队列的特点是先进先出(FIFO)和后进后出(LILO)。 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
import queue #引入队列模块(Python3.x中使用queue,Python2.x使用Queue)
q=queue.Queue()
for i in range(3)
q.put(i) #元素入队
>>>q.queue
>>>dqueue([0,1,2])
q.get() #队列元素出队
q1=queue.LifoQueue(5) #后进先出队列(后进元素在队列get()操作时先出)
q2=queue.PriorityQueue(5) #优先级队列(默认出队时按从小到大)
自定义队列结构:
class myQueue:
def __init__(self, size=10):
self._content=[]
self._size=size
self._current=0
def Setsize(self,size):
if size<size._current: #如果缩小队列,应