关于Python实现单链表

话不多说,直接上代码:

#链表的实现:
#节点Node     #可以理解为节点是地址,节点.getData是所存数据
class Node:
    def __init__(self,initdata):
        self.data = initdata    #initdata 为节点信息
        self.next = None        #地址为空

    def getDate(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):
        self.head = None

    def isEmpty(self):             #复杂度为 O(1)
        return self.head == None   #第一个节点是否指向空


    def add(self,item):          #大概意思就是,[1]里加个temp→[temp,1]
                                 #先创一个节点temp,然后把表头所指向的1
                                 #放到它的下一个节点上,然后再把表头指向temp.
        temp = Node(item)        #设定一个节点,存放数据为item
        temp.setNext(self.head)  #temp下一个节点指向表头所指节点的数据
        self.head = temp         #表头指向 temp

        
    def size(self):
        current = self.head      #指向表头地址
        count = 0
        while current != None:   #地址不为空
            count = count+1
            current = current.getNext()  #指向下一节点地址
        return conut


    def search(self,item):
        current = self.head    #指向表头地址
        found = False
        while current != None and not found:
            if current.getDate() == item:     #获取节点数据
                found = True
            else:
                current = current.getNext()   #指向下节点地址
        return found


    def remove(self,item):      #删除是指跳过该节点数据,不是广义上的删除
        current = self.head     #只是将其从单链表内舍去
        previous = None
        found = False
        while not found:
            if current.getDate() == item:
                found = True
            else:
                previous = current   #交错下顺
                current = current.getNext()
        if previous == None:                #如果要删除第一个
            self.head = current.getNext()   #让表头指向当前的下一个即可
        else:
            previous.setNext(current.getNext()) #让前一个数据指向后一个数据

有序表:

#有序表
class OrderedList:
    def __init__(self):
        self.head = None
        
    def isEmpty(self):
        return self.head == None   #第一个节点是否指向空


    def size(self):
        current = self.head      #指向表头地址
        count = 0
        while current != None:   #地址不为空
            count = count+1
            current = current.getNext()  #指向下一节点地址
        return conut


    def remove(self,item):      #删除是指跳过该节点数据,不是广义上的删除
        current = self.head     #只是将其从单链表内舍去
        previous = None
        found = False
        while not found:
            if current.getDate() == item:
                found = True
            else:
                previous = current   #交错下顺
                current = current.getNext()
        if previous == None:                #如果要删除第一个
            self.head = current.getNext()   #让表头指向当前的下一个即可
        else:
            previous.setNext(current.getNext()) #让前一个数据指向后一个数据


    def search(self,item):
        current = self.head
        found = False
        stop  = False       #有序,引入stop,分区域
        while current != None and not found and not stop:
            if current.getData() == item:
                found = True
            else:
                if current.getData() > item:
                    stop == True    #后面不会在有所查找的数据,该停了
                else:
                    current = current.getNext()
        return found


    def add(self,item):
        current = self.head
        previous = None
        stop = False
        while current != None and not stop:  #找到插入位置
            if current.getData() > item:     #在current的前面插入
                stop = True    #后面不会有所查找数据,该停了
            else:
                previous = current
                current = current.getNext()  #交错下顺
                
        temp = Node(item)  #给所插入对象item创建一个节点
        if previous == None:   #如果要在第一个位置插入
            temp.setNext(self.head)  #temp下一节点指向表头所指向的数据
            self.head = temp   #表头指向temp当前节点
        else:                  #插入表中
            temp.setNext(current)    #temp下一节点指向已找到的位置
            previous.setNext(temp)   #previous下一节点指向temp

谢谢浏览,记得留下你的赞再走哟(^U^)ノ~YO

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王业强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值