码迷,mamicode.com
首页 > 编程语言 > 详细

python数据结构与算法(7)

时间:2018-11-28 13:15:13      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:head   int   length   return   false   链表的操作   process   分享图片   sel   

单链表的操作
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)

标签:head   int   length   return   false   链表的操作   process   分享图片   sel   

原文地址:http://blog.51cto.com/13517854/2323063

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!