1. 程式人生 > >python資料結構與演算法(7)

python資料結構與演算法(7)

單鏈表的操作
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   ""

頭部新增元素
python資料結構與演算法(7)


def add(self,   item):                              """頭部新增元素"""                                #   先建立⼀個儲存item值的節點                             node    =   SingleNode(item)                                #   將新節點的連結域next指向頭節點,即_head指向的位置                               node.next   =   self.__head                             #   將連結串列的頭_head指向新節點                             self.__head =   node

尾部新增元素
python資料結構與演算法(7)


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

指定位置新增元素
python資料結構與演算法(7)

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()