數據結構與算法單鏈表python描述

        今天剛用c++寫完數據結構單鏈表描述,然後無聊的情況下,編寫了python版本,當然裏面很多功能我沒有完全實現,只是寫了些簡單的單鏈表那讓我們看看吧.

       鏈表結構c++版本

       基礎理論這裏就不講解了,讓我們上代碼吧:

#定義了節點
class Node():
    __slots__ = ['_item','_next']
    def __init__(self,item):
        self._item = item
        self._next = None
    def getItem(self):
        return  self._item
    def getNext(self):
        return  self._next
    def setItem(self, newItem):
        self._item = newItem
    def setNext(self, newNext):
        self._next = newNext

    定義鏈表:

#定義鏈表
class SingleList():
    def __init__(self):
        self._head = None  #初始化爲空鏈表
    def isEmpty(self):
        return self._head == None
    def Length(self):
        current  = self._head
        count = 0
        while current != None:
            count += 1
            current = current.getNext()
        return count;
    def ShowList(self):
        current = self._head
        while current != None:
            print(current.getItem(), end=" ")
            current = current.getNext()
    def Add(self, item):
        temp = Node(item)
        temp.setNext(self._head)
        self._head =temp
    def append(self,item):
         temp = Node(item)
         if self.isEmpty():
             self._head = temp # 當爲空的時候添加到第一個位置
         else:
             current = self._head
             while current.getNext() != None:
                 current = current.getNext()
             current.setNext(temp)  #這個時候爲最後的元素
    def search(self, item):
         current = self._head
         find = False
         while current!= Node and  not find:
             if current.getItem() == item:
                 find = True
             else:
                 current = current.getNext()
         return find
    def index(self,item):
        current = self._head
        count = 0
        find = False
        while current != Node and not find:
            count += 1
            if current.getItem() == item:
                find = True
            else:
                current = current.getNext()
        if find:
            return  count
        else:
            raise Exception('%s is not in Linkedlist' % item)
    def remove(self,item):
        current = self._head
        pre = None
        while current != None:
            if current.getItem() == item:
                if not pre:
                    self._head =  current.getNext()
                else:
                    pre.setNext(current.getNext())
                break
            else:
                pre = current
                current = current.getNext()
    def insert(self, pos, item):
        if pos < 1:
            self.Add(item)
        elif pos > self.Length():
            self.append(item)
        else:
            temp = Node(item)
            count = 1
            pre = None
            current = self._head
            while count < pos:
                count +=1
                pre = current
                current = current.getNext()
            pre.setNext(temp)
            temp.setNext(current)

主函數:

if  __name__ == '__main__':
    a = SingleList()
    for i in range(1,10):
        a.append(i)
    print(a.Length())
    a.ShowList()
    print('')
    print(a.search(2))
    print(a.index(5))
    a.remove(4)
    a.ShowList()
    print()
    a.insert(3,100)
    a.ShowList()

輸出結果:

9
1 2 3 4 5 6 7 8 9 
True
5
1 2 3 5 6 7 8 9 
1 2 100 3 5 6 7 8 9 

喜歡的話可以關注我的博客,一起加油。

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