Python之复杂数据结构_自定义的快乐

本文介绍了Python中的复杂数据结构,包括堆的定义和性质,详细探讨了队列的FIFO特性,如后进先出队列和优先级队列,并展示了如何自定义队列结构。此外,还讲解了栈的LIFO特性并讨论了自定义栈结构的方法。
摘要由CSDN通过智能技术生成

复杂数据结构

  • 堆是一个二叉树,其中每个父节点的值都小于等于其所有子节点的值。
  • 数组heap[k]<=heap[2*k+1]
  • 列表heap[k]<=heap[2*k+2]
  • 整个堆中最小的元素总是位于二叉树的根节点
  • Python中提供了heap模块提供相应的支持
import heapq
import random
data = list(range(10))
random.shuffle(data)
data
heap = []
# 建堆
for n in data:
    heapq.heappush(heap,n) #参数1,被插入的堆变量,参数2,插入的值
heap
[0, 1, 2, 4, 6, 7, 3, 9, 5, 8]
heapq.heappush(heap,0.5)
heap
[0, 0.5, 2, 4, 1, 7, 3, 9, 5, 8, 6]
heapq.heappop(heap) #弹出最小的元素,即根节点元素,堆会自动重建
heap
[0.5, 1, 2, 4, 6, 7, 3, 9, 5, 8]
myheap = [1,2,3,4,5,7,9,0,10,333]
#将列表转化为堆
heapq.heapify(mylist)
myheap 
[1, 2, 3, 4, 5, 7, 9, 0, 10, 333]
heapq.heapreplace(myheap,333) #替换堆中元素值,自动重构堆
myheap
[3, 4, 7, 0, 5, 333, 9, 1, 10, 333]
max_value = (a,b,c) =heapq.nlargest(3,myheap) #返回前3个最大的元素
max_value
[333, 333, 10]
min_value = (a,b) = heapq.nsmallest(2,myheap) # 返回前2个最小的元素
min_value
[0, 1]

队列

  • 队列的特点:FIFO(先进先出) LILO(后进后出)
  • 应用场景:
    • 多线程编程
    • 作业处理
    • 流式编程
    • Rest风格
  • Python提供了queue模块和collections.deque模块支持队列的操作
import queue
q = queue.Queue() # 创建队列对象
q.put(0)  # 向队列中插入数据
q.put(1) 
q.put(2)
q.queue
<queue.Queue at 0x23a656ea688>
q.get()  # 队列头元素出队
0
q.queue
deque([1, 2])
q.get()
1
q.queue
deque([2])

后进先出队列

import queu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值