數(shù)據(jù)結(jié)構(gòu)-循環(huán)隊(duì)列(Python實(shí)現(xiàn))

今天我們來(lái)到了循環(huán)隊(duì)列這一節(jié),之前的文章中项滑,我介紹過(guò)了用python自帶的列表來(lái)實(shí)現(xiàn)隊(duì)列,這是最簡(jiǎn)單的實(shí)現(xiàn)方法涯贞。

但是枪狂,我們都知道危喉,在列表中刪除第一個(gè)元素和刪除最后一個(gè)元素花費(fèi)的時(shí)間代價(jià)是不一樣的,刪除列表的第一個(gè)元素州疾,那么在它之后的所有元素都要進(jìn)行移動(dòng)辜限。所以當(dāng)列表特別長(zhǎng)的時(shí)候,這個(gè)代價(jià)就比較明顯了严蓖。我們本文介紹的循環(huán)隊(duì)列可以避免這個(gè)問(wèn)題薄嫡,同樣我們上篇文章提到的用鏈表實(shí)現(xiàn)的方法也可以避免。

下面颗胡,我們來(lái)介紹循環(huán)隊(duì)列毫深。

循壞隊(duì)列

循環(huán)隊(duì)列,就是將普通的隊(duì)列首尾連接起來(lái)毒姨, 形成一個(gè)環(huán)狀哑蔫,并分別設(shè)置首尾指針,用來(lái)指明隊(duì)列的頭和尾手素。每當(dāng)我們插入一個(gè)元素鸳址,尾指針就向后移動(dòng)一位,當(dāng)然泉懦,在這里我們隊(duì)列的最大長(zhǎng)度是提前定義好的稿黍,當(dāng)我們彈出一個(gè)元素,頭指針就向后移動(dòng)一位崩哩。

這樣巡球,列表中就不存在刪除操作,只有修改操作邓嘹,從而避免了刪除前面節(jié)點(diǎn)造成的代價(jià)大的問(wèn)題酣栈。

好,話不多說(shuō)汹押,我們用代碼來(lái)實(shí)現(xiàn)一下

class Loopqueue:
    def __init__(self, length):
        self.head = 0
        self.tail = 0
        self.maxSize = length
        self.cnt = 0
        self.__list = [None]*length

這里同樣矿筝,我們定義一個(gè)隊(duì)列類,在實(shí)例化循環(huán)隊(duì)列的時(shí)候棚贾,要求指定隊(duì)列的大小窖维,除了首尾指針以及隊(duì)列最大長(zhǎng)度之外,我們還聲明一個(gè)表示隊(duì)列當(dāng)前長(zhǎng)度的屬性cnt妙痹。

接下來(lái)我們給隊(duì)列增加一些操作:

  • 判空
    def isEmpty(self):
        return self.cnt == 0
  • 判滿
    def isFull(self):
        return self.cnt == self.maxSize
  • 添加元素
    def push(self, data):
        if self.isFull():
            return False
        if self.isEmpty():
            self.__list[0] = data
            self.head = 0
            self.tail = 0
            self.cnt = 1
            return True
        self.tail = (self.tail+1)%self.maxSize
        self.cnt += 1
        self.__list[self.tail] = data
        return True
  • 彈出元素
    def pop(self):
        if self.isEmpty():
            return False
        data = self.__list[self.head]
        self.head = (self.head+1)%self.maxSize
        self.cnt -= 1
        return data
  • 清空隊(duì)列
    def clear(self):
        self.head = 0
        self.tail = 0
        self.cnt = 0
        return True
  • 定義len和print函數(shù)
    def __len__(self):
        return self.cnt

    def __str__(self):
        s = ''
        for i in range(self.cnt):
            index = (i + self.head) % self.maxSize
            s += str(self.__list[index])+' '
        return s

OK铸史,我們的循環(huán)隊(duì)列類就定義好了,如果你看過(guò)介紹隊(duì)列的文章怯伊,就會(huì)發(fā)現(xiàn)循環(huán)隊(duì)列和普通隊(duì)列的操作在邏輯上還是有一些相似的琳轿。

代碼并不難,相信你已經(jīng)完全理解了,自己動(dòng)手操作一下吧崭篡。

你還了解哪些隊(duì)列類型呢挪哄?留言告訴我吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末媚送,一起剝皮案震驚了整個(gè)濱河市中燥,隨后出現(xiàn)的幾起案子寇甸,更是在濱河造成了極大的恐慌塘偎,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拿霉,死亡現(xiàn)場(chǎng)離奇詭異吟秩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)绽淘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門涵防,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人沪铭,你說(shuō)我怎么就攤上這事壮池。” “怎么了杀怠?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵椰憋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我赔退,道長(zhǎng)橙依,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任硕旗,我火速辦了婚禮窗骑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漆枚。我一直安慰自己创译,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布墙基。 她就那樣靜靜地躺著软族,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碘橘。 梳的紋絲不亂的頭發(fā)上互订,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音痘拆,去河邊找鬼仰禽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吐葵。 我是一名探鬼主播规揪,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼温峭!你這毒婦竟也來(lái)了猛铅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凤藏,失蹤者是張志新(化名)和其女友劉穎奸忽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揖庄,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栗菜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蹄梢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疙筹。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖禁炒,靈堂內(nèi)的尸體忽然破棺而出而咆,到底是詐尸還是另有隱情,我是刑警寧澤幕袱,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布暴备,位于F島的核電站,受9級(jí)特大地震影響凹蜂,放射性物質(zhì)發(fā)生泄漏馍驯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一玛痊、第九天 我趴在偏房一處隱蔽的房頂上張望汰瘫。 院中可真熱鬧,春花似錦擂煞、人聲如沸混弥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蝗拿。三九已至,卻和暖如春蒿涎,著一層夾襖步出監(jiān)牢的瞬間哀托,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工劳秋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仓手,地道東北人胖齐。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嗽冒,于是被迫代替她去往敵國(guó)和親呀伙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容