數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)--雙向鏈表(python)

概念

雙向鏈表(Double_linked_list)也叫雙鏈表,是鏈表的一種禽篱,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有
兩個(gè)指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個(gè)結(jié)點(diǎn)開始立帖,都可
以很方便地訪問它的前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn)。

實(shí)現(xiàn)

class Node:
    def __init__(self, data):
        self.data = data    # 數(shù)據(jù)域
        self.next = None    # 指針域(直接后繼)
        self.prev = None    # 指針域(直接前驅(qū))


class DoubleLinkedList:
    """
    雙向鏈表
    """

    def __init__(self):
        self._head = None

    # 判斷鏈表是否為空
    def is_empty(self):
        return bool(self._head)

    # 返回鏈表長(zhǎng)度
    @property
    def size(self):
        current = self._head
        count = 0
        while current is not None:
            count += 1
            current = current.next
        return current

    # 遍歷鏈表
    def travel(self):
        current = self._head
        while current is not None:
            print(current.data)
            current = current.next

    # 在鏈表頭部插入元素
    def add(self, value):
        new_node = Node(value)
        if self.is_empty():
            self._head = new_node
        else:
            new_node.next, self._head.prev = self._head, new_node
            self._head = new_node

    # 在鏈表尾部插入元素
    def append(self, value):
        new_node = Node(value)
        if self.is_empty():
            self._head = new_node
        else:
            _current = self._head
            while _current.next is not None:
                _current = _current.next
            _current.next, new_node.prev = new_node, _current

    # 查找元素是否存在
    def search(self, value):
        _current = self._head
        while _current is not None:
            if _current.data == value:
                return True
            _current = _current.next
        return False

    # 在指定位置插入節(jié)點(diǎn)
    def insert(self, position, value):
        if position < 0 or position > self.size:
            raise IndexError("Position out of range.")
        if position == 0:
            self.add(value)
        else:
            _node = Node(value)
            _current = self._head
            i = 0
            while i != position:
                i += 1
                _current = _current.next
            _prev = _current.prev
            _prev.next, _node.prev = _node, _prev
            _node.next, _current.prev = _current, _node

    # 刪除指定位置的節(jié)點(diǎn)
    def remove(self, position):
        if self.is_empty():
            return None
        if position < 0 or position > self.size - 1:
            raise IndexError("Position out of range.")
        _current = self._head
        i = 0
        while i != position:
            i += 1
            _current = _current.next
        _prev = _current.prev
        _next = _current.next
        _prev.next, _next.prev = _next, _prev
        _current.next, _current.prev = None, None
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末悠砚,一起剝皮案震驚了整個(gè)濱河市晓勇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哩簿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酝静,死亡現(xiàn)場(chǎng)離奇詭異节榜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)别智,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門宗苍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事讳窟∪眉撸” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵丽啡,是天一觀的道長(zhǎng)谋右。 經(jīng)常有香客問我,道長(zhǎng)补箍,這世上最難降的妖魔是什么改执? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮坑雅,結(jié)果婚禮上辈挂,老公的妹妹穿的比我還像新娘。我一直安慰自己裹粤,他們只是感情好终蒂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遥诉,像睡著了一般拇泣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上突那,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天挫酿,我揣著相機(jī)與錄音,去河邊找鬼愕难。 笑死早龟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猫缭。 我是一名探鬼主播葱弟,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼猜丹!你這毒婦竟也來了芝加?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤射窒,失蹤者是張志新(化名)和其女友劉穎藏杖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脉顿,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蝌麸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了艾疟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片来吩。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敢辩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弟疆,到底是詐尸還是另有隱情戚长,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布怠苔,位于F島的核電站同廉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嘀略。R本人自食惡果不足惜恤溶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望帜羊。 院中可真熱鬧咒程,春花似錦、人聲如沸讼育。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)奶段。三九已至饥瓷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痹籍,已是汗流浹背呢铆。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蹲缠,地道東北人棺克。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像线定,于是被迫代替她去往敵國(guó)和親娜谊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系斤讥,并對(duì)這種結(jié)構(gòu)定義相應(yīng)的運(yùn)算纱皆,而且確保經(jīng)過這...
    Winterfell_Z閱讀 5,796評(píng)論 0 13
  • 基本概念 鏈表的含義: 鏈表是一種用于存儲(chǔ)數(shù)據(jù)集合的數(shù)據(jù)結(jié)構(gòu),具有以下屬性 相鄰元素之間通過指針相連 最后一個(gè)元素...
    古劍誅仙閱讀 1,006評(píng)論 0 3
  • 目錄 1芭商、屬性 2派草、鏈表和數(shù)組的區(qū)別 2.1、數(shù)組概述 2.2铛楣、數(shù)組和鏈表優(yōu)缺點(diǎn) 2.3近迁、鏈表和數(shù)組的比較 3、單...
    我哈啊哈啊哈閱讀 2,804評(píng)論 1 41
  • 鏈表是線性表的鏈?zhǔn)酱鎯?chǔ)方式蛉艾,邏輯上相鄰的數(shù)據(jù)在計(jì)算機(jī)內(nèi)的存儲(chǔ)位置不一定相鄰钳踊,那么怎么表示邏輯上的相鄰關(guān)系呢? 可以...
    rainchxy閱讀 1,957評(píng)論 0 6
  • 轉(zhuǎn)自:http://blog.csdn.net/oreo_go/article/details/52116214 ...
    YYT1992閱讀 976評(píng)論 0 4