通过python设置一个双链表,并且完成双链表的一系列操作(包括 增 删 改 查)

class DoubleLink(): #自定义一个双链表,这个双链表包括数据,前指针后后指针。
    def __init__(self, num_data):
        self.item = num_data  #双链表中的数据项
        self.prev = None   #双链表中的前指针
        self.next = None   #双链表指针中的后指针


class DoubleList():      #开始双链表操作
    def __init__(self):   
        self.head = None  #初始化一个头节点

    def is_empty(self):   #判断头节点是否为空
        return self.head is None

    def add(self, item):   #往链表中添加数据
        temp = DoubleLink(item)  #自定义一个节点
        temp.prev = self.head    #temp的前指针指向头节点
        temp.next = self.head     #temp的后指针指向头节点
        self.head = temp      #头节点指向temp

    def append(self, item):  #往链表的任意一项插入节点
        temp = DoubleLink(item)
        if self.is_empty():   #判断节点是否为空,如果为空则直接加入,否则就循环遍历
            self.head = temp
            temp.prev = self.head
        else:
            cur = self.head
            while cur.next != None:
                cur = cur.next
            cur.next = temp
            temp.prev = cur

    def size(self):  #计算你创造链表的大小
        cur = self.head
        count = 0
        while cur != None:
            count += 1
            cur = cur.next
        return count

    def travel(self):  #循环遍历链表
        cur = self.head
        while cur != None:
            print(cur.item)
            cur = cur.next

    def search(self, item):  #查找链表中的某一项是否存在
        cur = self.head
        bool = False
        while cur != None and not bool:  #循环条件是bool为True时和cur=None时终止循环
            if cur.item == item:
                return True   #如果查找的数据项存在,则返回True,否则继续查找
            else:
                cur = cur.next
        return bool

    def insert(self, item, data):  #往双链表中插入某一数据项
        cur = self.head  #这里要设置两个节点,一个是cur节点,另一个是previous节点。
        previous, found = None, False  
        while cur != None and not found:
            if cur.item == item:
                found = True
            else:
                previous = cur
                cur = cur.next
        temp = DoubleLink(data)
        if previous == None:
            temp.prev = self.head
            temp.next = self.head
            self.head = temp
        else:
            temp.next = cur
            cur.prev = temp
            previous.next = temp
            temp.prev = previous

    def remove(self, item):  #删除双链表中的你想删除的数据项
        cur = self.head
        previous, found = None, False
        while cur != None and not found:
            if cur.item == item:
                found = True
            else:
                previous = cur
                cur = cur.next
        if previous == None:
            self.head = cur.next
            cur.next.prev = self.head
        else:
            previous.next = cur.next
            cur.next.prev = cur.prev


d = DoubleList()
d.add("head")
d.add('丝袜')
d.add('打底袜')
d.add('连裤袜')
d.add('过膝袜')
d.append('拼接袜')
d.travel()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值