数据结构与算法-(10)---列表(List)

🌈write in front🌈
🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流.
🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️
📝个人主页:Aileen_0v0🧸—CSDN博客
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:Aileen_0v0🧸的PYTHON学习系列专栏——CSDN博客
🗼我的格言:"没有罗马,那就自己创造罗马~"

目录
列表(List)
采用链表实现无序表
无序表(元素之间没有顺序,但是有位置顺序)
列表
链表
链表的实现
Unordered List - 无序表
Add方法
size方法
remove(item)方法

列表(List)
列表是Python中的一种数据类型,用于存储一组有序的数据。列表中可以存储任意类型的数据,包括数字、字符串、布尔值等。列表以中括号 [ ] 表示,其中的每个元素之间用逗号分隔,例如:
my_list = [1, 2, 3, 4, 5]上述代码创建了一个名为 my_list 的列表,其中包含了整数 1、2、3、4 和 5。可以使用索引访问列表中的元素,例如 my_list[0] 访问列表中的第一个元素。列表支持许多常用的操作,如添加元素、删除元素、排序等。
但并不是所有的编程语言都提供了List数据类型有时候需要程序员自己实现。
列表:是一种数据项按照相对位置存放的数据集
特别的,被称为“无序表unordered list”其中数据项只按照存放位置来索引,如第1个、第2个....."、最后一个等。(为了简单起见,假设表中不存在重复数据项)
如一个考试分数的集合“54,26,93,1777和31”
如果用无序表来表示,就是[54,26,9317, 77, 31]
采用链表实现无序表
采用链表实现无序表的主要原因是,链表具有动态性和灵活性。当我们需求插入或删除元素时,链表可以快速地进行操作,而不需要进行大量的数据移动。此外,链表还可以通过动态分配内存空间来适应数据的变化,这使得无序表可以处理不同大小的数据集。
另外,链表实现无序表还有以下优点:
-
内存使用效率高:链表只需要分配和使用存储空间,而不需要事先设置固定的存储大小,这可以节省内存空间。
-
适用于大型数据集:链表可以处理大量的数据,因为它们不需要在内存中保持连续的存储空间,而是可以分散在内存中的不同区域。
-
可以有效地处理插入和删除操作:链表的插入和删除操作很快,因为它们只需要修改指针,而不需要移动元素。
链表是一种非常适合实现无序表的数据结构,因为它具有动态性,灵活性,高效性和内存使用效率高等优点。


无序表(元素之间没有顺序,但是有位置顺序)

列表

Python 中往列表添加数据,不能灵活添加,因为列表不具有连续的空间
所以元素4不能添加到列表里.
链表

由于链表( Linked List )含 pointer(指针) 所以链表可以利用碎片化空间将数据传入到空格处,
即使被其它元素占领了内存空间

# 通过链表实现 无序表-列表
#列表 和 链表 都是无序表 unordered list
#实现链表
class Node:def __init__(self,init_data):self.data = init_dataself.next = None#获得数据项def get_data(self):return self.data#获得节点def get_next(self):return self.next#设置数据项def set_data(self,new_data):self.data = new_data#设置节点def set_next(self,new_next):self.next = new_next#结点示例
temp = Node(93)
print(temp.get_data())
链表的实现

可以采用 链接结点 的方式来构建数据集 实现无序表
链表的第一个 和 最后一个 节点最重要
如果想访问到链表中的所有节点,就必须从第一个节点沿链接遍历下去.
Unordered List - 无序表
箭头所指为表头
最快捷的就是从表头开始(相当于insert[0]),
但是之前列表实现inser[0]的时间复杂度是O(n),
而链表是O(1)

结点(node): 为了组织链表而引入的一个结构,除了保存我们的元素之外,还会保存指向下一个结点的引用

当前结点(current / cur): 表示链表中某个结点。
前驱结点(previous / prev): 表示链表中某个结点的前一个结点;头结点没有前驱结点。
后继结点(next): 表示链表中某个结点的后一个结点;尾结点没有后继结点。
链表的头结点, 链表最开始的节点~
尤其是对单链表来说, 只要知道了链表的头结点就可以获取到链表的所有的元素!
通常情况下,特别喜欢用头结点来代指整个链表~
Add方法
思路步骤如下:

#为item数据项生成一个结点-Node 叫做itemdef add(self,item):#然后将这个结点命名为临时变量temp = Node(item)#将下一个临时结点设置为表头temp.set_next(self.head)#表头指向新增加的临时结点self.head = temp
注意:第三第四行代码顺序不能调换,否则会发生链表丢失

size方法

def size(self):#当前节点设为表头第一个节点current = self.headcount = 0while current != None:count += 1#将当前节点设为下一个结点的结点,循环往复current = current.get_next()#返回结点的个数return count

def search(self,item):current = self.headfound = Falsewhile current != None and not found:#判断当前节点数据项是否等于我想要找的数据if current.getData() == item:found = Trueelse:current = current.get_next()return found
remove(item)方法


def remove(self,item):current = self.headprevious = Nonefound = Falsewhile not found:if current.get_data == item:found = Trueelse:previous = currentcurrent = current.get_nextif previous == None:self.head = current.get_next()else:previous.set_next(current.get_next())

