基础数据结构——链表

news2024/11/23 18:58:57

目录

一、链表

1、数组的缺点

2、链表

3、单向链表

4、双向链表

5、Python链表的实现

二、例题


一、链表

1、数组的缺点

1)需要占用连续的空间

若某个数组很大,可能没有这么大的连续空间给它用。

2)不方便删除和插入

例如删除数组中间的一个数据,需要把后面所有的数据往前挪填补这个空位,产生大量的拷贝开销。中间插入数据,也同样不方便操作。

2、链表

  • “链表”能解决上述问题
  • 不需要把数据存储在连续的空间上
  • 删除和增加数据都很方便
  • 链表可以看成是用指针串起来的数组,它用一串位于任意位置的存储单元存线性表的数据元素,这些存储单元可以是连续的,也可以不连续。

3、单向链表

指针是单向的,只能从左向右单向遍历数据。比较特殊的是头和尾,为了方便从任何一个位置出发能遍历到整个链表,让首尾相接,尾巴 tail 的 next 指针指向头部 head 的 data。由于首尾相接的链表是循环的,所以任意结点都可以成为头和尾。 

4、双向链表

每个结点有两个指针,pre 指针指向前一结点,next 指针指向后一结点。双向链表也是首尾相接,最后结点的next指针指向第一个结点,第一个结点的pre指针指向最后的结点。 

5、Python链表的实现

Python的列表 list,可以当成链表使用,可以当成队列、栈使用,可以当成数组。

# 初始化
li=[11,24,3,4,5,6,5]
# 在末尾添加61
li.append(61)
print(li)
# 统计5的个数
print(li.count(5))
# 在5前面插入49
index=li.index(5)
li.insert(index,49)
print(li)
# 在5后面插入51
index=li.index(5)
li.insert(index+1,51)
print(li)
# 找到3,删除3
index=li.index(3)
li.pop(index)
print(li)
# 删除第一个5
li.remove(5)
print(li)

[11, 24, 3, 4, 5, 6, 5, 61]
2
[11, 24, 3, 4, 49, 5, 6, 5, 61]
[11, 24, 3, 4, 49, 5, 51, 6, 5, 61]
[11, 24, 4, 49, 5, 51, 6, 5, 61]
[11, 24, 4, 49, 51, 6, 5, 61]
>>> 

二、例题

自行车停放 lanqiao0J题号 1518

【题目描述】

有 n 辆自行车依次来到停车棚,除了第一辆自行车外,每辆自行车都会恰好停放在已经在停车棚里的某辆自行车的左边或右边。

( e.g.停车棚里已经有 3 辆自行车,从左到右编号为:3, 5, 1。现在编号为 2 的第 4 辆自行车要停在 5 号自行车的左边,所以现在停车棚里的自行车编号是:3, 2, 5, 1)。

给定 n 辆自行车的停放情况,按顺序输出最后停车棚里的自行车编号。n<=100000

【输入描述】

第一行一个整数 n。 第二行一个整数 x。表示第一辆自行车的编号。以下 n-1 行,每行 3 个整数 x, y, z。z = 0 时,表示编号为 x 的自行车恰停放在编号为 y 的自行车的左边。z = 1 时,表示编号为 x 的自行车恰停放在编号为 y 的自行车的右边

【输出描述】

从左到右输出停车棚里的自行车编号。

本题是很直接的链表题。

n=int(input())
a=int(input())

bicycles=[]
bicycles.append(a)

for i in range(n-1):
    x,y,z=map(int,input().split())
    if z==0:
        bicycles.insert(bicycles.index(y),x)
    else:
        bicycles.insert(bicycles.index(y)+1,x)

for i in bicycles:
    print(i,end=' ')

我们也可以不用内置函数,手写实现链表,如下代码所示。

class Node():
    def __init__(self,data):
        self.data=data
        self.next=None

class SingleLinkList():
    def __init__(self,node=None):
        self.__head=node
    def left_insert(self,x,y):
        pre=self.__head
        while pre.next.data!=x:
            pre=pre.next
        node=Node(y)
        node.next=pre.next
        pre.next=node
    def right_insert(self,x,y):
        pre=self.__head
        while pre.data!=x:
            pre=pre.next
        node=Node(y)
        node.next=pre.next
        pre.next=node
    def print_list(self):
        cur=self.__head
        while cur!=None:
            print(cur.data,end=' ')
            cur=cur.next

