用python队列解决舞伴问题

队列

在 Python 中,队列(Queue)是一种先进先出(FIFO)的数据结构,通常用于在多线程环境中安全地传递数据。Python 的 queue 模块提供了多种队列实现,包括:

  1. Queue.Queue:标准的先进先出队列(FIFO)。
  2. Queue.LifoQueue:后进先出队列(LIFO),类似于堆栈。
  3. Queue.PriorityQueue:优先级队列,元素按优先级顺序出队。

这些队列都是线程安全的,适用于多线程编程。


队列中常用的方法

  1. put(item, block=True, timeout=None):将元素放入队列。
  2. get(block=True, timeout=None):从队列中取出元素。
  3. empty():判断队列是否为空。
  4. full():判断队列是否已满。
  5. qsize():返回队列中的元素数量。

舞伴问题

示例代码

from queue import Queue

def dance_partner(arr):
    male_queue = Queue()
    female_queue = Queue()
    for person in arr:
        name, gender = person
        if gender == 'M':
            male_queue.put(name)
        elif gender == 'F':
            female_queue.put(name)

    # 配对舞伴
    while not male_queue.empty() and not female_queue.empty():
        male = male_queue.get()
        female = female_queue.get()
        print(f"舞伴: {male} 和 {female}")

    # 输出仍在等待配对者
    if not male_queue.empty():#如果男士队列不为空,说明还有男士等待配对
        print(f"等待配对的男士: {male_queue.queue[0]}")
    if not female_queue.empty():
        print(f"等待配对的女士: {female_queue.queue[0]}")

# 测试
arr = [
    ("张三", "M"),
    ("李四", "F"),
    ("王五", "M"),
    ("赵六", "F"),
    ("钱七", "M")
]
dance_partner(arr)

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值