黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

鏈表詳解(python實現)

系統 2065 0

一、 定義見百度百科鏈表

鏈表由表頭和節點組成,節點分為數據域和指針域,數據域中存貯數據元素,指針域存儲下個結點的地址

二、單鏈表實現邏輯

  1. 創建節點類Node和鏈表類Linklist,Linklist類中包含head屬性,head的值為0或Node對象,Node類中包含value屬性存儲數據,next屬性存儲下個節點的地址(Node對象)
  2. 循環節點從head開始取next屬性,直到next=0為止,返回當前對象
  3. 添加節點時調用循環方法返回最后一個節點對象,把返回節點的next改為當前Node對象,如當前沒有節點,則Linklist實例的head屬性修改為當前Node對象
  4. 刪除節點時把前一個節點的next屬性修改為后一個節點的Node對象,如果當前節點是最后一個對象

三、單鏈表代碼實現

            
              
                class
              
              
                Node
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
              value
              
                ,
              
              node 
              
                =
              
              
                0
              
              
                )
              
              
                :
              
              
        self
              
                .
              
              value 
              
                =
              
               value
        self
              
                .
              
              
                next
              
              
                =
              
               node


              
                class
              
              
                LinkList
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
               value
              
                =
              
              
                0
              
              
                ,
              
              
                *
              
              args
              
                )
              
              
                :
              
              
        self
              
                .
              
              lenth 
              
                =
              
              
                0
              
              
                #創建表頭head
              
              
        self
              
                .
              
              head 
              
                =
              
              
                0
              
              
                if
              
               value 
              
                ==
              
              
                0
              
              
                else
              
               Node
              
                (
              
              value
              
                )
              
              
                #如果初始化實例時傳入多個參數,循環加入鏈表
              
              
        p 
              
                =
              
               self
              
                .
              
              head
        
              
                for
              
               i 
              
                in
              
              
                [
              
              
                *
              
              args
              
                ]
              
              
                :
              
              
            node 
              
                =
              
               Node
              
                (
              
              i
              
                )
              
              
            p
              
                .
              
              
                next
              
              
                =
              
               node
            p 
              
                =
              
               p
              
                .
              
              
                next
              
              
                def
              
              
                append
              
              
                (
              
              self
              
                ,
              
              value
              
                )
              
              
                :
              
              
                if
              
               self
              
                .
              
              head 
              
                ==
              
              
                0
              
              
                :
              
              
            self
              
                .
              
              head 
              
                =
              
               Node
              
                (
              
              value
              
                )
              
              
                else
              
              
                :
              
                  
            self
              
                .
              
              iternodes
              
                (
              
              
                )
              
              
                .
              
              
                next
              
              
                =
              
               Node
              
                (
              
              value
              
                )
              
              
                def
              
              
                iternodes
              
              
                (
              
              self
              
                )
              
              
                :
              
              
        p 
              
                =
              
               self
              
                .
              
              head
        
              
                while
              
               p
              
                :
              
              
                print
              
              
                (
              
              p
              
                .
              
              value
              
                )
              
              
                if
              
              
                not
              
               p
              
                .
              
              
                next
              
              
                :
              
              
                return
              
               p
            p 
              
                =
              
               p
              
                .
              
              
                next
              
            
          

