蓝桥杯备赛Day6——链表

news2024/12/24 0:34:22

目录

数组的缺点

链表

单向链表

双向链表

Python链表的实现

手写链表


数组的缺点

1)需要占用连续的空间
若某个数组很大,可能没有这么大的连续空间给它用。
2〉不方便删除和插入
例如删除数组中间的一个数据,需要把后面所有的数据往前挪填补这个空位,产生大量的拷贝开销。中间插入数据,也同样不方便操作。
 

链表

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

单向链表

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

双向链表


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

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)

例题

 自行车停放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()

【题目描述】
设有n个人围坐在圆桌周围,现从某个位置k上的人开始报数,报数到m的人就站出来。下一个人,即原来的第m+l个位置上的人,又从1开始报数,再报数到m的人站出来。依次重复下去,直到全部的人都站出来为止。试设计一个程序求出这n个人的出列顺序。
【输入描述】
输入只有一行且为用空格隔开的三个正整数n, k, m,其含义如上所述。
【输出描述】
共n行,表示这n个人的出列顺序。

n,k,m = map( int,input( ).split())
a= list( range( 1,n+1))
i = k-1
while len(a)>0:
    i = ( i+m-1)%len(a)
    print(a.pop(i))

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

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

相关文章

CODESYS开发教程7-字符串及其基本操作

今天继续我们的小白教程,老鸟就不要在这浪费时间了😊。 前面一期我们介绍了CODESYS的关键字及变量。这一期主要介绍CODESYS的字符串类型,以及如何利用字符串操作函数来实现字符串的查找、插入、替换、连接、分割、删除等相关操作。注意本文介…

Realsense相机的RGB与depth图像的对齐

第三部分 将RGB图像和Depth图像对齐 文章目录第三部分 将RGB图像和Depth图像对齐前言一、创建对齐的cpp文件1.用vim创建C文件二、使用CMake构建C工程1.创建并编写CMakeList.txt文件2.编译CMakeLists.txt总结前言 将RGB图像和深度图像对齐有两种方式,一种是将深度图…

音视频开发-第一章-H264编解码

目录参考原文一、概述二、封装格式2.1、视频文件封装格式2.2、音视频编码方式2.2.1、视频编码方式2.2.2、音频编码方式三、H264相关概念3.1、H264基本单元3.2、帧类型3.3、GOP(画面组)3.4、IDR 帧四、H264压缩方式4.1、H264压缩方式4.2、H264压缩方式说明五、H264分层结构5.1、…

【websocket】前端websocket 实时通信

前端websocket 实时通信 文章目录前端websocket 实时通信什么是websocket为什么传统的http协议不能做到websocket实现的功能websocket前后端所用到的事件对比WebSocket.readyState代码什么是websocket websocket是HTML5开始提供的一种网络通信协议,它诞生的目的是在…

60条小妙招帮助你开车更省油

1、把备胎和千斤顶,工具,都放在家里,不跑长途不带这些,省油。2、说明书上说92号或以上标号,那么加95号油省油。如果是95或以上的标注,那就加98省油。3、驾驶中尽量减少急加速 急刹车,省油。4、驾…

Java——多态

好久不见啊,兄弟们!!这不将近期末考试了吗,阿涛平日里课听的不多,所以最近都在疯狂补课,祖宗之法也可变,阿涛的学校终于不是二十周校历了!!希望从今往后我们的生活都能够…

[oeasy]python0041_ 转义字符_转义序列_escape_序列_sequence

转义序列 回忆上次内容 上次回顾了5bit-Baudot博多码的来历从 莫尔斯码 到 博多码 原来 人 来 收发电报 现在 机器 来 收发电报 输入方式 从 电键改成 键盘 输出方式 从 纸带变成 打印纸张 后来 电传打字机ASR-33成为 初代 经典终端 除了 \n 和 \r 之外 还有什么 特殊字符 吗…

前端格式化工具使用(eslint、stylelint、prettier、lint-staged和husky搭配格式化代码)

