我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Python——链表】

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Python——链表】

目录

一、链表是什么?

二、单向链表

三、双向链表

一、链表是什么?

 1.定义:链表(Linked list)是一种常见的基础数据结构,是一种线性表,在每一个节点(数据存储单元)里存放下一个节点的位置信息

2.优点:顺序表的构建需要预知数据大小来申请连续存储空间,扩充时需要进行数据迁移,使用不灵活,链表充分利用计算机内存空间,实现灵活内存动态管理

二、单向链表

1.定义:单向链表(单链表)是链表中最简单一种形式,它的每个节点包含两个域——信息域(元素域)和链接域

(1)表元素域elem用来存放具体的数据

(2)链接域next用来存放下一个节点的位置

(3)变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节

2.链表相关方法:

方法说明
is_empty()链表是否为空
length()链表长度
travel()遍历整个链表
add(item)链表头部添加元素
append(item)链表尾部添加元素
insert(pos,item)在指定位置添加元素
remove(item)删除节点
search(item)查找结点是否存在
#定义节点class Node(object):    def __init__(self,elem):        self.elem=elem        self.next=None#构造单向链表class SingleLinkedList:    #判断链表是否为空:_head指向None,则为空    def is_empty(self):        '''        if self._head==None:            print("True")        else:            print("False")            '''        return self._head==None    #单向链表初始化    def __init__(self,node=None):        #判断node是否为空        if node!=None:            headNode=Node(node)            self._head=headNode        else:            self._head=node    #计算链表长度    def length(self):        count=0        curNode=self._head        while curNode!=None:            count+=1            curNode=curNode.next            return count    #遍历链表    def travel(self):        curNode=self._head        while curNode!=None:            print(curNode.elem,end='\t')            curNode=curNode.next        print("  ")    #在头部添加元素    def add(self,item):        #将传入的值构造成节点        node=Node(item)        #将新节点的链接域next指向头节点        node.next=self._head        #将链表的头_head指向新节点        self._head=node    #在尾部添加元素    def append(self,item):        #将传入的值构造成节点        node=Node(item)        if self.is_empty(): #单链表为空            self._head=node        else: #单链表不为空            curNode=self._head            while curNode.next!=None:                curNode=curNode.next            #修改节点,最后一个节点的next指向node            curNode.next=node    #在指定位置添加元素    def insert(self,pos,item):        #如果pos<=0,默认插入到头部        if pos<=0:            self.add(item)        #如果pos>链表长度,直接在尾部追加        elif pos>(self.length()-1):            self.append(item)        else:            #构造节点            node=Node(item)            count=0            preNode=self._head            while count<(pos-1): #查找前一个节点                count+=1                preNode=preNode.next            #修改指向            #将前一个节点的next指向插入节点            node.next=preNode.next            #将插入位置的前一个节点next指向新节点            preNode.next=node    #查找节点是否存在    def search(self,item):        curNode=self._head        while curNode!=None:            if curNode.elem==item:                return True            curNode=curNode.next        return False    #删除节点    def remove(self,item):        curNode=self._head        preNode=None        while curNode!=None:            if curNode.elem==item:                #判断是否是头节点                if preNode==None:#是头节点                    self._head=curNode.next                else:                    #删除                    preNode.next=curNode.next            break        else:                preNode=curNode                curNode=curNode.nextif __name__=="__main__":    #初始化元素值为10单向链表    singleLinkedList=SingleLinkedList(30)    print("是否为空链表:",singleLinkedList.is_empty())    print("链表长度为:",singleLinkedList.length())    print("----遍历链表----")    singleLinkedList.travel()    print("-----查找-----",singleLinkedList.search(30))    print("-----头部插入-----")    singleLinkedList.add(1)    singleLinkedList.add(2)    singleLinkedList.add(3)    singleLinkedList.travel()    print("-----尾部追加-----")    singleLinkedList.append(10)    singleLinkedList.append(20)    singleLinkedList.travel()    print("-----链表长度-----",singleLinkedList.length())    print("-----指定位置插入-----")    singleLinkedList.insert(-1,100)    singleLinkedList.travel()    print("-----删除节点-----")    singleLinkedList.remove(100)    singleLinkedList.travel()

是否为空链表: False
链表长度为: 1
----遍历链表----
30      
-----查找----- True
-----头部插入-----
3    2    1    30      
-----尾部追加-----
3    2    1    30    10    20      
-----链表长度----- 1
-----指定位置插入-----
100    3    2    1    30    10    20      
-----删除节点-----
3    2    1    30    10    20     

三、双向链表

双向链表(双面链表)是一种更复杂的链表。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值,而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。

双向链表的实现:

