Python | 链表的基础操作1

面向对象:

        “对象”实际上是对现实世界中所存在的事物的一种抽象

        人拥有着一些静态的特征,比如身高、体重、性别等,也拥有一些动态的行为,比如吃法,睡觉等,而在计算机世界中,我们将之抽象为一个类Person, 并具有与之对应的“属性”和“方法”。

  • 属性”表示Person类所具有的特征,比如姓名、年龄、性别,通过这些特征,我们可以描述一个“人”的基本状态。
  • “方法”表示Person类的行为和功能,比如吃饭、睡觉、行走,通过这些动作,我们可以描述一个“人”的动态行为。
# 实例化一个类,从而创造一个对象,和调用一个函数类似
person1 = Person("Tom", 10, "男") # person1是一个对象,是Person类的实例
person2 = Person("Jerry", 3, "男")# person2是一个对象,是Person类的实例

        类”是现实世界中的实体在计算机世界中的抽象概念,类可以看作是对象的模板,它定义了对象的结构和行为方式,而对象是“类”的实现。

Class类:

        在Python中,类的定义是从class关键字开始的, 类的名称命名要使用大驼峰来命名(即MyName这种形式)

        在类的代码块中,我们可以定义变量和函数,在类中所定义的变量,将会成为所有的实例的属性,所有实例都可以访问这些变量,在类中也可以定义函数(被称之方法)类的所有实例也可以访问这些方法

class Person:# 类中定义一个变量name, 会成为所有实例的公共属性name = "Tom"# 类中也可以定义函数,称之为方法,方法也可以通过该类的实例来访问def say_hello(self):print("Hello")# 创建Person的实例    
person1 = Person()
person2 = Person()# 实例可以调用属性
person1.name = "Jerry"
person2.name = "Mike"# 实例可以调用方法
person1.say_hello()
person2.say_hello()

初始化类:

class Person:#定义_init_方法:name是创造是创造实例时传递的参数def _init_(self, name):#self表示实例本身(person1,person2),即实例.name属性 = 传递的name值self.name = name

__int__方法会在实例创建的时候立即执行,可以向新创建的对象初始化属性,调用类创建对象时,类后边的所有参数都会依次传递到init中。

所以类的基本结构是如下的:

class 类名:#公共属性#init方法def _init_(self, 其他参数):#其他方法def method_1(self, 其他参数)...

定义链表节点:

class Node:def _init_(self, data):self.data = data #储存节点的数据self.next = None

        self后面的参数是你在定义链表节点时需要传的

定义链表类:

需要定义一个链表类用于容纳链表节点,链表类一般包括链表头节点和链表的节点长度这两个属性。

class LinkList:def _init_(self):#头结点初始化为Noneself.head_node = Noneself.length = 0

链表的插入:

具体步骤如下:

  • 新加入一个节点,所以链表长度length + 1

  • 创建一个新的链表节点,初始化它的值为data

  • 如果当前链表还是空链表(头节点为空),则新创建的链表节点为头节点

  • 如果当前链表不为空链表,将新的节点放入到链表的尾部,接入链表,也就是当前链表的尾部的next指向新节点,新接入的链表节点变为链表的尾部

insert方法:

class LinkList:def _init_(self):self.head_node = Noneself.lenth = 0#该方法名称为insert,接受data作为参数def insert(self, data):self.length += 1 new_node = Node(data) #创建一个新的链表头结点,初始化为dataif self.head-node is None:   #如果当前链表为空self.head_node = new_node #新创建的链表节点为头结点return self.head_nodecurrent_node = self.head_node # 如果当前链表不是空链表, currentNode 指针初始指向 头节点while current_node.next is not None:# 不断移动 currentNode,直到 next 指针为空时停止,说明已经走到最后一个节点current_node = current_node.nextcurrent_node.next = new_node  #将新创建的节点插入链表的尾部return new_node #返回插入的节点

打印链表节点:

def print_link_list(self):current_node = self.head_node   #current_node指向头结点while current_node is not None: print(current_node.data, enn = "")  #输出链表数据current_node = current_node.next    #移动current_ndoeprint()

完整代码如下:

#链表节点类
class Node:def __init__(self, data):self.data = dataself.next = None#链表类        
class LinkList:def __init__(self):self.head_node = Noneself.length = 0#尾部插入链表节点def insert(self, data):self.length += 1new_node = Node(data)if self.head_node is None:self.head_node = new_nodereturn self.head_nodecurrent_node = self.head_nodewhile current_node.next is not None:current_node = current_node.nextcurrent_node.next = new_nodereturn new_node#打印链表节点def print_link_list(self):current_node = self.head_nodewhile current_node is not None:if current_node.next is not None:print(current_node.data, end = " ")else:print(current_node.data)current_node = current_node.nextwhile True:try:n = int(input())nums = list(map(int, input().split))except:breaklink_list = LinkList()for data in nums:link_list.insert(data)link_list.print_link_list()

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

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

相关文章

什么是室内外一体化定位

室内外一体化定位是一种技术,它允许在室内外环境中对设备或人员进行连续、无缝的定位跟踪。这种技术结合了多种定位技术的优势,以克服单一技术在室内外环境中可能遇到的局限性。 室内外一体化定位通常涉及以下几种技术: 1. 卫星定位系统&am…

汽车软件单元测试分析

汽车软件单元测试概述 随着汽车技术的不断发展,汽车的功能日益复杂,软件在汽车中的作用也变得越来越重要。汽车嵌入式软件的质量直接关系到汽车的安全性、可靠性和性能表现。在这样的背景下,汽车软件单元测试成为了确保软件质量的关键环节。 汽车嵌入式软件单元测试是指对汽…

手撕C语言题典——相交链表

