Deque

Deque(雙端隊(duì)列):

  • 特點(diǎn):有序集合,有兩個(gè)端部, 首部和尾部,可以在前面或后面添加新項(xiàng),也可以在任一端移除現(xiàn)有項(xiàng)。
  • Deque抽象數(shù)據(jù)類型
    Deque()創(chuàng)建一個(gè)空的新deque。它不需要參數(shù),返回空的deque。
    addFront(item)將一個(gè)新項(xiàng)添加到deque的首部。它需要item參數(shù)并不返回任何內(nèi)容。
    addRear(item) 將一個(gè)新項(xiàng)添加到 deque 的尾部。它需要 item 參數(shù)并不返回任何內(nèi)容。
    removeFront() 從 deque 中刪除首項(xiàng)。它不需要參數(shù)并返回 item。deque 被修改。
    removeRear() 從 deque 中刪除尾項(xiàng)。它不需要參數(shù)并返回 item。deque 被修改。
    isEmpty() 測(cè)試 deque 是否為空。它不需要參數(shù),并返回布爾值。
    size() 返回 deque 中的項(xiàng)數(shù)。它不需要參數(shù),并返回一個(gè)整數(shù)。


    image.png
# -*- utf8 -*-
# Deque.py


'''
Deque(雙端隊(duì)列):
特點(diǎn):有序集合,有兩個(gè)端部, 首部和尾部,可以在前面或后面添加新項(xiàng),也可以在任一端移除現(xiàn)有項(xiàng)。
Deque抽象數(shù)據(jù)類型
Deque()創(chuàng)建一個(gè)空的新deque。它不需要參數(shù),返回空的deque。
addFront(item)將一個(gè)新項(xiàng)添加到deque的首部。它需要item參數(shù)并不返回任何內(nèi)容。
addRear(item) 將一個(gè)新項(xiàng)添加到 deque 的尾部。它需要 item 參數(shù)并不返回任何內(nèi)容。
removeFront() 從 deque 中刪除首項(xiàng)。它不需要參數(shù)并返回 item。deque 被修改。
removeRear() 從 deque 中刪除尾項(xiàng)。它不需要參數(shù)并返回 item。deque 被修改。
isEmpty() 測(cè)試 deque 是否為空。它不需要參數(shù),并返回布爾值。
size() 返回 deque 中的項(xiàng)數(shù)。它不需要參數(shù),并返回一個(gè)整數(shù)。
'''

'''
用Python實(shí)現(xiàn)一個(gè)Deque
底層同樣使用列表
假定deque的尾部在列表中的位置為0
在removeFront中,我們使用pop方法從列表中刪除最后一個(gè)元素。
但是,在removeRear中,pop(0)方法必須刪除列表的第一個(gè)元素。因?yàn)閐eque的末尾是列表的開頭,開頭是列表的結(jié)尾。
所以deque從前面添加(列表的末尾)是O(1),在后面添加(列表的前面)是O(n)
'''

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)


image.png
'''

Deque的實(shí)際應(yīng)用:回文檢查
規(guī)則:對(duì)稱然后首尾相同的字符串就是回文例如 radar toot madam
大概思路:把字符串從左到右每個(gè)字符添加到deque的尾部,全部添加后,再利用deque的雙重功能,
把deque的前后兩邊的第一個(gè)字符移除并且判斷是否相同,如果相同就繼續(xù)取剩下的前后兩邊的字符繼續(xù)判斷,
直到不相同即不是回文,或者deque大小為1或者為0,即回文。
'''

def palchecker(aString):
    chardeque = Deque()

    for ch in aString:
        chardeque.addRear(ch)

    stillEqual = True

    while chardeque.size() > 1 and stillEqual:
        first = chardeque.removeFront()
        last = chardeque.removeRear()
        if first != last:
            stillEqual = False

    return stillEqual

print(palchecker("lsdkjfskf"))
print(palchecker("radar"))

# False
# True
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 翻譯: 嚴(yán)北,公眾號(hào):devintest,轉(zhuǎn)載注明出處:http://www.itdecent.cn/p/4ca...
    嚴(yán)北閱讀 2,922評(píng)論 0 2
  • 本系列博客習(xí)題來(lái)自《算法(第四版)》,算是本人的讀書筆記,如果有人在讀這本書的,歡迎大家多多交流。為了方便討論,本...
    kyson老師閱讀 1,859評(píng)論 0 50
  • deque構(gòu)造函數(shù) deque deqT;//默認(rèn)構(gòu)造形式 deque(beg, end);//構(gòu)造函數(shù)將[beg...
    飯飯H閱讀 517評(píng)論 0 0
  • 你還不夠冷淡 面容的霜雪有些化開 你還不夠絕情 身體的血液有些回溫 在世人眼中 我希望你始終無(wú)動(dòng)于衷 在歲月面前 ...
    阿琴姑娘閱讀 996評(píng)論 76 88
  • 這些年,我都不敢回頭望,也慢慢忘記了回憶的滋味,對(duì)于大學(xué)時(shí)代,對(duì)于高中時(shí)代,我只能偶爾嘆息時(shí)間匆匆溜走,物是人非,...
    芷鈺閱讀 386評(píng)論 0 0

友情鏈接更多精彩內(nèi)容