数据结构:线性数据结构(2)-队列(栈,队列,deques, 列表)
隊列:FIFO
1.隊列的抽象數(shù)據(jù)類型
隊列抽象數(shù)據(jù)類型由以下結(jié)構(gòu)和操作定義。如上所述,隊列被構(gòu)造為在隊尾添加項的有序集合,并且從隊首移除。隊列保持 FIFO 排序?qū)傩浴j犃胁僮魅缦?#xff1a;
- Queue() 創(chuàng)建一個空的新隊列。 它不需要參數(shù),并返回一個空隊列。
- enqueue(item) 將新項添加到隊尾。 它需要 item 作為參數(shù),并不返回任何內(nèi)容。
- dequeue() 從隊首移除項。它不需要參數(shù)并返回 item。 隊列被修改。
- isEmpty() 查看隊列是否為空。它不需要參數(shù),并返回布爾值。
- size() 返回隊列中的項數(shù)。它不需要參數(shù),并返回一個整數(shù)。
2.隊列的python實現(xiàn)
#隊列類的定義 class Queue(object):def __init__(self):self.items = list()def enqueue(self, item):self.items.append(item)def dequeue(self):return self.items.pop(0)def isEmpty(self):return self.items == []def size(self):return len(self.items)?3.實例應用
約瑟夫問題與熱土豆問題
約瑟夫問題原意:約瑟夫和他的朋友,與39個抵抗戰(zhàn)士,在失敗前約定41個人圍成一圈,從1數(shù)到3,數(shù)到3的人就自殺,然后從自殺者下一個位置開始重新數(shù),直到全部。約瑟夫需要找兩個位置,讓他和自己的朋友,成為最后兩個人活下來。
熱土豆問題:6個小朋友,圍成一圈,用一個熱土豆(或別的什么東西),數(shù)一個數(shù)就拋給下一個人,每數(shù)到3,手上有土豆的人就站出來,然后繼續(xù),問哪個位置的人最后剩下?
#hotpotato def hotPotato(namelist, num):queue = Queue()for name in namelist:queue.enqueue(name)while queue.size() > 1:for i in range(num):queue.enqueue(queue.dequeue())queue.dequeue()return queue.dequeue() print(hotPotato(["Bill","David","Susan","Jane","Kent","Brad"],7))其他線性數(shù)據(jù)結(jié)構(gòu):
棧:https://blog.csdn.net/qq_18888869/article/details/88086002
deque:https://blog.csdn.net/qq_18888869/article/details/88137237
列表(鏈表):https://blog.csdn.net/qq_18888869/article/details/88138785
github代碼:https://github.com/makang101/python-data-structure
總結(jié)
以上是生活随笔為你收集整理的数据结构:线性数据结构(2)-队列(栈,队列,deques, 列表)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构:线性数据结构(1)-栈(栈,队
- 下一篇: 数据结构:线性数据结构(3)-deque