n=int(input())
a=int(input())
node=Node(a)
li=SingleLinkList(node)
for i in range(n-1):
    x,y,z=map(int,input().split())
    if z==0:
        li.left_insert(y,x)
    else:
        li.right_insert(y,x)
li.print_list()

以上,基础数据结构——链表

祝好

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL如何查看未提交的事务SQL

点击上方蓝字关注我MySQL中经常遇到事务中的SQL正在执行或执行完成后未提交&#xff0c;如何找出对应的SQL&#xff1f;1. 查看正在执行的SQL查看事务中正在执行的SQL方式有多种&#xff0c;例如1.1 通过processlist查看会话1&#xff1a;执行1个SQLmysql> begin; Query OK…

AC7811-BLDC无感控制代码调试与测试记录

接线注意 供电 对于 AC781x 电机 Demo 板&#xff0c;其 MCU 控制板和功率板的 12V 输入只需接一路即可&#xff0c;如果电机额定电压为 12V&#xff0c;那么将功率板中的功率管供电模式选择跳点(靠近 D5)短接即可&#xff0c;不需要再额外供电&#xff1b;如果电机的额定电压…

配置磁盘多路径聚合

一 安装多路径软件 yum install -y device-mapper device-mapper-multipath 二 配置多路径聚合 在每个节点上都需要配置下多路径聚合。 /* 注意事项&#xff1a; 新添加盘后要扫描下&#xff0c;才能识别到(如果已经看到盘了&#xff0c;即执行multipath -ll能看到&#…

《收获,不止Oracle》读书笔记之性能提升千倍

体系学习让SQL语句性能提升千倍 未优化前&#xff0c;单车速度 drop table t purge; create table t(x int);create or replace procedure proc1 as beginfor i in 1..100000loopexecute immediateinsert into t values (||i||);commit;end loop; end; / /*这里要记得预先执行…

linux下常用调试技巧

1 linux下如何查看静态库和动态库都链接了那些库 1.1 静态库.a是没有指令可以看到其在生成过程中链接了那些库的 1.2 动态库.so可以通过ldd指令查看其在生成过程中链接了那些库 还有一种简单直观的方法,我们可以在编译过程中看到所生成的二进制文件,链接了那些库: 平时编译…

[阶段4 企业开发进阶] 7. 微服务--SpringCloud Alibaba

文章目录1 服务注册和配置中心Nacos1.1 Nacos简介1.2 Nacos作为服务注册中心服务提供者注册服务消费者注册和负载服务注册中心对比1.3 Nacos作为服务配置中心基础配置分类配置DataID方案配置Group方案配置Namespace方案配置1.4 Nacos集群和持久化配置2 服务熔断和限流SentinelS…

指针仪表读数识别系统 yolov7

指针仪表读数识别系统通过 yolov7opencv计算机视觉分析技术,利用现场摄像头可以自动识别指针型仪表读数并将读数回传给平台节省人工巡检读表的时间。YOLOv7 在 5 FPS 到 160 FPS 范围内&#xff0c;速度和精度都超过了所有已知的目标检测器&#xff0c;并在V100 上&#xff0c;…

【日常系列】LeetCode《24·贪心1》

数据规模->时间复杂度 <10^4 &#x1f62e;(n^2) <10^7:o(nlogn) <10^8:o(n) 10^8<:o(logn),o(1) 内容 lc 455 &#xff1a;分发饼干 - 贪心思想 https://leetcode.cn/problems/assign-cookies/ 提示&#xff1a; 1 < g.length < 3 * 10^4 0 < s.len…

配置双网卡聚合

一 服务器多网卡聚合的意义 1、多网卡聚合&#xff0c;可以起到网络链路冗余作用&#xff0c;当故障发生时&#xff0c;网络自动切换&#xff0c;保证业务数据不中断。 2、多网卡聚合成一条虚拟链路&#xff0c;可实现网络带宽提升&#xff0c;如2个1000Mbps的网卡聚合&#…

【收藏】使用Google Colab随时随地运行Python代码

Colab官网 什么是 Colab? Colab,或“Colaboratory”,允许您在浏览器中编写和执行 Python,不需要依赖本地资源。具有以下优势: 需要零配置免费使用GPU轻松分享几大非常方便的特性: 和Google Drive无缝融合 可以将文件存储在Google Drive里面,同时也可以从Google Driv…

TiDB性能调优

文章目录一、 TiDB 常见配置优化1.1 限制 SQL 内存使用和执行时间1.1.1 执行时间限制1.1.2 内存使用限制1.2 事务重试设置1.3 Join 算子优化1.4 常见 Mysql 兼容问题1.5 其他优化项二、TiKV优化2.1 TiKV 线程池优化2.1.1 GRPC2.1.2 Scheduler2.1.3 Raftstore2.1.4 UnifyReadPoo…

对象存储服务MinIO

1. MinIO简介 对象存储的方式对比 分布式文件系统 MinIO概述: 1.MinIO基于Apache License v2.0开源协议的对象存储服务&#xff0c;可以做为云存储的解决方案用来保存海量的图片&#xff0c;视频&#xff0c;文档。 2.Golang语言实现&#xff0c;配置简单&#xff0c;单行命令…

学习css3,使用代码实现一根心爱的二踢脚

2023春节快到了&#xff0c;虽然还在上班&#xff0c;但心情早已开始激动&#xff0c;感叹2022终将过去&#xff0c;喜迎2023兔年吧。让我以激动的心情&#xff0c;利用所学css3代码知识&#xff0c;实现一根心爱的二踢脚吧。 目录 1、实现思路 2、实现二踢脚的主体圆柱部分…

数据的存储(1)数据类型,整型在内存中的存储

TIPS 1. 函数递归必须存在限制条件。 2. 一维数组与二维数组在内存当中是连续存放的&#xff0c;二维数组的话反正也是一行一行往下走。如果能知道起始地址的话&#xff0c;后面顺藤摸瓜会很容易。 3. 数组越界的话&#xff0c;C语言本身是不做检查的。数组传参传的是数组首…

【跟学C++】面向对象三大特征——继承(Study20)

文章目录1、了解继承2、基类与派生类(父类与子类)2.1、概念2.2、案例展示3、构造顺序与析构顺序4、继承种类4.1、私有继承4.2、保护继承4.3、多继承5、总结 【说明】 大家好&#xff0c;本专栏主要是跟学C内容&#xff0c;自己学习了这位博主【 AI菌】的【C21天养成计划】&…

十五、类加载器、反射

类加载器 1类加载器【理解】 作用 负责将.class文件&#xff08;存储的物理文件&#xff09;加载在到内存中 2类加载的过程【理解】 类加载时机 创建类的实例&#xff08;对象&#xff09;调用类的类方法访问类或者接口的类变量&#xff0c;或者为该类变量赋值使用反射方式来…

excel制表基础:规范的制表理念和思路让效率提升 下篇

在日常工作中我们会构建很多的表格&#xff0c;其实这些表格无论多少&#xff0c;都可以归结为三大类&#xff0c;分别为“源数据表”、“关系信息表”和“统计分析表”。上次我们提到了一套表格“统计的核心”——“源数据表”&#xff0c;今天继续为大家分享“关系信息表”和…

力扣(LeetCode)1802. 有界数组中指定下标处的最大值(C++)

贪心二分查找 贪心性质&#xff1a;对于数组中确定位置index的数&#xff0c;要使nums[index]最大&#xff0c;等于使得整个数组之和最小。 提示 &#xff1a;数组相邻元素之差的绝对值小于1&#xff0c;为了数组之和最小&#xff0c;从index往左&#xff0c;形成公差为1的递减…

python实现多张多格式图片转PDF并打包成exe

目录 主要思路 转PDF初始代码 转PDF最终代码 GUI界面设计代码 打包成可执行文件 完整代码 附录 主要思路 从文件夹中读取图片数据&#xff0c;然后将他们保存为PDF格式。 转PDF初始代码 不长&#xff0c;大概10行代码。 from PIL import Image from os import *def …

Stardust 案例:制作散景光斑

本文介绍使用 Ae 插件 Stardust 制作散景光斑的一般方法与步骤。效果视频1、新建合成。持续时间&#xff1a;10 秒。2、新建纯色图层&#xff0c;命名为“散景光斑”&#xff0c;然后添加 Stardust 效果。3、设置 Emitter&#xff08;发射器&#xff09; 。用一个长方形的发射器…