1.堆
进行排序的时候使用较多,重要应用:优先队列
import heapq
n=[8,3,9]
heap=[]
heapq.heappush(heap,1)
#[1]
for i in range(n):
heapq.heappush(heap,i)
#自动排序
heapq.heappop(heap)
#弹出最小元素
#ranheap=[1,2,5,4,3,2,10,9]
ranheap=[1,2,5,4,3,2,10,9]
heapq.heapify(ranheap)#列表转换成堆
print(heapq.nsmallest(4,ranheap))#输出四个最小值
值得注意的是,堆是二叉树,也就是说排序排成一个二叉树的形式,最后得到如下图的形式。
2.队列
先进先出,后进后出
import queue
q=queue.Queue()
q.put(1)
q.put(3)
q.put(2)
#deque([1, 3, 2])
q.get()
#deque([ 3, 2])
print(q.queue)
#还提供后进先出
qq = queue.LifoQueue()
qq.put(1)
qq.put(2)
qq.put(3)
qq.put(2)
qq.put(6)
qq.put(5)
print(qq.queue)
qq.get()
print(qq.queue)#5出去了
#以及优先级队列
priq = queue.PriorityQueue()
priq.put(3)
priq.put(8)
priq.put(7)
priq.put(5)
print(priq.queue)
priq.put(1)
print(priq.queue)
#[3, 5, 7, 8]
#[1, 3, 7, 8, 5]
class PriorityQueue(Queue):
def _init(self, maxsize):
self.queue = []
def _qsize(self):
return len(self.queue)
def _put(self, item):
heappush(self.queue, item)
def _get(self):
return heappop(self.queue)
可见优先级这一块也是用到了块,也就是排序是用二叉树排列,用get函数时也会进行在再一次排序
3.栈
后进先出**或**先进后出
在Python中列表本身就可以实现栈的基本操作,比如入栈类似于append(),出栈类似于pop函数,要是用C语言的话就是另一种感觉了。