class Node:    def __init__(self,elem):        self.elem=elem        self.next=None #下一个节点        self.prev=None #前一个节点class DoubleLinkedList:    # 双向链表初始化    def __init__(self, node=None):        # 判断node是否为空        if node != None:            headNode=Node(node)            self._head=headNode        else:            self._head=node    def is_empty(self):        '''        if self._head==None:            print("True")        else:            print("False")            '''        return self._head==None    #计算链表长度    def length(self):        count=0        curNode=self._head        while curNode!=None:            count+=1            curNode=curNode.next            return count    #遍历链表    def travel(self):        curNode=self._head        while curNode!=None:            print(curNode.elem,end='\t')            curNode=curNode.next        print("  ")    #在头部添加元素    def add(self,item):        #判断是否空链表        node = Node(item)        if self.is_empty():            self._head=node        else:            #将传入的值构造成节点            node=Node(item)            #将新节点的链接域next指向头节点            node.next=self._head            #将_head的头节点的prev指向node            self._head.prev=node            #将链表的头_head指向新节点            self._head=node    #在尾部追加元素    def append(self,item):        #将传入的值构造成节点        node=Node(item)        if self.is_empty(): #双向链表为空            self._head=node        else: #双向链表不为空            curNode=self._head            while curNode.next!=None:                curNode=curNode.next            #修改节点,最后一个节点的next指向node            curNode.next=node            #将node节点的前驱指向当前节点            node.prev=curNode    #在指定位置添加元素    def insert(self,pos,item):        #如果pos<=0,默认插入到头部        if pos<=0:            self.add(item)        #如果pos>链表长度,直接在尾部追加        elif pos>(self.length()-1):            self.append(item)        else:            #构造节点            node=Node(item)            count=0            curNode=self._head            while count<(pos-1): #查找前一个节点                count+=1                curNode=curNode.next            #修改指向            #node节点前驱指向当前节点            node.prev=curNode            #node节点的next指向当前节点的下一个节点            node.next=curNode.next            #当前节点的下一个节点的前驱指向node节点            curNode.next.prev=node            #当前节点的下一个节点指向node节点            curNode.next=node    #查找节点是否存在    def search(self,item):        curNode=self._head        while curNode!=None:            if curNode.elem==item:                return True            curNode=curNode.next        return False    #删除节点    def remove(self,item):        curNode=self._head        while curNode!=None:            if curNode.elem==item:                #判断是否是头节点                if curNode==self._head:#是头节点                    self._head=curNode.next                    #判断当前节点是否只有一个节点                    if curNode.next:                        curNode.next.prev==None                else:                    #删除                    curNode.prev.next=curNode.next                    #判断当前节点是否是最后一个节点,若是,不需要移动下一个                    if curNode.next:                        curNode.next.prev=curNode.prev            break        else:                curNode=curNode.nextif __name__=="__main__":    doubleLinkedList=DoubleLinkedList()    print("-----头部添加-----")    doubleLinkedList.add(11)    doubleLinkedList.add(22)    doubleLinkedList.add(33)    doubleLinkedList.travel()    print("-----尾部追加-----")    doubleLinkedList.append(44)    doubleLinkedList.travel()    print("指定位置插入")    doubleLinkedList.insert(3,100)    doubleLinkedList.travel()    print("-----删除元素-----")    doubleLinkedList.remove(33)    doubleLinkedList.travel()

 -----头部添加-----
33    22    11      
-----尾部追加-----
33    22    11    44      
指定位置插入
33    22    11    44    100      
-----删除元素-----
22    11    44    100     

来源地址:https://blog.csdn.net/m0_70964767/article/details/126184640

免责声明:

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

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

【Python——链表】

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python链表

1 链表简介链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,
2023-01-31

python 实现线性链表(单链表)

初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码。#!/usr/bin/python# -*- coding:utf-8 -*-# Author: Hui# Date: 2017-10-13# 结点类,c
2023-01-31

Python实现链表

单链表:# -*- coding:utf-8 -*-class Node(object): """节点""" def __init__(self,elem): self.elem = elem sel
2023-01-31

python实现单链表

#encoding:utf-8import sysclass Lnode():    def __init__(self,elem,next=None):        self.elem = elem    #节点的值        se
2023-01-31

python单链表的实现

'''当加入第一个node节点的时候,会有几个值,(这里的self.tail.next 其实就是node.next)head = item = tail = Node(object element1 memory)item = head =
2023-01-31

python中什么是链表

python中什么是链表?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通
2023-06-14

python数据结构之链表

''''链表的实现,单向链表''''''建立节点'''class jd:    def __init__(self,data):        self.data = data        self.next = None'''实现链表的
2023-01-31

python如何实现双链表

本篇内容介绍了“python如何实现双链表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实现双链表需要注意的地方1、如何插入元素,考虑特殊情
2023-06-30

python怎么实现单向链表及单向链表的反转

这篇文章给大家分享的是有关python怎么实现单向链表及单向链表的反转的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。链表的定义链表中的每个节点会存储相邻节点的位置信息,单链表中的每个节点只存储下一关节点的位置信息
2023-06-14

python中如何使用链表

本篇文章给大家分享的是有关python中如何使用链表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python链表应用源码示例如下:#-*-coding:utf8 -*-imp
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录