Python 实现链表

链表与其他数据结构例如列表的区别在于无需使用连续存储空间。
链表在添加和删除数据时对原有数据移动小,但查寻和遍历较慢。

1.单链表的实现

1.1 定义结点

##3.1Node定义
class Node:
    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

1.2 实现无序表(数据项乱序)

class UnroderedList:
    def __init__(self):
        self.head=None#表头,指向第一个结点

    def isEmpty(self):
        return self.head==None
    def add(self,item):
        node=Node(item)
        node.setNext(self.head)#新节点next指向原head
        self.head=node#表头指向新数据
    def size(self): #o(n)
        currentdata=self.head #当前节点指向表头
        count=0
        while currentdata!=None:#向后遍历
            count += 1
            currentdata=currentdata.getNext()#当前结点后移
        return count
    def search(self,item):#是否存在
        currentdata=self.head
        found=False
        while currentdata!=None and not found:
            if item==currentdata.getData():
                found=True
            else:
                currentdata=currentdata.getNext()
        return found
    def remove(self,item):#寻找到item,使其前一个结点指向其下一个结点
        currentdata=self.head
        previous=None
        found=False
        while not found:
            if item==currentdata.getData():
                found=True
            else:
                previous=currentdata
                currentdata=currentdata.getNext()
        #删除操作的两种情况
        if previous==None:#删除的是第一个元素
            self.head=currentdata.getNext()
        else:
            previous.setNext(currentdata.getNext())

1.3 实现有序表

class OrderedList:
    def __init__(self):
        self.head=None
    def search(self,item):
        current=self.head
        found=False
        stop=False
        while current!=None and not found and not stop:
            if item==current.getData():
                found=True
            else:
                if current>item:
                    stop=True
                else:
                    current=current.getNext()
        return found

    def add(self,item):#引入previous,找到第一个比该值大的数则插入到previous位置
        current=self.head
        previous=None
        stop=False
        while current!=None and not stop:
            if current.getData()>item:
                stop=True
            else:
                previous=current
                current=current.getNext()
        temp=Node(item)
        if previous==None:#插入表头
            temp.setNext(self.head)
            self.head=temp
        else:#插入表中
            temp.setNext(current)
            previous.setNext(temp)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值