最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python數(shù)據(jù)結(jié)構(gòu)與算法的雙端隊列詳解

 更新時間:2022年03月09日 16:51:58   作者:姜學(xué)遷  
這篇文章主要為大家詳細介紹了Python的雙端隊列,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

什么是雙端隊列?

雙端隊列是與隊列類似的有序集合。它有一、一兩端,元素在其中保持自己的位置。與隊列不同的是,雙端隊列對在哪一端添加和移除元素沒有任何限制。新元素既可以被添加到前端,也可以被添加到后端。同理,已有的元素也能從任意一端移除。某種意義上,雙端隊列可以是棧和隊列的結(jié)合。

在這里插入圖片描述

值得注意的是,盡管雙端隊列有棧和隊列的很多特性,但是它并不要求按照這兩種數(shù)據(jù)結(jié)構(gòu)分別規(guī)定的LIFO原則和FIFO原則操作元素。具體的排序原則取決于其使用者。

?雙端隊列抽象數(shù)據(jù)類型由下面的結(jié)構(gòu)和操作定義。如前所述,雙端隊列是元素的有序集合,其任何一端都允許添加或移除元素。雙端隊列支持以下操作:?

  • 創(chuàng)建一個空的雙端隊列。它不需要參數(shù),且會返回一個空的雙端隊列。 Deque()
  • 將一個元素添加到雙端隊列的前端。它接受一個元素作為參數(shù),沒有返回值。 addFront(item)
  • 將一個元素添加到雙端隊列的后端。它接受一個元素作為參數(shù),沒有返回值。 addRear(item)
  • 從雙端隊列的前端移除一個元素。它不需要參數(shù),且會返回一個元素,并修改雙端隊列的內(nèi)容。 removeFront()
  • 從雙端隊列的后端移除一個元素。它不需要參數(shù),且會返回一個元素, 并修改雙端隊列的內(nèi)容。 removeRear()
  • 檢查雙端隊列是否為空。它不需要參數(shù),且會返回一個布爾值。 isEmpty()
  • 返回雙端隊列中元素的數(shù)目。它不需要參數(shù),且會返回一個整數(shù)。 size()

?用Python實現(xiàn)雙端隊列

我們通過創(chuàng)建一個新類來實現(xiàn)雙端隊列抽象數(shù)據(jù)類型。Python列表再一次提供了 很多簡便的方法來幫助我們構(gòu)建雙端隊列。在下面的代碼中,我們假設(shè)雙端隊列的后端是列表的位置0處(列表的最左端)。

class Deque:
    def __init__(self):
        self.items = []
    def isEmpty(self):
        return self.items == []
    # 往雙端隊列前端添加元素
    def addFront(self, item):
        self.items.append(item)
    # 往雙端隊列后端添加元素
    def addRear(self, item):
        self.items.insert(0, item)
    # 在前端移除雙端隊列元素
    def removeFront(self):
        return self.items.pop()
    # 在后端移除雙端隊列元素
    def removeRear(self):
        return self.items.pop(0)
    def size(self):
        return len(self.items)
    def look(self):
        print(self.items)

removeFront 使用 pop 方法移除列表中的最后一個元素,removeRear 則使用 pop(0) 方法移除列表中的第一個元素。同理,之所以 addRear 使用 insert 方法,是因為 append 方法只能在列表的最后(最右端)添加元素。?

代碼運行效果如下:

在這里插入圖片描述

運用雙端隊列構(gòu)建回文檢測器

我們現(xiàn)在運用雙端隊列解決一個非常有趣的經(jīng)典問題:回文問題?;匚氖侵?strong>從前往后讀和從后往前讀都一樣的字符串,例如 sos、radar、toot、madam 等等。我們將構(gòu)建一個程序,它接受一個字符串并且檢測其是否為回文。?

該問題的解決方案是使用一個雙端隊列來存儲字符串中的字符。按照從左往右的順序?qū)⒆址械淖址砑拥诫p端隊列的后端或前端。此時,該雙端隊列類似于一個普通的隊列。?

由于可以從前后兩端移除元素,因此我們能夠比較兩個元素,并且只有在二者相等時才繼續(xù)。如果一直匹配第一個和最后一個元素,最終會處理完所有的字符(如果字符數(shù)是偶數(shù)),或者剩下只有一個元素的雙端隊列(如果字符數(shù)是奇數(shù))。任意一種結(jié)果都表明輸入字符串是回文。?

回文檢測器代碼如下:

class Deque:
    def __init__(self):
        self.items = []
    def isEmpty(self):
        return self.items == []
    def addFront(self, item):
        self.items.append(item)
    def addRear(self, item):
        self.items.insert(0, item)
    def removeFront(self):
        return self.items.pop()
    def removeRear(self):
        return self.items.pop(0)
    def size(self):
        return len(self.items)

def palchecker(aString):
    chardeque = Deque()
    for ch in aString:
        chardeque.addFront(ch)
    stillEqual = True
    while chardeque.size() > 1 and stillEqual:
        first = chardeque.removeFront()
        last = chardeque.removeRear()
        if first != last:
            stillEqual = False
    return stillEqual

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!   

相關(guān)文章

  • python+opencv實現(xiàn)文字顏色識別與標(biāo)定功能

    python+opencv實現(xiàn)文字顏色識別與標(biāo)定功能

    最近小編接了一個比較簡單的圖像處理的單子,今天小編給大家分享python+opencv實現(xiàn)文字顏色識別與標(biāo)定功能的完整思路及代碼,感興趣的朋友一起看看吧
    2021-09-09
  • numpy創(chuàng)建神經(jīng)網(wǎng)絡(luò)框架

    numpy創(chuàng)建神經(jīng)網(wǎng)絡(luò)框架

    本文介紹了使用numpy從零搭建了一個類似于pytorch的深度學(xué)習(xí)框架,可以用在很多地方,有需要的朋友可以自行參考一下
    2021-08-08
  • 基于python select.select模塊通信的實例講解

    基于python select.select模塊通信的實例講解

    下面小編就為大家?guī)硪黄趐ython select.select模塊通信的實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Python使用迭代器打印螺旋矩陣的思路及代碼示例

    Python使用迭代器打印螺旋矩陣的思路及代碼示例

    用Python的itertools模塊來創(chuàng)建具有迭代功能的函數(shù)十分具有技巧性,這里我們就來看一下借助itertools模塊、Python使用迭代器打印螺旋矩陣的思路及代碼示例
    2016-07-07
  • Python優(yōu)化算法之遺傳算法案例代碼

    Python優(yōu)化算法之遺傳算法案例代碼

    優(yōu)化算法,尤其是啟發(fā)式的仿生智能算法在最近很火,它適用于解決管理學(xué),運籌學(xué),統(tǒng)計學(xué)里面的一些優(yōu)化問題,這篇文章主要介紹了Python優(yōu)化算法—遺傳算法,需要的朋友可以參考下
    2023-02-02
  • ubuntu 18.04 安裝opencv3.4.5的教程(圖解)

    ubuntu 18.04 安裝opencv3.4.5的教程(圖解)

    這篇文章主要介紹了ubuntu 18.04 安裝opencv3.4.5的教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • Python編解碼問題及文本文件處理方法詳解

    Python編解碼問題及文本文件處理方法詳解

    最近在做一個項目,因為文本處理的內(nèi)容是中文,所以不得不面對python中文處理所帶來的種種困惑,這篇文章主要給大家介紹了關(guān)于Python編解碼問題及文本文件處理方法的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • 基于matplotlib中ion()和ioff()的使用詳解

    基于matplotlib中ion()和ioff()的使用詳解

    這篇文章主要介紹了基于matplotlib中ion()和ioff()的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 使用pycallgraph分析python代碼函數(shù)調(diào)用流程以及框架解析

    使用pycallgraph分析python代碼函數(shù)調(diào)用流程以及框架解析

    這篇文章主要介紹了使用pycallgraph分析python代碼函數(shù)調(diào)用流程以及框架解析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 基于Python實現(xiàn)人機PK小游戲

    基于Python實現(xiàn)人機PK小游戲

    這篇文章主要為大家詳細介紹了如何基于Python實現(xiàn)人機PK小游戲,簡單來說,就是隨機生成玩家和敵人的屬性,同時互相攻擊,直至一方血量小于零,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-06-06

最新評論

许昌县| 安阳县| 彭阳县| 南投县| 大庆市| 彰武县| 酉阳| 绥棱县| 韶关市| 防城港市| 姚安县| 沾益县| 大石桥市| 山西省| 天水市| 磴口县| 石屏县| 关岭| 图木舒克市| 石阡县| 福泉市| 洪湖市| 沾益县| 当涂县| 皮山县| 长海县| 舞钢市| 永安市| 安乡县| 漠河县| 遵化市| 关岭| 丰都县| 蚌埠市| 赫章县| 汝阳县| 桃源县| 宁化县| 开封市| 新建县| 巩义市|