目录 eslint 安装eslint .eslintrc.js env extends parser parserOptions rules globals plugins 屏蔽eslint检测具体规则 官方规则 stylelint 安装stylelint 创建stylelint配置文件 .eslintrc.js extends sass文件的格式检查 prettier 安装使用prettier …

Vue组件-插槽

一、插槽 1. 组件的三大核心:属性(data、props)、事件、插槽 2. 插槽(slot) 插槽(slot)将父组件的内容与子组件的模板相混合,从而弥补了视图的不足。 插槽的目的:使组件…

ConstraintLayout2

ConstraintLayout2ImageFilterView 属性 app:altSrc:altSrc提供的资源将会和src提供的资源通过crossfade属性形成交叉淡化效果。默认情况下,crossfade0,altSrc所引用的资源不可见,取值在0-1app:saturation:float型,默认1&#xf…

FPGA知识汇集-时钟系统的移植

ASIC 和FPGA芯片的内核之间最大的不同莫过于时钟结构。ASIC设计需要采用诸如时钟树综合、时钟延迟匹配等方式对整个时钟结构进行处理,但是 FPGA设计则完全不必。因为后者有内建的时钟资源:锁相环、频率综合器、移相器,以及具有低延迟特性的专用时钟布线网…

Unity基于状态机的架构与设计

我们做游戏的时候经常会有流程控制,流程控制的方法有很多,行为决策树,状态机等。本质差别都不大,就是把每一段执行逻辑做成一个一个的节点,根据条件执行某个节点,切换到某个节点。今天给大家分享一下基于状…

如何在VSCode中添加Python解释器并安装Python库

如何在VSCode中添加Python解释器并安装Python库作者介绍一. 安装VScode编辑器二. 安装Python解释器三. 在VScode中添加Python解释器四. 创建项目并在VScode中打开;五、在VScode中安装Python库作者介绍 孟莉苹&#xf…

【TypeScript入门】TypeScript入门篇——对象

对象其实就是一种封装的概念,它把事物封装成一个类,然后提供类的接口,而具体的过程人们是看不到的。 一、对象实例 二、TypeScript 类型模板 三、鸭子类型(Duck Typing) 对象是包含一组键值对的实例。 值可以是标量、函数、数组、对象等&am…

Linux常用命令——lsof命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) lsof 显示Linux系统当前已打开的所有文件列表lsof -p pid 补充说明 lsof命令用于查看你进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系…

十四、Node.js 中 session验证登录

在前一篇内容中讲到这个cookie实现验证登录,cookie是存储在客户端的,而session是存储在服务器的,相比较session的安全性会更高,session对象存储特定用户会话所需要的属性以及配置信息,服务通过session对象将用户的信息…

CPU使用率过高的原因及解决方法

常见的CPU使用率过高可不是职场CPU哦,而是电脑的中央处理器,CPU作为计算机系统重要的运算和控制核心,可谓是“很忙”的存在。在我们日常使用电脑设备时,由于打开的软件、游戏、网页等程序容易导致电脑运作卡顿,这时候就…

《图机器学习》-Traditional Methods for Machine Learning in Graphs

Traditional Methods for Machine Learning in Graphs前言一、Node-Level Tasks and Features二、Link-Level Tasks and Features三、Graph-Level Tasks and Features前言 图机器学习任务可以分为三种: Node-level prediction:节点级的预测 如对节点进…

最优控制学习笔记3----无约束条件的泛函极值问题

无约束条件的最优控制问题 设函数 x(t)x(t)x(t) 在 [t0,tf][t_0, t_f][t0​,tf​] 区间上连续可到,考虑 Lagrange型性能指标函数 J[x(t)]∫t0tfL[x(t),x˙(t),t]dtJ[x(t)]\displaystyle\int_{t_0}^{t_f}L[x(t), \dot{x}(t), t]dtJ[x(t)]∫t0​tf​​L[x(t),x˙(t),…

Linux---常见指令

目录 01. ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令 06.rmdir指令 && rm 指令 07.man指令 08.cp指令 09.mv指令 10. cat指令 11.more指令 12.less指令 13.head指令 13.tail指令 简述重定向和管道概念: 14.时间相关的指令 15.Ca…