文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

python单向链表怎么实现

2023-06-30 16:38

关注

这篇文章主要介绍“python单向链表怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python单向链表怎么实现”文章能帮助大家解决问题。

单向链表:是将所有的数据作为一个个节点,将所有的节点链接在一起。每一个节点中又分为: 存储数据区,链接区

存储数据区: 存储具体的数据

链接区: 指向下一个节点

分析实现:

分析:根据链表的特性,首先要存放有数据的容器,还要有存放节点的容器
2、 节点类中:要有数据区和next区
3、 链表类中:存放所有节点

单链表操作

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

代码实现

# Functions  函数声明class Node():    """    存放节点类    每次调用该类,实例化一个节点    默认每个节点中有数据区,next区。    数据区为该数据,next区为空    """    def __init__(self, item,next=None):        self.item = item        self.next = next        passclass Linklist():    """    存放数据类    将所有的节点存放起来的容器    首先,默认链表为空,在这里需要有一个头节点,默认头节点为空    """    def __init__(self, head=None):        self.head = head    def is_empty(self):        return self.head == None    def append(self, item):        """        往链表尾部添加数据        1、实例化游标:使用游标指向每一个数据,检索数据和判断数据next是否为空        2、移动游标,从头节点开始,每次使用self.next移动,以为next指向的就是下一个数据        3、添加数据,首先判断链表是否为空,为空的情况下,直接将头节点等于node数据        4、如果不为空,需要从头节点开始,移动游标,判断游标指向的next是否为空        5、使用循环不停的移动节点,当遇到节点中的next为空的情况下停止移动        6、循环条件: 当 条件 != None, 进入循环获取,当cur为空时就不会进入循环,所以在这里要使用 cur != None        """        # 首先要实例化一个节点        node = Node(item)        # 如果链表为空        if self.is_empty():            # 直接将头节点的next添加node            self.head = node        else:            # 实例化一个游标            cur = self.head            while cur.next != None:                # 移动游标,得到最后一个游标的数据                cur = cur.next            # 将移动后的数据的下一个next添加上 node            cur.next=node            pass    def travel(self):        """遍历数据"""        # 实例化一个游标        cur = self.head        # 数据链为空的情况        if self.is_empty():            print('')        else:            # 获取每个数据区中的数据            # 移动游标,每移动一次,输出一次数据区内的数据            while cur != None:                print(cur.item, end=' ')                cur = cur.next            print()    def length(self):        """返回链表的长度"""        # 实例化游标        cur = self.head        # 计数,这里对空链表进行判断,如果是链表,则不会进入循环,直接输出 0        count = 0        # 移动游标,获取下一个数据,然后让count +=1        while cur != None:            # 计数            count+=1            # 移动游标            cur = cur.next        return count    def add(self, item):        """        头部添加数据        分析: 将数据添加到第一个节点当中        1、 需要先将node的next指向 原第一个节点,这原第一个节点就是self.head        2、 再讲self.head指向node进行连接        """        # 先实例化节点        node = Node(item)        # 将数据添加到头部当中        node.next=self.head        self.head=node    def insert(self, index, item):        """        指定位置添加数据        分析:        1、首先要找到,该位置的数据        2、将要添加的数据next等于 原位置的next数据        3、原数据的 next等于node新数据        """        if index<=0:            # 如果输入的索引小于或者等于O,默认使用头插发            self.add(item)        elif index>self.length():            # 如果输入的索引大于链表的长度,使用尾插法            self.append(item)        else:            # 实例化数据节点            node = Node(item)            # 找到该数据的位置            # 实例化一个游标            cur = self.head            # 计数            conent = 0            while conent<(index-1):                conent+=1                cur = cur.next            node.next=cur.next            cur.next=node    def search(self, item):        """        查询指定的数据是否存在        分析: 查询指定的数据,需要对整个链表扫描,判断这个数据是否等的该节点中的数据        """        # 实例化一个游标        cur = self.head        # 进行判断是否相等        while cur != None:            # 判断            if cur.item == item:                return True            else:                cur = cur.next            pass        # 否则返回False        return False    def remove(self, item):        """        移除指定的数据        分析:        1、删除数据,需要首先判断数据是否存在        2、找到该数据所在的位置,将该数据的上一个数据的next指向自己的next        3、如何获取该数据的指向,和上一个数据的指向        4、需要定义两个指针        5、先将两个指针相等,再讲一个指针先移动一次,再同时移动        """        # 先找到该数据        cur = self.head        por = None        while cur != None:            if cur.item==item:                # 要判断是否为第一个节点                if cur == self.head:                    self.head = cur.next                else:                    por.next = cur.next                break            else:                # 如果在当前节点中没有相等的,将节点进行移动                # 移动要注意,现将两个游标相等,再讲另一个游标移动一次                por = cur                cur = cur.next

测试运行

# 程序的入口if __name__ == "__main__":    s = Linklist()    s.append(100)    s.append(200)    s.append(300)    s.add(1)    s.add(12)    s.insert(-1,6)        s.travel()       #  6 12 1 100 200 300     print(s.length())  # 6    print(s.search(11)) # False    s.remove(12)    s.travel()       # 6 1 100 200 300     print(s.length())  # 5    print(s.search(11)) # False    pass

关于“python单向链表怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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