python与算法:创建一个链表,和python原生的list对应,可以根据不同的业务场景选择使用那个

简介: python与算法:创建一个链表,和python原生的list对应,可以根据不同的业务场景选择使用那个
class LNode:
    def __init__(self,elem,next_=None):
        self.elem=elem
        self.next=next_
class LinkedListUnderflow(ValueError):
    pass
class LList:
    def __init__(self):
        self._head=None
    def is_empty(self):
        '''判断链表是否为空'''
        return self._head is None
    def prepend(self,elem):
        '''在链表的最前端加入元素'''
        self._head=LNode(elem,self._head)
    def append(self,elem):
        '''在链表的最后端加入元素'''
        if self._head is None:
            self._head=LNode(elem)
            return 
        p=self._head
        while p.next is not None:
            p=p.next
        p.next=LNode(elem)
    def insert(self,elem,i):
        '''在链表的中间加入元素'''
        if i==0:
            self.prepend(elem)
        if i>0:
            count=0
            p=self._head
            while count<i-1:
                p=p.next
                count+=1
            p_next=p.next
            p.next=LNode(elem,self._head)
            p.next.next=p_next
    def pop_first(self):
        '''删除最开始的元素'''
        if self._head is None: # 无结点
            raise LinkedListUnderflow("in pop")
        e=self._head.elem
        self._head=self._head.next
        return e 
    def pop_last(self):
        '''删除最末尾的元素'''
        if self._head is None:
            raise LinkedListUnderflow("in pop_last")
        p=self._head
        # 表中只有一个元素
        if p.next is None:
            e=p.elem
            self._head=None
            return e
        while p.next.next is not None:
            p=p.next
        e=p.next.elem
        p.next=None
        return e
    def pop_index(self,i):
        '''根据index删除元素'''
        if i==0:
            self.pop_first()
        else:
            count=0
            p=self._head
            while count<i-1:
                p=p.next
                count+=1
            p_next=p.next
            e=p.next.elem
            p.next=p_next.next
            return e 
    def find(self,r):
        '''查找第一个元素的index'''
        p=self._head
        count=0
        while p is not None:
            if p.elem==r:
                return count
            else:
                p=p.next
                count+=1
        return -1
    def forall(self,func):
        '''对于所有的元素执行某个操作'''
        p=self._head
        count=0
        while p is not None:
            e=p.elem
            p.elem=func(e)
            p=p.next
    def printall(self):
        '''打印所有的元素'''
        p=self._head
        while p is not None:
            print(p.elem,end='')
            if p.next is not None:
                print(',',end='')
            p=p.next
        print('')
    def __len__(self):
        '''判断链表的长度'''
        p=self._head
        count=0
        while p is not None:
            p=p.next
            count+=1
        return count
# 创造一个链表加入元素
mlist1=LList()
for i in range(10):
    mlist1.prepend(i)
for i in range(11,20):
    mlist1.append(i)
mlist1.insert(2222,0)
mlist1.printall()
# 删除index是1的元素
print(mlist1.pop_index(1))
mlist1.printall()
# 查找元素5所在的位置
mlist1.find(5)
# 对所有元素执行add1操作
def add1(x):
    return x+x
mlist1.forall(add1)
mlist1.printall()
# 分析链表的长度
len(mlist1)
目录
相关文章
|
2月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
166 4
|
8月前
|
索引 Python
Python错误 - 'list' object is not callable 的问题定位与解决
出现编程问题并不可怕,关键在于是否可以从中学习与成长。遇到'list' object is not callable这样的错误,我们不仅需要学会应对,更需要了解其背后的原因,避免类似的问题再次出现。记住,Python的强大功能和灵活性同时也意味着我们需要对其理解更准确,才能更好的使用它。
959 70
|
7月前
|
人工智能 并行计算 开发者
CUDA重大更新:原生Python可直接编写高性能GPU程序
NVIDIA在2025年GTC大会上宣布CUDA并行计算平台正式支持原生Python编程,消除了Python开发者进入GPU加速领域的技术壁垒。这一突破通过重新设计CUDA开发模型,引入CUDA Core、cuPyNumeric、NVMath Python等核心组件,实现了Python与GPU加速的深度集成。开发者可直接用Python语法进行高性能并行计算,显著降低门槛,扩展CUDA生态,推动人工智能、科学计算等领域创新。此更新标志着CUDA向更包容的语言生态系统转型,未来还将支持Rust、Julia等语言。
511 3
CUDA重大更新:原生Python可直接编写高性能GPU程序
|
8月前
|
数据采集 存储 监控
Python 原生爬虫教程:网络爬虫的基本概念和认知
网络爬虫是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据采集、新闻聚合和价格监控等领域。其工作流程包括 URL 调度、HTTP 请求、页面下载、解析、数据存储及新 URL 发现。Python 因其丰富的库(如 requests、BeautifulSoup、Scrapy)和简洁语法成为爬虫开发的首选语言。然而,在使用爬虫时需注意法律与道德问题,例如遵守 robots.txt 规则、控制请求频率以及合法使用数据,以确保爬虫技术健康有序发展。
1113 31
|
8月前
|
数据采集 搜索推荐 API
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
|
8月前
|
存储 Python
Python 中链表的个人理解
简介:本文介绍了Python中链表的基本组成及其操作实现。链表由`head`(头节点)、中间节点和`tail`(尾节点)三部分构成,每个节点通过`Node`类定义,包含`value`(值域)和`next`(指针域)。示例代码展示了链表的增删查功能,包括`add`(头部插入)、`append`(尾部插入)、`remove`(删除节点)、`search`(查找节点)及遍历方法。运行结果验证了链表操作的正确性。
|
10月前
|
存储 Python
Python 实现单向链表,和单向链表的反转
链表是一种数据结构,每个节点存储相邻节点的位置信息。单链表中的节点仅存储下一节点的位置。通过Python实现单链表,定义`ListNode`类并关联节点可创建链表。例如,创建A-&gt;B-&gt;C的链表后,可通过反转函数`reverse`将链表反转为CBA。代码展示了如何实现和操作单链表。
227 6
Python 实现单向链表,和单向链表的反转
|
8月前
|
存储 算法 物联网
解析局域网内控制电脑机制:基于 Go 语言链表算法的隐秘通信技术探究
数字化办公与物联网蓬勃发展的时代背景下,局域网内计算机控制已成为提升工作效率、达成设备协同管理的重要途径。无论是企业远程办公时的设备统一调度,还是智能家居系统中多设备间的联动控制,高效的数据传输与管理机制均构成实现局域网内计算机控制功能的核心要素。本文将深入探究 Go 语言中的链表数据结构,剖析其在局域网内计算机控制过程中,如何达成数据的有序存储与高效传输,并通过完整的 Go 语言代码示例展示其应用流程。
145 0
|
10月前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
383 30

推荐镜像

更多