目录 前言 一,思路 1)暴力 2)同步指针 二,代码实现 前言 依旧是力扣上的一道题,有许多新思路提供给我们 160. 相交链表 - 力扣(LeetCode)https://leetcode.cn/problems/intersection-of-two-linked-li…

Go中字符串转成byte数组,会发生内存拷贝吗?

引言 在Go语言中,字符串和字节切片是两种常见的数据类型,它们在内存中的表现和操作方式有着本质的不同。字符串是不可变的,而字节切片则是可变的。在日常开发中,我们经常需要在这两种类型之间进行转换。那么,当字符串…

c#入门详解:接口详解

接口(interface) 抽象类中的抽象方法只规定了不能是 private 的,而接口中的“抽象方法”只能是 public 的。这样的成员访问级别就决定了接口的本质:接口是服务消费者和服务提供者之间的契约。既然是契约,那就必须是透…

Message passing mechanism (消息传递机制)

objc_msgSend 是 Objective-C 运行时系统中的一个核心函数,用于实现消息传递机制。在 Objective-C 中,方法调用实际上是消息传递的过程,当你在代码中调用一个方法时,编译器会将其转换为 objc_msgSend 函数的调用。 objc_msgSend …

构建体育直播平台源码:深度解析数据分析模块的核心展示内容

在现代的体育直播平台中,数据分析展示已经成为不可或缺的一部分。如下参考借助“东莞梦幻网络科技”提供的体育直播源码,打造的平台,并通过表格形式为用户列出以下数据分析内容: 1、积分排名:反映了各支队伍在赛季中的…

WPF 委托

在WPF(Windows Presentation Foundation)中,委托是一种类型安全的函数指针,允许将方法作为参数传递给其他方法,或将方法作为回调方法存储在委托中。委托在WPF中常用于事件处理、数据绑定、命令以及异步编程。 以下是在…

做跨境电商一定要测评吗?

不管是做亚马逊还是虾皮、Lazada、ebay、沃尔玛、Ozon、Allegro、敦煌网、Jumia、Falabella、SHEIN、OnBuy、新蛋、Fnac、eMAG、ManoMano、Fruugo、速卖通、阿里国际、煤炉等跨境电商平台,测评都是成本最低且最有效的一种推广方式 并不是说做电商就一定要去测评&am…

护肤品成分大公开

在追求美丽的道路上,护肤品无疑是我们手中的重要武器。而在这众多护肤品中,胶原蛋白这一成分因其独特的功效和作用,受到了广泛的关注和喜爱。今天,就让我们一起走进胶原蛋白的世界,揭开它的神秘面纱。 一、胶原蛋白是什…

React实现在线预览word报告/本地选择报告预览

标题使用的核心技术点是docx-preview,读取到文件的File对象,用File去做文件展示,这里是才用将文件转base64字符串存储到localStorage中 在线预览word报告且包含word样式 下载需要使用的min.js文件进项目的public目录中(上zip已包…

shell 终端打印格式化日志 log::info

代码 logging.sh #!/bin/bash NC\033[0m RED\033[31m GREEN\033[32m YELLOW\033[33m BLUE\033[34mlog::err() {printf "[$(date %Y-%m-%dT%H:%M:%S.%2N%z)][${RED}ERROR${NC}] %b\n" "$" }log::info() {printf "[${GREEN}$(date %Y-%m-%dT%H:%M:%S.%…

VB.net实战(VSTO):Excel插件的安装与卸载

1. 安装 1.1编程环境:Visual Studio 2022 1.2创建新项目: 1.3 加入一行测试程序:MsgBox(“hello”),点击启动,确认可以弹窗 1.4 点击发布 1.5 找到安装程序,点击安装。打开Excel程…

有效的括号-力扣

栈适合用来解决匹配问题。 第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false 第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以retur…

Keras深度学习框架实战(7):使用YOLOV8和KerasCV进行高效的图像物体识别

1、绪论 1.1 KerasCV简介 KerasCV是一个专注于计算机视觉任务的模块化组件库,基于Keras构建,可与TensorFlow、JAX或PyTorch等框架配合使用。 概念与定位: KerasCV是Keras API的水平扩展,提供了一系列新的第一方Keras对象&#x…

微信短视频怎么收藏?成都鼎茂宏升文化传媒公司

微信短视频怎么收藏?一文教你轻松掌握 随着微信功能的不断升级,微信短视频已经成为我们日常生活中不可或缺的一部分。无论是朋友分享的生活点滴,还是公众号推送的精彩内容,短视频都以其直观、生动的形式,吸引着我们的…

乡村振兴与脱贫攻坚相结合:巩固拓展脱贫攻坚成果,推动乡村全面振兴,建设更加美好的乡村生活

目录 一、引言 二、巩固拓展脱贫攻坚成果 1、精准施策,确保稳定脱贫 2、强化政策支持,巩固脱贫成果 3、激发内生动力,促进持续发展 三、推动乡村全面振兴 1、加快产业发展,增强乡村经济实力 2、推进乡村治理体系和治理能力…

【面试宝藏】Redis 常见面试题解析

Redis 常见面试题解析 1. 什么是 Redis? Redis 是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合。 2. Redis 的数据类型? Redis 支持以下数据…

使用tftpd更新开发板内核

我们升级内核可以通过原厂提供的升级软件来进行,比如瑞芯微的RKDevTool.exe,只不过这种方式必须通过指定的OTG升级口,还得借助按键进入loader模式后才可以。 其实还可以利用一些通用的工具来进行升级,比如tftpd工具。 下载地址p…

C++:栈(stack)、队列(queue)、优先级队列(priority_queue)

hello,各位小伙伴,本篇文章跟大家一起学习《C:栈(stack)和队列(queue)》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 文章目录 :map…