日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

隊(duì)列(Queue)是一種特殊的線性數(shù)據(jù)結(jié)構(gòu),其操作遵循先進(jìn)先出(FIFO)的原則,即最先添加到隊(duì)列中的元素最先被移除。

1. 隊(duì)列的基本概念

隊(duì)列的基本操作包括:入隊(duì)(Enqueue)將元素添加到隊(duì)列的尾部,和出隊(duì)(Dequeue)從隊(duì)列的頭部移除元素。 在Python/ target=_blank class=infotextkey>Python中,我們可以使用列表來簡單地模擬隊(duì)列,但為了效率更高,我們經(jīng)常使用 collections 模塊中的 deque 類來實(shí)現(xiàn)隊(duì)列。

from collections import deque

# 創(chuàng)建一個(gè)隊(duì)列
queue = deque()

# 入隊(duì)操作
queue.Append(10)
queue.append(20)
queue.append(30)

# 此時(shí)隊(duì)列的狀態(tài)為 [10, 20, 30]

2. 出隊(duì)操作

從隊(duì)列的頭部移除元素。

# 出隊(duì)操作
first_element = queue.popleft()  # 移除并返回頭部元素,結(jié)果是 10

# 此時(shí)隊(duì)列的狀態(tài)為 [20, 30]

3. 隊(duì)列的輔助操作

3.1 查看隊(duì)首和隊(duì)尾元素

# 查看隊(duì)首元素
front_element = queue[0]  # 結(jié)果是 20

# 查看隊(duì)尾元素
rear_element = queue[-1]  # 結(jié)果是 30

3.2 檢查隊(duì)列是否為空

is_empty = not bool(queue)  # 如果隊(duì)列為空,結(jié)果為 True

3.3 獲取隊(duì)列的大小

size = len(queue)  # 結(jié)果是 2,因?yàn)殛?duì)列中有兩個(gè)元素

4. 優(yōu)先隊(duì)列

優(yōu)先隊(duì)列是一種特殊的隊(duì)列,其中每個(gè)元素都有一個(gè)與之相關(guān)的優(yōu)先級(jí)。Python的heapq模塊提供了實(shí)現(xiàn)優(yōu)先隊(duì)列的工具。

import heapq

# 創(chuàng)建一個(gè)空的優(yōu)先隊(duì)列
priority_queue = []

# 入隊(duì)操作
heapq.heappush(priority_queue, (1, "Task 1"))  # 數(shù)字1表示優(yōu)先級(jí)
heapq.heappush(priority_queue, (3, "Task 3"))
heapq.heappush(priority_queue, (2, "Task 2"))

# 出隊(duì)操作(按優(yōu)先級(jí))
task = heapq.heappop(priority_queue)  # 結(jié)果是 (1, "Task 1")

5. 雙端隊(duì)列

deque 不僅可以作為一個(gè)隊(duì)列使用,還可以支持從兩端添加和刪除元素,因此被稱為雙端隊(duì)列。

dq = deque()

# 從頭部和尾部添加元素
dq.appendleft(10)
dq.append(20)

# 從頭部和尾部移除元素
dq.popleft()  # 結(jié)果是 10
dq.pop()      # 結(jié)果是 20

6. 實(shí)戰(zhàn)案例:任務(wù)調(diào)度

假設(shè)我們有一個(gè)打印機(jī),需要處理一系列的打印任務(wù)。任務(wù)有不同的優(yōu)先級(jí),并且需要在有限的時(shí)間內(nèi)完成。我們可以使用隊(duì)列來模擬這個(gè)過程。

from random import randint

class PrintTask:
    def __init__(self, priority):
        self.priority = priority
        self.time_needed = randint(1, 5)  # 隨機(jī)生成所需時(shí)間

    def tick(self):
        """減少任務(wù)所需的時(shí)間"""
        self.time_needed -= 1

    def is_done(self):
        """檢查任務(wù)是否完成"""
        return self.time_needed <= 0

# 創(chuàng)建任務(wù)隊(duì)列
tasks = deque()

# 生成10個(gè)隨機(jī)任務(wù)
for _ in range(10):
    p = randint(1, 5)
    tasks.append(PrintTask(p))

# 處理任務(wù)
while tasks:
    current_task = tasks.popleft()
    current_task.tick()
    print(f"Processing task with priority {current_task.priority}... Time left: {current_task.time_needed}")

    if not current_task.is_done():
        tasks.append(current_task)
    else:
        print(f"Task with priority {current_task.priority} is done!")

小結(jié)

隊(duì)列是計(jì)算機(jī)科學(xué)中的一個(gè)核心概念,有廣泛的應(yīng)用,如任務(wù)調(diào)度、數(shù)據(jù)同步等。了解其基本操作和特性,能夠幫助我們更好地解決實(shí)際問題。

分享到:
標(biāo)簽:Python
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評(píng)定2018-06-03

通用課目體育訓(xùn)練成績評(píng)定