泽兴芝士网

一站式 IT 编程学习资源平台

【支持优先级的队列】Python 实现

def priority_queue(input_data):
    # 解析输入数据
    elements = []
    # 处理输入字符串,移除所有空格和中文括号
    input_data = input_data.replace(' ', '').replace('(', '(').replace(')', ')')
    
    # 分割输入数据
    input_parts = input_data.split('),(')
    # 清理多余的括号
    input_parts = [part.replace('(', '').replace(')', '') for part in input_parts if part]
    
    # 存储 (priority, data) 和插入顺序
    queue = []
    insertion_order = 0  # 用于记录插入顺序
    
    for part in input_parts:
        if not part:
            continue
        
        # 处理分隔符可能是逗号或斜杠的情况
        if ',' in part:
            data, priority = part.split(',', 1)
        elif '/' in part:
            data, priority = part.split('/', 1)
        else:
            continue  # 跳过无效格式
            
        try:
            data = int(data)
            priority = int(priority)
        except ValueError:
            continue  # 跳过无法转换为整数的数据
            
        # 检查是否已存在相同的 (data, priority)
        duplicate = False
        for item in queue:
            if item[1] == data and item[0] == priority:
                duplicate = True
                break
        if not duplicate:
            queue.append((priority, data, insertion_order))
            insertion_order += 1
    
    # 排序:先按优先级降序,同优先级按插入顺序升序
    queue.sort(key=lambda x: (-x[0], x[2]))
    
    # 提取 data 部分
    result = [str(item[1]) for item in queue]
    return ','.join(result)

# 自定义输入测试
if __name__ == "__main__":
    print("请输入队列数据,格式如:(10,1),(20,1),(30,2)")
    print("输入完成后按Enter键执行")
    user_input = input("请输入: ")
    output = priority_queue(user_input)
    print("输出结果:")
    print(output)

解题思路

要实现一个支持优先级的队列,需要满足以下条件:

  1. 高优先级先出队:优先级高的元素先被取出。
  2. 同优先级先进先出:如果优先级相同,则按照插入顺序(先进先出)处理。
  3. 去重:如果两个元素的数据内容优先级都相同,则后一个元素被丢弃(不插入队列)。


控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言