雙向鏈表

  • 雙向鏈表定義: “雙向鏈表”相對于“單向鏈表”是一種更復(fù)雜的鏈表。原因在于恨憎, 雙向鏈表的每個節(jié)點有兩個鏈接地址:
    • next:指向下一個節(jié)點,當(dāng)此節(jié)點為 節(jié)點時郊楣,指向空值;
    • pre: 指向前一個節(jié)點憔恳,當(dāng)此節(jié)點為 節(jié)點時,指向空值
class LRUCache(object):
    def __init__(self, capacity):
        # cache 的最大記錄數(shù)
        self.maxsize = capacity
        # 用于真實的存儲數(shù)據(jù)
        self.inner_dd = {}
        # 鏈表-頭指針
        self.head = None
        # 鏈表-尾指針
        self.tail = None

    def put(self, key, value):
        # 達到指定大小
        if len(self.inner_dd) >= self.maxsize:
            self.remove_head_node()

        node = Node()
        node.data = (key, value)
        self.insert_to_tail(node)
        self.inner_dd[key] = node

    def insert_to_tail(self, node):
        if self.tail is None:
            self.tail = node
            self.head = node
        else:
            self.tail.next = node
            node.pre = self.tail
            self.tail = node

    def remove_head_node(self):
        node = self.head
        del self.inner_dd[node.data[0]]
        node = None
        self.head = self.head.next
        self.head.pre = None

    def get(self, key):
        if key in self.inner_dd:
            # 如果命中, 需要將對應(yīng)的節(jié)點移動到隊列的尾部
            node = self.inner_dd.get(key)
            self.move_to_tail(node)
            return node.data[1]
        return None

    def move_to_tail(self, node):
        # 只需處理在隊列頭部和中間的情況
        if not (node == self.tail):
            if node == self.head:
                self.head = node.next
                self.head.pre = None
                self.tail.next = node
                node.pre = self.tail
                node.next = None
                self.tail = node
            else:
                pre_node = node.pre
                next_node = node.next
                pre_node.next = next_node
                next_node.pre = pre_node

                self.tail.next = node
                node.pre = self.tail
                node.next = None
                self.tail = node


class Node(object):
    def __init__(self):
        self.pre = None
        self.next = None
        # (key, value)
        self.data = None

    def __eq__(self, other):
        if self.data[0] == other.data[0]:
            return True
        return False

    def __str__(self):
        return str(self.data)


if __name__ == '__main__':
    obj = LRUCache(10)
    param_1 = obj.get(key)
    obj.put(key, value)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末净蚤,一起剝皮案震驚了整個濱河市钥组,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌今瀑,老刑警劉巖程梦,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異橘荠,居然都是意外死亡屿附,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門哥童,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挺份,“玉大人,你說我怎么就攤上這事贮懈≡炔矗” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵朵你,是天一觀的道長各聘。 經(jīng)常有香客問我,道長撬呢,這世上最難降的妖魔是什么伦吠? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮魂拦,結(jié)果婚禮上毛仪,老公的妹妹穿的比我還像新娘。我一直安慰自己芯勘,他們只是感情好箱靴,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荷愕,像睡著了一般衡怀。 火紅的嫁衣襯著肌膚如雪棍矛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天抛杨,我揣著相機與錄音够委,去河邊找鬼。 笑死怖现,一個胖子當(dāng)著我的面吹牛茁帽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屈嗤,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼潘拨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了饶号?” 一聲冷哼從身側(cè)響起铁追,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茫船,沒想到半個月后琅束,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡透硝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年狰闪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片濒生。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡埋泵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出罪治,到底是詐尸還是另有隱情丽声,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布觉义,位于F島的核電站雁社,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晒骇。R本人自食惡果不足惜霉撵,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洪囤。 院中可真熱鬧徒坡,春花似錦、人聲如沸瘤缩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剥啤。三九已至锦溪,卻和暖如春不脯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刻诊。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工防楷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坏逢。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓域帐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親是整。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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