python学习笔记01--链表的实现

来源:互联网 发布:java中文文档 编辑:程序博客网 时间:2024/06/18 03:13

    在C语言中,我们通常通过“指针+结构体”来实现链表,但是在python中并没有指针,所以我们必须考虑其它 的方法。在这里,我们通过定义节点类node,并通过类的嵌套引用来实现链表。node类的定义就像链表中的节点一样,包含两个对象,节点的值(data)和表示指向下一个节点的next。在这里我们通过节点的next对象再次引用类node来实现next指向下一个节点的目标,这样不断嵌套应用,链表也就实现了。代码如下:

__author__ = 'jiangzhiheng'#coding=utf-8import copyclass node():                             #定义一个节点类    def __init__(self,val,p=0):        self.data = val        self.next = pclass linklist():    def __init__(self):        self.head = 0    def initlist(self,data):        self.head = node(data[0])        p = self.head        for i in data[1:]:            p.next = node(i)            p = p.next    def getlength(self):       #获得链表元素的个数        p = self.head        length = 0        while p!=0:            length+=1            p = p.next        return length    def insert(self,item,index):        if index>self.getlength() or index<=0:            print('please enter a valid index')            return        p = self.head        q = node(item)        while (index-1)!=0:        #在第index后面插入对象item            index=index-1            p = p.next        post = copy.deepcopy(p.next)        p.next = q        q.next = post    def getitem(self,index):        if index>self.getlength() or index<=0:            print('please enter a valid index')            return        p = self.head        while (index-1)!=0:            index=index-1            p = p.next        return p.data         #返回链表第index个对象的值    def remove(self,index):        if index>self.getlength() or index<=0:            print('please enter a valid index')            return        p = self.head        if index == 1:            self.head = p.next            return        while (index-2)!=0:           #移除链表中的第index对象            index=index-1            p = p.next        p.next = p.next.next    def search(self,item):      #在链表中搜索对象item        p = self.head        i = 1        while p!=0:           if p.data == item:               return i           i+=1           p = p.nextl = linklist()l.initlist(range(7))print(l.getlength())l.insert(10,5)print(l.getitem(6))l.remove(5)print(l.search(5))i = 1while i<l.getlength():    print(l.getitem(i),end=',')    i+=1

结果


    在这里我们需要注意的是python中的‘=’符号与C语言中的‘=’区别,C语言的等号表示赋值,而python中的等号严格意义上并不是赋值,而只是引用或者参照



0 0
原创粉丝点击