相关文章:
数据结构与算法-(10)---列表(List)
🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…...
Node-Web模块的用法
题记 node.js中web模块的用法,以下是具体操作过程和代码。 Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL,与客户端的…...
基于TCP的RPC服务
TCP服务器上的RPC,通过创建一个服务器进程监听传入的tcp连接,并允许用户 通过此TCP流执行RPC命令 -module(tr_server). -author("chen"). -behaviour(gen_server).%% API -export([start_link/1,start_link/0,get_count/0,stop/0 ]).-export(…...
docker报错问题解决:Error Invalid or corrupt jarfile app.jar
文章目录 1.问题描述2.问题分析3.问题解决 1.问题描述 此时处在 /home/ubuntu/app 目录下,并且在该目录下有一个 jenkins-0.0.1-SNAPSHOT.jar。 我在 /home/ubuntu/app 目录下执行了 docker 容器运行命令: # 映射 8859 端口 # 容器名为 jenkins-demo #…...
Day 09 python学习笔记
函数 装饰器 回顾内容: 函数可以作为参数进行传递函数可以作为返回值函数名称可以像变量一样进行赋值操作 装饰器:要求记住结论 引入: def play_dnf():print("你好啊,我是赛利亚,今天又是美好的一天")def p…...
力扣labuladong——一刷day02
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣876. 链表的中间结点二、力扣142. 环形链表 II三、力扣160. 相交链表四、力扣141. 环形链表 前言 一、力扣876. 链表的中间结点 /*** Definition for …...
【小白专用23.10.22 已验证】windows 11 安装PHP8.2 +Apache2.4
环境说明 windows:windows 11 x64apache: Apache/2.4.43php :php-8.2.11 一.php 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意: 1.要下载Thread Safe,否则没有php8apache2_4.dll这个文件;如果使用Apache作为服务器…...
Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务
Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务 一. CentOS7 安装配置SFTP服务器详解一、SFTP简介二、关闭防火墙三、安装SSH服务在CentOS7中,sftp只是ssh的一部分,所以采用yum来安装ssh服务即可1. 查看是否已经安装了ssh2.…...
为什么 glBegin 未被定义 未定义的标识符,使用新的 API(LearnOpenGL P2)
文章目录 弃用的 glBegin & glEnd使用新 API 的示例 弃用的 glBegin & glEnd 环境:glfw 3.3.8 glad core OpenGL 初学者在尝试使用 glBegin 和 glEnd 函数来绘制三角形时,有可能找到使用这些函数的文章、代码文献 但许多这些函数已经在OpenG…...
C++多态、虚函数、纯虚函数、抽象类
多态的概念 通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 举个简单的例子:抢红包,我们每个人都只需要点击一下红包,就会抢到金额。有些人能…...
20231019_vue学习
引入vue.js: <script src"https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> vue.js <script src"https://cdn.staticfile.org/vue-router/2.7.0/vue-router.min.js"></script> 路由vue模板语法 v-html:添加html模板…...
熟练使用 Redis 的五大数据结构:Java 实战教程
入门 入门阶段主要记住 Redis 的命令,熟练使用 Redis 的 5 大数据结构就可以了。 如果没有 Redis 环境,可以直接通过这个网址https://try.redis.io/,很赞,它会给你模拟一个在线的环境可供你尽情使用! 熟练使用Redis的…...
【Linux】kill 命令使用
经常用kill -9 XXX 。一直在kill,除了kill -9 -15 ,还能做什么?今天咱们一起学习一下。 kill 命令用于删除执行中的程序或工作。 kill命令 -Linux手册页 命令选项及作用 执行令 man kill 执行命令结果 参数 -l 信号,若果…...
面试-Redis-缓存雪崩
问:什么是缓存雪崩 ? 答:缓存过期是指设置缓存时都采用了同一过期时间,导致缓存在莫一时刻同时失效,从而请求全部全部打到数据库中,导致数据库压力过大而挂机。 它与缓存击穿的区别是:缓存击穿是一个key…...
AI全栈大模型工程师(九)Function Calling 的机制
文章目录 Function Calling 的机制Function Calling 示例 1:加法计算器Function Calling 实例 2:四则混合运算计算器后记Function Calling 的机制 Function Calling 示例 1:加法计算器 需求:用户输入任意可以用加法解决的问题,都能得到计算结果。 # 加载环境变量import o…...
音乐制作软件 Ableton Live 11 Suite mac中文版功能介绍
Ableton Live 11 Suite mac是一款专业级别的音乐制作软件,它提供了多种音乐制作和编辑功能,可以帮助用户创建各种音乐作品。界面简单直观,可以方便地进行各种音乐制作操作。它提供了丰富的音乐制作工具和功能,如录音、采样、编曲、…...
v-model和.sync区别
在vue2中提供了.sync修饰符,但是在vue3中不再支持.sync,取而代之的是v-model。 1.在vue2中v-model和.sync区别: 1.相同点:都是语法糖,都可以实现父子组件中的数据的双向通信。 区别在于往回传值的时候. sync 的 $…...
django cloudflare csrf 403
网站套了cloudflare flare发现登录接口403了,csrf验证失败, debug设置为False 详细报错如下: Reason given for failure: Referer checking failed - https://xxx/login does not match any trusted origins.In general, this can occur w…...
Hive 中级练习题(40题 待更新)
前言 最近快一周没更了,主要原因是最近在忙另一件事情(关于JavaFX桌面软件开发),眼看大三上一半时间就要过去了,抓紧先学Hive,完了把 Spark 剩下的补了,还有 Kafka、Flume,任务还是…...
核酸检测人员安排
题目描述: 在系统、网络均正常的情况下组织核酸采样员和志愿者对人群进行核酸检测筛查。每名采样员的效率不同,采样效率为N人/小时。由于外界变化,采样员的效率会以M人/小时为粒度发生变化,M为采样效率浮动粒度,M=N10%,输入保证N10%的结果为整数。采样员效率浮动规则:采…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...
