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

    在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中的等号严格意义上并不是赋值,而只是引用或者参照



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值