python数据结构与算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python数据结构与算法相关的知识,希望对你有一定的参考价值。

单链表的操作
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数据结构与算法的主要内容,如果未能解决你的问题,请参考以下文章

《数据结构与算法》十大经典排序算法动图演示(2019最新Python代码)

图+代码Python实现《数据结构与算法基础》

你如何在 python 中处理 graphql 查询和片段?

以下代码片段的算法复杂度

数据结构与算法冒泡排序——JavaC++Python 中的算法示例代码

有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]