欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

什么是雙端隊(duì)列?

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

在這里插入圖片描述

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

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

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

?用Python實(shí)現(xiàn)雙端隊(duì)列

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

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

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

代碼運(yùn)行效果如下:

在這里插入圖片描述

運(yùn)用雙端隊(duì)列構(gòu)建回文檢測(cè)器

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

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

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

回文檢測(cè)器代碼如下:

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é)

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

相關(guān)文章

  • 幫你快速上手Jenkins并實(shí)現(xiàn)自動(dòng)化部署

    幫你快速上手Jenkins并實(shí)現(xiàn)自動(dòng)化部署

    在未學(xué)習(xí)Jenkins之前,只是對(duì)Jenkins有一個(gè)比較模糊的理解,即Jenkins是一個(gè)自動(dòng)化構(gòu)建項(xiàng)目發(fā)布的工具,可以實(shí)現(xiàn)代碼->github或者gitlab庫(kù)->jenkins自動(dòng)部署->訪問(wèn)的整體的過(guò)程,而無(wú)需人為重新打包,今天就帶大家詳細(xì)了解一下,幫你快速上手Jenkins,需要的朋友可以參考下
    2021-06-06
  • python實(shí)現(xiàn)簡(jiǎn)單http服務(wù)器功能

    python實(shí)現(xiàn)簡(jiǎn)單http服務(wù)器功能

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單http服務(wù)器功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python時(shí)間戳與時(shí)間字符串互相轉(zhuǎn)換實(shí)例代碼

    Python時(shí)間戳與時(shí)間字符串互相轉(zhuǎn)換實(shí)例代碼

    這篇文章主要介紹了Python時(shí)間戳與時(shí)間字符串互相轉(zhuǎn)換實(shí)例代碼,大家參考使用
    2013-11-11
  • python如何利用traceback獲取詳細(xì)的異常信息

    python如何利用traceback獲取詳細(xì)的異常信息

    異常信息的獲取對(duì)于程序的調(diào)試非常重要,可以有助于快速定位有錯(cuò)誤程序語(yǔ)句的位置。這篇文章主要給大家介紹了關(guān)于python如何利用traceback獲取詳細(xì)的異常信息的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • 2020年10款優(yōu)秀的Python第三方庫(kù),看看有你中意的嗎?

    2020年10款優(yōu)秀的Python第三方庫(kù),看看有你中意的嗎?

    2020已經(jīng)過(guò)去,在過(guò)去的一年里,又有非常多優(yōu)秀的Python庫(kù)涌現(xiàn)出來(lái)。相對(duì)于numpy、TensorFlow、pandas這些已經(jīng)經(jīng)過(guò)多年維護(hù)、迭代,對(duì)于大多數(shù)Python開(kāi)發(fā)者耳熟能詳?shù)膸?kù)不同。
    2021-01-01
  • python如何使用騰訊云發(fā)送短信

    python如何使用騰訊云發(fā)送短信

    這篇文章主要介紹了python如何使用騰訊云發(fā)送短信,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • 如何在Python中將字符串轉(zhuǎn)換為數(shù)組詳解

    如何在Python中將字符串轉(zhuǎn)換為數(shù)組詳解

    最近在用Python,做一個(gè)小腳本,有個(gè)操作就是要把內(nèi)容換成數(shù)組對(duì)象再進(jìn)行相關(guān)操作,下面這篇文章主要給大家介紹了關(guān)于如何在Python中將字符串轉(zhuǎn)換為數(shù)組的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • python字符串加密解密的三種方法分享(base64 win32com)

    python字符串加密解密的三種方法分享(base64 win32com)

    這篇文章主要介紹了python字符串加密解密的三種方法,包括用base64、使用win32com.client、自己寫(xiě)的加密解密算法三種方法,大家參考使用吧
    2014-01-01
  • python使用pip安裝SciPy、SymPy、matplotlib教程

    python使用pip安裝SciPy、SymPy、matplotlib教程

    今天小編大家分享一篇python使用pip安裝SciPy、SymPy、matplotlib教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • 用Python實(shí)現(xiàn)讀寫(xiě)鎖的示例代碼

    用Python實(shí)現(xiàn)讀寫(xiě)鎖的示例代碼

    這篇文章主要介紹了用Python實(shí)現(xiàn)讀寫(xiě)鎖的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11

最新評(píng)論