文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python双向链表怎么实现

2023-06-30 16:02

关注

这篇文章主要介绍“python双向链表怎么实现”,在日常操作中,相信很多人在python双向链表怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python双向链表怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

双向链表: 指的是讲数据链接在一起,每个数据是一个节点,每一个节点都有一个数据区,两个链接区,分别链接上一个节点和下一个节点
数据区: 存放数据的地方

prev: 链接上一个节点
next: 链接下一个节点

双向链表操作

链表是否为空
2、链表的长度
3、遍历链表
4、链表头部添加元素
5、链表尾部添加元素
6、链表指定位置添加元素
7、链表删除节点
8、查找节点是否存在

代码实现

# Functions  函数声明class Node():    """实例化节点类"""    def __init__(self, item):        self.item = item        self.prev = None        self.next = Noneclass Linklist():    """    存储所有节点类    """    def __init__(self):        """        初始化一个头结点        默认为空        """        self.head = None    # 1. 链表是否为空    def is_empty(self):        return self.head == None    # 2. 链表的长度    def length(self):        """        返回节点的长度        实例化一个游标        使用这个游标遍历所有的数据        使用一个计数器,遍历一个数据,自增一,最后输出计数器        """        # 实例化游标        cur = self.head        # 技术器        # 如果链表为空,不会进入循环,直接输出 0        count = 0        # 遍历所有的数据        while cur != None:            count +=1            cur = cur.next        return count    # 3. 遍历链表    def treval(self):        """        遍历链表,获取所有的数据        使用游标,遍历整个链表,每次输出cur.item 的值        注意链表为空的情况,        """        # 实例化一个游标        cur = self.head        # 遍历链表        while cur != None:            print(cur.item, end=' ')            cur = cur.next        print()    # 4. 链表头部添加元素    def add(self, item):        """        头部添加数据        分析:        1、头部添加数据,链表为空时: self.head 指向node        2、链表不为空时: 先将node.next = self.head.next, 再讲 self.head = node        """        # 实例化节点        node = Node(item)        # 添加数据        # 判断链表是否为空        if self.is_empty():            # 为空,直接将self.head 指向node            self.head=node        else:            # 不为空,先将noede            node.next = self.head            self.head.prev=node            self.head=node    # 5. 链表尾部添加元素    def append(self,item):        """        尾部添加数据        分析:        要先将指针指向尾部的节点        最后的节点的 cur.next = node, node.prev = cur        """        # 实例化节点        node = Node(item)        # 实例化游标        cur = self.head        # 移动游标到最后一个节点        # 如果链表为空        # 直接使用头插法        if self.is_empty():            self.add(item)        else:            while cur.next != None:                # cur.next 不为空,则进入循环, 上次循环,是进入上上个节点,但 将cur  = cur.next,就指向了最后一个节点                cur = cur.next            node.prev = cur            cur.next = node    # 6. 链表指定位置添加元素    def insert(self, index, item):        """        指定位置添加数据        分析        单链表中需要实例化两个有游标        双向链表,直接向指针指向索引的位置        将这个位置节点的 cur.        """        # 实例化节点        node = Node(item)        # 实例化游标        cur = self.head        # 起始位置        count = 0        if index<=0:            # 使用头插法            self.add(item)        elif index > (self.length()-1):            self.append(item)        else:            # 移动游标            while count < index:                # 增加一                count += 1                # 移动游标到索引位置                cur = cur.next            node.next = cur            node.prev = cur.prev            cur.prev.next = node            cur.prev = node    # 7. 链表删除节点    def remove(self,item):        """        删除指定的节点        首先实例化节点,遍历链表,找到该节点,删除该节点        """        # 实例化游标        cur = self.head        # 遍历链表,找到该节点        while cur != None:            if cur.item == item:                if self.head == cur:                    self.head = cur.next                    if cur.next:                        cur.next.prev = None                else:                    cur.prev.next = cur.next                    # 如果有下个节点,防止最后一个节点                    if cur.next:                        cur.next.prev = cur.prev                    pass                break            else:                cur = cur.next    # # 8. 查找节点是否存在    def search(self, item):        """        查看节点是否存在        分析        遍历链表,查看每一个节点的数据区        空链表        只有头节点        只有尾节点        """        # 实例化一个游标        cur = self.head        # 遍历链表        while cur != None:            if cur.item == item:                return True            else:                cur = cur.next        return False

测试运行

# 程序的入口if __name__ == "__main__":    s = Linklist()    print(s.is_empty())  #  True    s.append(100)     s.append(200)    s.append(300)    s.add(6)    s.insert(1, 10)    s.search(6)    s.treval()   # 6 10 100 200 300     s.remove(100)    s.treval()   # 6 10 200 300     pass

到此,关于“python双向链表怎么实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