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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Tales_/article/details/48145749

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

__author__ = 'jiangzhiheng'
#coding=utf-8
import copy


class node():                             #定义一个节点类
    def __init__(self,val,p=0):
        self.data = val
        self.next = p

class 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.next


l = linklist()
l.initlist(range(7))
print(l.getlength())
l.insert(10,5)
print(l.getitem(6))
l.remove(5)
print(l.search(5))
i = 1
while i<l.getlength():
    print(l.getitem(i),end=',')
    i+=1

结果


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



展开阅读全文

没有更多推荐了,返回首页