数据结构与算法单链表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 

喜欢的话可以关注我的博客,一起加油。

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