python鏈表類的實現,增改插刪

 鏈表作爲數據結構的基礎,二叉樹,隊列和棧都可以用它實現,相比數組其優勢是可以快捷方便的增改刪插,但是缺點是查詢不方便,爲便於理解寫可以對其進行包裝測試。

from Node import Node
class LinkList(object):
    def __init__(self):                  #初始實例化的鏈表類,默認表頭爲空
        self.head = None
    def init_list(self, data):           
        self.head = Node(None)          
        p = self.head                   

        for i in data:                   #遍歷所有的data,以data中元素的數量生產
            p.next = Node(i)             
            p = p.next                   
                                         
    def show(self):
        p = self.head.next             
        while p is not None:           
            print(p.val)                
            p = p.next                  
        print()
    def append(self, item):             #尾端插入數據
        p = self.head                   
        while p.next is not None:       
            p = p.next
        p.next = Node(item)             
    def add(self, item):                #在表頭插入數據
        new_head = Node(item)           
        p = self.head.next             
        new_head.next = p              
        self.head.next = new_head      
    def alter(self, index, value):      #改變鏈表中索引數的具體值
        p = self.head                  
        current_index = 0               #當前索引爲0,0索引值即爲指向表頭
        while p.next is not None and current_index < index:           
            p = p.next                                                   
            current_index += 1
        if p.next == None and current_index is not index:                                         
            raise IndexError("index out of range")
        else:
            p.val = value                                                
    def get_length(self):
        p = self.head
        length = 0
        while p.next is not None:
            p  = p.next
            length += 1
        return length

    def clear(self):  # 鏈表清空
        p = self.head
        p.next = None
    def insert(self, index, item):
        p = self.head
        current_index = 0
        insert_node = Node(item)
        while p.next is not None and current_index < index -1:
            p = p.next
            current_index += 1
        if p.next == None and current_index is not index - 1:
            raise IndexError("index out of range")
        else:
            temp = p.next
            p.next = insert_node
            insert_node.next = temp

    def delete(self, index):
        p = self.head
        current_index = 0
        while p.next is not None and current_index < index - 1:
            p = p.next
            current_index += 1
        if p.next == None:
            raise IndexError("index out of range")
        else:
            p.next = p.next.next




class Node(object):                      
    def __init__(self, val, next = None):#節點的類對象,初始化中第一個參數是數據,默認next爲空
        self.val = val                   #數據保存
        self.next = next





from LinkList import LinkList
link = LinkList()
list = [13,53,21,32,4,1,3,5,2,1,2,3,1]
link.init_list(list)
link.insert(2,1323)
print(link.get_length())


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章