python_链表的学习1

(本文是阅读下面的文章后总结的笔记
ps:http://mp.weixin.qq.com/s/6AvoJYP5fqQ3KzFg8NC0VQ Python数据结构实现之链表)

链表

实现过程(简单的功能)

  • 做好准备工作:做一个Node类,进行新建节点,得到下一个节点,和修改节点数据和下一个节点的引用
  • 简单功能:

(1)初始化

(2)链表添加新的元素 add()

(3)求链表的长度 size()

(4)查找元素 search()

(5)删除元素 remove()

#准备工作,实现Node
class Node(object):
    def __init__(self,initdata):
        self.data=initdata
         #代表没有下一个节点
        self.next=None
    #获得数据
    def getData(self):
        return self.data
    #获得下一个节点的引用
    def getNext(self):
        return self.next
    #修改数据
    def setData(self,newdata):
        self.data=newdata
    #修改下一节点的引用
    def setNext(self,newnext):
        self.next= newnext

class unOrderedList():
    def __init__(self):
        #初始化None表示此时链表的头部不引用任何内容
        self.head=None
    #检测是否为空链表,只有在链表中没有节点的时候为真
    def isEmpty(self):
        return self.head==None
    #基本操作的实现
    #add()在链表前端添加元素
    def add(self,item):
        #1:创建一个新节点并将新项作为数据
        temp=Node(item)
        #2:更改新节点的下一个引用,以引用旧链表的第一个节点
        temp.setNext(self.head)
        #3:重新设置链表的头,以引用新节点
        self.head=temp

    #size()求链表长度
    def size(self):
        current=self.head
        count=0
        while current!=None:
            count+=1
            current=current.getNext()
        return count

    #search()查找
    def search(self,item):
        current=self.head
        found=False
        while current != None and not found:
            if current.getData()==item:
                found =True
            else:
                current =current.getNext()
        return found

    #remove()删除
    def remove(self,item):
        current=self.head
        previous=None
        found=False
        #一旦found为True,current就是对包含要删除的项的节点的引用。
        while not found:
            if current.getData()==item:
                found=True
            else:
                previous= current
                current =current.getNext()
        if previous ==None:
#当要删除的项目==链表中的第一个项,
#这时候previous还是None,需要修改head一引用current之后的节点
            self.head =current.getNext()
        else:
            #previous的对下一节点的引用设为current的下一节点。
            previous.setNext(current.getNext())



简单事例

>>> ================================ RESTART ================================
>>> 
>>> #准备工作
>>> tmp=Node(33)
>>> tmp
<__main__.Node object at 0x036AECD0>
>>> tmp.getData()
33
>>> tmp.setData(2)
>>> tmp.getData()
2
>>> m_y=unOrderedList()
>>> #开始实现各种基本功能
>>> m_y.add(22)
>>> m_y.add(32)
>>> m_y.add(12)
>>> m_y.size()
3
>>> m_y.search(122)
False
>>> m_y.search(12)
True
>>> m_y.remove(22)
>>> m_y.search(22)
False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值