1. 程式人生 > >python數據結構與算法(7)

python數據結構與算法(7)

sea 數據 init ins ESS RoCE 數據結構與算法 true pos

單鏈表的操作
is_empty() 鏈表是否為空 length() 鏈表?度 travel() 遍歷整個鏈表
add(item) 鏈表頭部添加元素 append(item) 鏈表尾部添加元素 insert(pos, item) 指定位置添加元素 remove(item) 刪除節點 search(item) 查找節點是否存在
單鏈表的實現

class   SingleLinkList(object):             """單鏈表"""               def __init__(self):                             self.__head =   None
                def is_empty(self):                             """判斷鏈表是否為空"""                              return  self.__head ==  None
                def length(self):                               """鏈表?度"""                              #   cur初始時指向頭節點                             cur =   self.__head                             count   =   0                               #   尾節點指向None,當未到達尾部時                               while   cur !=  None:                                               count   +=  1                                               #   將cur後移?個節點                                              cur =   cur.next                                return  count
                def travel(self):                               """遍歷鏈表"""                              cur =   self.__head                             while   cur !=  None:                                               print   cur.item,                                               cur =   cur.next                                print   ""

頭部添加元素
技術分享圖片


def add(self,   item):                              """頭部添加元素"""                                #   先創建?個保存item值的節點                             node    =   SingleNode(item)                                #   將新節點的鏈接域next指向頭節點,即_head指向的位置                               node.next   =   self.__head                             #   將鏈表的頭_head指向新節點                             self.__head =   node

尾部添加元素
技術分享圖片


def append(self,    item):                              """尾部添加元素"""                                node    =   SingleNode(item)                                #   先判斷鏈表是否為空,若是空鏈表,則將_head指向新節點                                if  self.is_empty():                                                self.__head =   node                                #   若不為空,則找到尾部,將尾節點的next指向新節點                               else:                                               cur =   self.__head                                             while   cur.next    !=  None:                                                               cur =   cur.next                                                cur.next    =   node

指定位置添加元素
技術分享圖片

def insert(self,    pos,    item):                              """指定位置添加元素"""                              #   若指定位置pos為第?個元素之前,則執?頭部插?                                if  pos <=   0:                                              self.add(item)                              #   若指定位置超過鏈表尾部,則執?尾部插?                             elif    pos >    (self.length()-1):                                              self.append(item)                               #   找到指定位置                              else:                                               node    =   SingleNode(item)                                                count   =   0                                               #   pre?來指向指定位置pos的前?個位置pos-1,初始從頭節點開 始移動到指定位置                                              pre =   self.__head                                             while   count   <    (pos-1):                                                                count   +=  1                                                               pre =   pre.next                                                #   先將新節點node的next指向插?位置的節點                                             node.next   =   pre.next                                                #   將插?位置的前?個節點的next指向新節點                                               pre.next    =   node

刪除節點

def remove(self,item):                              """刪除節點"""                              cur =   self.__head                             pre =   None                                while   cur !=  None:                                               #   找到了指定元素
if  cur.item    ==  item:                                                               #   如果第?個就是刪除的節點                                                                if  not pre:                                                                                #   將頭指針指向頭節點的後?個節點                                                                             self.__head =   cur.next                                                                else:                                                                               #   將刪除位置前?個節點的next指向刪除位置的後?個 節點                                                                                pre.next    =   cur.next                                                                break                                               else:                                                               #   繼續按鏈表後移節點                                                               pre =   cur                                                             cur =   cur.next

查找節點是否存在

def search(self,item):                              """鏈表查找節點是否存在,並返回True或者False"""                             cur =   self.__head                             while   cur !=  None:                                               if  cur.item    ==  item:                                                               return  True                                                cur =   cur.next                                return  False[/size][/font]

[font=微軟雅黑][size=3]

測試

if  __name__    ==  "__main__":             ll  =   SingleLinkList()                ll.add(1)               ll.add(2)               ll.append(3)                ll.insert(2,    4)              print   "length:",ll.length()               ll.travel()
    print   ll.search(3)                print   ll.search(5)                ll.remove(1)                print   "length:",ll.length()               ll.travel()

python數據結構與算法(7)