四、雙鏈表實現

  • 對比單鏈表,Node對象增加了before屬性記錄前一節點對象,同時增加insert、pop等方法
  • 利用python的特殊方法,把Linklist類構造成一個類似list的類,可以使用len()方法,可迭代
            
              
                #創建Node類
              
              
                class
              
              
                Node
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
               value
              
                ,
              
               before
              
                =
              
              
                0
              
              
                ,
              
               node
              
                =
              
              
                0
              
              
                )
              
              
                :
              
              
        self
              
                .
              
              value 
              
                =
              
               value
        self
              
                .
              
              
                next
              
              
                =
              
               node
        self
              
                .
              
              before 
              
                =
              
               before
        

              
                #創建鏈表類
              
              
                class
              
              
                LinkList
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
               value
              
                =
              
              
                0
              
              
                ,
              
              
                *
              
              args
              
                )
              
              
                :
              
              
        self
              
                .
              
              lenth 
              
                =
              
              
                0
              
              
                #創建表頭head
              
              
        self
              
                .
              
              head 
              
                =
              
              
                0
              
              
                if
              
               value 
              
                ==
              
              
                0
              
              
                else
              
               Node
              
                (
              
              value
              
                )
              
              
                #如果初始化實例時傳入多個參數,循環加入鏈表
              
              
                if
              
               self
              
                .
              
              head 
              
                !=
              
              
                0
              
              
                :
              
              
            self
              
                .
              
              lenth 
              
                +=
              
              
                1
              
              
            p 
              
                =
              
               self
              
                .
              
              head
            
              
                for
              
               i 
              
                in
              
              
                [
              
              
                *
              
              args
              
                ]
              
              
                :
              
              
                node 
              
                =
              
               Node
              
                (
              
              i
              
                )
              
              
                p
              
                .
              
              
                next
              
              
                =
              
               node
                node
              
                .
              
              before 
              
                =
              
               p
                p 
              
                =
              
               p
              
                .
              
              
                next
              
              
                self
              
                .
              
              lenth 
              
                +=
              
              
                1
              
              
                #append方法,判斷表頭是否為空,每次執行lenth屬性值+1
              
              
                def
              
              
                append
              
              
                (
              
              self
              
                ,
              
               value
              
                )
              
              
                :
              
              
                if
              
               self
              
                .
              
              head 
              
                ==
              
              
                0
              
              
                :
              
              
            self
              
                .
              
              head 
              
                =
              
               Node
              
                (
              
              value
              
                )
              
              
            self
              
                .
              
              lenth 
              
                +=
              
              
                1
              
              
                else
              
              
                :
              
              
            p 
              
                =
              
               Node
              
                (
              
              value
              
                )
              
              
            cur 
              
                =
              
               self
              
                .
              
              iternodes
              
                (
              
              
                )
              
              
            cur
              
                .
              
              
                next
              
              
                =
              
               p
            p
              
                .
              
              before 
              
                =
              
               cur
            self
              
                .
              
              lenth 
              
                +=
              
              
                1
              
              
                #insert方法(后插),是否表頭特殊處理,每次執行lenth屬性值+1
              
              
                def
              
              
                instert
              
              
                (
              
              self
              
                ,
              
               value
              
                ,
              
               index
              
                )
              
              
                :
              
              
                if
              
               self
              
                .
              
              head 
              
                ==
              
              
                0
              
              
                :
              
              
            self
              
                .
              
              append
              
                (
              
              value
              
                )
              
              
                else
              
              
                :
              
              
            p 
              
                =
              
               Node
              
                (
              
              value
              
                )
              
              
            prv 
              
                =
              
               self
              
                .
              
              iternodes
              
                (
              
              index
              
                )
              
              
                if
              
               prv
              
                .
              
              __dict__
              
                .
              
              get
              
                (
              
              
                'head'
              
              
                )
              
              
                :
              
              
                p
              
                .
              
              before 
              
                =
              
               prv
              
                .
              
              head
                prv
              
                .
              
              head
              
                .
              
              
                next
              
              
                =
              
               p
                
              
                if
              
               prv
              
                .
              
              head
              
                .
              
              
                next
              
              
                !=
              
              
                0
              
              
                :
              
              
                    prv
              
                .
              
              head
              
                .
              
              
                next
              
              
                .
              
              before 
              
                =
              
               p
                    p
              
                .
              
              
                next
              
              
                =
              
               prv
              
                .
              
              head
              
                .
              
              
                next
              
              
                else
              
              
                :
              
              
               
                p
              
                .
              
              before 
              
                =
              
               prv
                
              
                if
              
               prv
              
                .
              
              
                next
              
              
                !=
              
              
                0
              
              
                :
              
              
                    prv
              
                .
              
              
                next
              
              
                .
              
              before 
              
                =
              
               p
                p
              
                .
              
              
                next
              
              
                =
              
               prv
              
                .
              
              
                next
              
              
                prv
              
                .
              
              
                next
              
              
                =
              
               p
                
            self
              
                .
              
              lenth 
              
                +=
              
              
                1
              
              
                #遍歷方法,每次從表頭開始
              
              
                def
              
              
                iternodes
              
              
                (
              
              self
              
                ,
              
               index
              
                =
              
              
                None
              
              
                )
              
              
                :
              
              
                if
              
               index 
              
                is
              
              
                not
              
              
                None
              
              
                :
              
              
                if
              
               index 
              
                >
              
               self
              
                .
              
              lenth
              
                :
              
              
                raise
              
               Exception
              
                (
              
              
                "索引超界"
              
              
                )
              
              
            p 
              
                =
              
               self
              
                .
              
              head
            i 
              
                =
              
              
                0
              
              
                while
              
               p
              
                :
              
              
                if
              
               i 
              
                ==
              
               index
              
                :
              
              
                return
              
               p
                p 
              
                =
              
               p
              
                .
              
              
                next
              
              
                i 
              
                +=
              
              
                1
              
              
                else
              
              
                :
              
              
            p 
              
                =
              
               self
              
                .
              
              head
            
              
                while
              
               p
              
                :
              
              
                if
              
              
                not
              
               p
              
                .
              
              
                next
              
              
                :
              
              
                return
              
               p
                p 
              
                =
              
               p
              
                .
              
              
                next
              
              
                #刪除方法,刪除指定索引的值,表頭特殊處理,每次執行lenth屬性值-1
              
              
                def
              
              
                pop
              
              
                (
              
              self
              
                ,
              
               index
              
                =
              
              
                None
              
              
                )
              
              
                :
              
              
                if
              
               self
              
                .
              
              lenth 
              
                ==
              
              
                0
              
              
                :
              
              
                return
              
              
                'LinkList is empty'
              
              
                if
              
               index 
              
                is
              
              
                None
              
              
                :
              
              
                if
              
               self
              
                .
              
              lenth 
              
                ==
              
              
                1
              
              
                :
              
              
                self
              
                .
              
              head 
              
                =
              
              
                0
              
              
                self
              
                .
              
              lenth 
              
                -=
              
              
                1
              
              
                return
              
              
                if
              
               self
              
                .
              
              iternodes
              
                (
              
              
                )
              
              
                .
              
              before 
              
                ==
              
              
                0
              
              
                :
              
              
                self
              
                .
              
              iternodes
              
                (
              
              
                )
              
              
                .
              
              value 
              
                =
              
              
                0
              
              
                else
              
              
                :
              
              
                self
              
                .
              
              iternodes
              
                (
              
              
                )
              
              
                .
              
              before
              
                .
              
              
                next
              
              
                =
              
              
                0
              
              
                elif
              
               index 
              
                ==
              
              
                0
              
              
                :
              
              
                if
              
               self
              
                .
              
              iternodes
              
                (
              
              index
              
                )
              
              
                .
              
              
                next
              
              
                ==
              
              
                0
              
              
                :
              
              
                self
              
                .
              
              head 
              
                =
              
              
                0
              
              
                else
              
              
                :
              
              
                self
              
                .
              
              head
              
                .
              
              
                next
              
              
                .
              
              before 
              
                =
              
              
                0
              
              
                self
              
                .
              
              head 
              
                =
              
               self
              
                .
              
              head
              
                .
              
              
                next
              
              
                else
              
              
                :
              
              
            self
              
                .
              
              iternodes
              
                (
              
              index
              
                )
              
              
                .
              
              before
              
                .
              
              
                next
              
              
                =
              
               self
              
                .
              
              iternodes
              
                (
              
              index
              
                )
              
              
                .
              
              
                next
              
              
            self
              
                .
              
              iternodes
              
                (
              
              index
              
                )
              
              
                .
              
              
                next
              
              
                .
              
              before 
              
                =
              
               self
              
                .
              
              iternodes
              
                (
              
              index
              
                )
              
              
                .
              
              before
        self
              
                .
              
              lenth 
              
                -=
              
              
                1
              
              
                def
              
              
                __len__
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                return
              
               self
              
                .
              
              lenth

    
              
                def
              
              
                __iter__
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                yield
              
              
                from
              
              
                (
              
              self
              
                .
              
              iternodes
              
                (
              
              i
              
                )
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              self
              
                .
              
              lenth
              
                )
              
              
                )
              
            
          

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論