數據結構之單鏈表及python實現

      線性表的鏈式存儲又稱爲單鏈表,特色指通過一組任意存儲單元來存儲線性表種的數據元素,爲數據元素之間建立起線性關係。每個元素間邏輯上相鄰,物理位置不相鄰。

      鏈式存儲優點在於插入刪除,缺點查找速度慢,以下是鏈式表的python實現:

#coding:utf-8

'''
author:xzfreewind
'''
class Node(object):
    def __init__(self,val,p=0):
        self.value = val
        self.next = p


class linlList(object):
    def __init__(self):
        self.head = 0

    #將數組初始化成鏈表
    def initlist(self,list):
        self.head = Node(list[0])
        p = self.head
        for i in list[1:]:
            node = Node(i)
            p.next = node
            p = p.next

    #獲取鏈表長度
    def getLength(self):
        length = 0
        p = self.head
        while p != 0:
            length += 1
            p = p.next
        return length


    #鏈表是否爲空
    def isEmpty(self):
        if self.getLength() == 0:
            return True
        else:
            return False

    #在鏈表尾部增加元素
    def push(self,value):
        if self.head == 0:
            self.head = Node(value)
        else:
            p = self.head
            while p.next != 0:
                p = p.next
            p.next = Node(value)

    #刪除鏈表尾部元素
    def pop(self):
        p = self.head
        q = p.next
        while p.next != 0:
            q = p
            p = p.next
        q.next = 0

    #指定位置插入鏈表..
    def insert(self,index,value):
        if self.getLength() < index:   #如果index大於鏈表長度,則返回IndexError
            raise IndexError
        elif self.getLength() == index:   #如果index等於鏈表長度,則添加至表尾
            self.push(value)
        else:
            p = self.head
            length = 0
            while length < index:
                length += 1
                q = p
                p = p.next
            node = Node(value)
            q.next = node
            node.next = p

    #刪除鏈表指定位置元素
    def delete(self,index):
        if self.getLength() <= index:
            raise IndexError
        elif self.getLength() == index-1:
            self.pop()
        else:
            p = self.head
            length = 0
            if index == 0:
               self.head = p.next
            else:
                while length < index:
                    length += 1
                    q = p
                    p = p.next
                q.next = p.next


    #獲取指定位置鏈表
    def getitem(self,index):
        length = 0
        if self.getLength() <= index:   #如果index大於鏈表長度,則返回IndexError
            raise IndexError
        else:
            p = self.head
            while length < index:
                length += 1
                p = p.next
            return p.value

    #輸出鏈表
    def outLinklist(self):
        p = self.head
        while p != 0:
            print p.value
            p = p.next
    #清空鏈表
    def clear(self):
        self.head = 0


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