当前位置: 首页 > news >正文

python数据结构基础(3)

书接上文.要创建一个单链表类,首先是初始化方法:

class singlelink:def __init__(self):self.head = Noneself.tail = Noneself.length=0return

判断链表是否为空:

def isempty(self):return self.length == 0

向链表尾部添加节点:

def add_node(self,item):if not isinstance(item,Node):item = Node(item)if self.head is None:self.head = itemself.tail = itemelse:self.tail.next = itemself.tail = itemself.length+=1return

在链表中插入节点:

def insert_node(self,index,data):if self.isempty():print('this link is empty')returnif index < 0 or index >= self.length:print('error:out of index')returnitem = Node(data)if index == 0:item.next = self.headself.head = itemself.length += 1return j = 0node = self.headprev = self.headwhile node.next and j<index:prex = nodenode = node.nextj += 1if j == index:item._next = nodeprev._next = itemself.length += 1

通过索引,在链表中删除节点:

def delete_node_byid(self,item_id):id = 1current_node = self.headprevious_node = Nonewhile current_node is not None:if id == item_id:if previous_node is not None:previous_node.next = current_node.nextelse:self.head = current_node.nextreturnprevious_node = current_nodecurrent_node = current_node.nextid = id + 1self.length-=1return

通过数值在链表中找到节点:

def find_node(self,value):current_node = self.headnode_id = 1results = []while current_node is not None:if current_node.has_value(value):results.append(node_id)current_node = current_node.nextnode_id = node_id + 1return results

按顺序输出链表:

def print_link(self):current_node = self.headwhile current_node is not None:print(current_node.data)current_node = current_node.nextreturn

最后尝试使用以上类和方法,形成一个有三个节点的简单链表,并将链表输出:

1 2 3

整体代码如下:

class Node:def __init__(self,data):self.data = dataself.next = Nonedef has_value(self,value):if self.data == value:return Trueelse:return Falseclass singlelink:def __init__(self):self.head = Noneself.tail = Noneself.length=0def isempty(self):return self.length == 0def add_node(self,item):if not isinstance(item,Node):item = Node(item)if self.head is None:self.head = itemself.tail = itemelse:self.tail.next = itemself.tail = itemself.length+=1returndef insert_node(self,index,data):if self.isempty():print('this link is empty')returnif index < 0 or index >= self.length:print('error:out of index')returnitem = Node(data)if index == 0:item.next = self.headself.head = itemself.length += 1return j = 0node = self.headprev = self.headwhile node.next and j<index:prex = nodenode = node.nextj += 1if j == index:item.next = nodeprev._next = itemself.length += 1def delete_node_byid(self,item_id):id = 1current_node = self.headprevious_node = Nonewhile current_node is not None:if id == item_id:if previous_node is not None:previous_node.next = current_node.nextelse:self.head = current_node.nextreturnprevious_node = current_nodecurrent_node = current_node.nextid = id + 1self.length-=1returndef find_node(self,value):current_node = self.headnode_id = 1results = []while current_node is not None:if current_node.has_value(value):results.append(node_id)current_node = current_node.nextnode_id = node_id + 1return resultsdef print_link(self):current_node = self.headwhile current_node is not None:print(current_node.data)current_node = current_node.nextreturnNode1 = Node(1)
Node2 = Node(2)
Node3 = Node(3)
#定义一个空链表
link = singlelink()
for node in [Node1,Node2,Node3]:link.add_node(node)
link.print_link()

参考书目:算法实例精讲

相关文章:

python数据结构基础(3)

书接上文.要创建一个单链表类,首先是初始化方法: class singlelink:def __init__(self):self.head Noneself.tail Noneself.length0return 判断链表是否为空: def isempty(self):return self.length 0 向链表尾部添加节点: def add_node(self,item):if not isinstance(…...

java-智能识别车牌号_基于spring ai和开源国产大模型_qwen vl

用大模型做车牌号识别&#xff0c;最简单高效 在Java场景中&#xff0c;java识别车牌号的需求非常普遍。过去&#xff0c;我们主要依赖OCR等传统方法来实现java识别车牌号&#xff0c;但这些方法的效果往往不稳定。随着技术的发展&#xff0c;现在有了更先进的解决方案——大模…...

全局池化(Global Pooling)

普通池化操作看这里&#xff1a;最大池化&#xff08;Max Pooling&#xff09;和平均池化&#xff08;Average Pooling&#xff09; 全局池化&#xff08;Global Pooling&#xff09; 是一种特殊的池化方法&#xff0c;主要包括&#xff1a; 全局平均池化&#xff08;Global …...

ubuntu 24.04运行chattts时cuda安装错误原因分析

使用ubuntu 24.04&#xff0c;按照2noise/ChatTTS官方流程安装依赖时报错。ChatTTShttps://github.com/2noise/ChatTTS 这是因为cuda版本不对&#xff0c;ChatTTS目前的版本&#xff0c;要求支持cuda 12.4及以上&#xff0c;但是如果nvidia显卡驱动版本较老&#xff0c;无法支…...

使用 Cypher 查询语言在 Neo4j 中查找最短路径

使用 Cypher 查询语言在 Neo4j 中查找最短路径 引言1. Cypher 查询语言简介2. 查找最短路径的 Cypher 查询3. 代码解释3.1 MATCH 关键字3.2 pshortestPath(3.3 (bacon:Person {name:"Kevin Bacon"})3.4 -[*]-3.5 (meg:Person {name:"Meg Ryan"})3.6 )3.7 R…...

Qt多边形填充/不填充绘制

1 填充多边形绘制形式 void GraphicsPolygonItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {Q_UNUSED(option);Q_UNUSED(widget);//painter->setPen(pen()); // 设置默认画笔//painter->setBrush(brush()); // 设置默…...

数据结构-数组(稀疏矩阵转置)和广义表

目录 1、数组定义 1&#xff09;数组存储地址计算示例①行优先②列优先 2&#xff09;稀疏矩阵的转置三元组顺序表结构定义 ①普通矩阵转置②三元组顺序表转置稀疏矩阵③稀疏矩阵的快速转置 3&#xff09;十字链表结构定义 2、广义表定义 1&#xff09;基本操作①GetHead②GetT…...

Java中的远程方法调用——RPC详解

1. 什么是RPC&#xff1f; RPC基础介绍 Java中的远程方法调用&#xff08;Remote Procedure Call&#xff0c;RPC&#xff09;是一种允许一个程序调用另一台计算机上方法的技术&#xff0c;就像在本地一样。RPC的核心思想是简化分布式计算&#xff0c;让我们可以跨网络调用远程…...

【kafka】大数据编写kafka命令使用脚本,轻巧简洁实用kafka

kafka是大数据技术中举足轻重的技术&#xff0c;市面上也有很多kafka的ui界面&#xff0c;但是都会占用比较大的内存和性能&#xff0c;这里我编写好了一个fakfa的脚本集成了kafka常见的命令使用。脚本资源放在文章顶部可自行拿取。 《Kafka 命令大全系统脚本使用指南》 在大数…...

交换区(Swap Area或Swap Partition)

在操作系统中&#xff0c;交换区&#xff08;Swap Area或Swap Partition&#xff09;扮演着至关重要的角色&#xff0c;主要用于在物理内存&#xff08;RAM&#xff09;不足时提供额外的虚拟内存空间。以下是交换区的主要功能和作用&#xff1a; 一、内存扩展 当系统的物理内…...

Excel 无法打开文件

Excel 无法打开文件 ‘新建 Microsoft Excel 工作表.xlsx",因为 文件格式或文件扩展名无效。请确定文件未损坏&#xff0c;并且文件扩展名与文件的格式匹配。...

MySQL —— Innodb 索引数据结构

文章目录 不用平衡二叉树或红黑树作为索引B树适合作为索引比B树更适合作为索引的结构——B树总结 MySQL 使用 B树索引数据结构&#xff08;因为默认使用 innodb 存储引擎&#xff09; B树&#xff1a;有序数组 平衡多叉树&#xff1b;B树&#xff1a;有序数组链表 平衡多叉树…...

探索C语言数据类型

目录 前言 一、基本数据类型 1.整型&#xff08;Integer&#xff09; 2.浮点型&#xff08;Floating - point&#xff09; 3.字符型&#xff08;Character&#xff09; 4.布尔型&#xff08;Boolean&#xff09; 二、派生数据类型 1.数组&#xff08;Array&#xff09…...

凌晨官宣离婚,他们为何让老粉直呼天塌?

你说的是影视飓风MediaStorm的创始人Tim和小鱼吧&#xff0c;他们确实在11月5日凌晨官宣离婚了。以下是具体介绍&#xff1a;官宣离婚2024年11月5日凌晨&#xff0c;影视飓风MediaStorm的创始人Tim&#xff08;潘天鸿&#xff09;在社交媒体上发文&#xff0c;宣布与小鱼&#…...

Spring Boot 导出 Excel 文件

本文将详细介绍如何使用 Spring Boot 和 Apache POI 实现 Excel 文件的导出功能&#xff0c;帮助开发者快速上手。 1. 准备工作 首先&#xff0c;确保你的 Spring Boot 项目已成功创建并运行。接下来&#xff0c;需要在 pom.xml 文件中添加 Apache POI 相关依赖&#xff0c;以…...

HTTPSOK:SSL/TLS证书自动续期工具

HTTPSOK 是一个支持 SSL/TLS 证书自动续期 的工具&#xff0c;旨在简化 SSL 证书的管理&#xff0c;尤其是自动化处理证书续期的工作。对于大多数网站而言&#xff0c;SSL 证书的续期是一项必要但容易被忽视的工作&#xff0c;因为 SSL 证书的有效期通常为 90 天。使用 HTTPSOK…...

Uniapp安装Pinia并持久化(Vue3)

安装pinia 在uni-app的Vue3版本中&#xff0c;Pinia已被内置&#xff0c;无需额外安装即可直接使用&#xff08;Vue2版本则内置了Vuex&#xff09;。 HBuilder X项目&#xff1a;直接使用&#xff0c;无需安装。CLI项目&#xff1a;需手动安装&#xff0c;执行yarn add pinia…...

基于Dpabi和spm12的脑脊液(csf)分割和提取笔记

一、前言 脑脊液&#xff08;csf&#xff09;一直被认为与新陈代谢有重要关联&#xff0c;其为许多神经科学研究提供重要价值&#xff0c;从fMRI图像中提取脑脊液信号可用于多种神经系统疾病的诊断。特别是自2019年Science上那篇著名的csf-BOLD文章发表后&#xff0c;大家都试图…...

【每日一题】2012考研数据结构 - 求字符串链表公共后缀

本篇文章将为大家讲解一道关于链表的经典题目——求两个链表的共同后缀节点。该问题在实际开发中同样具有很大的应用价值&#xff0c;是每一位数据结构学习者不可错过的重要题目。 问题描述 假设我们有一个带头结点的单链表来保存单词&#xff0c;每个节点包含一个字符和指向…...

数据结构和算法-贪心算法01- 认识贪心

贪心算法 什么是贪心算法 一个贪心算法总是做出当前最好的选择&#xff0c;也就是说&#xff0c;它期望通过局部最优选择从而得到全局最优的解决方案。 ​ ----《算法导论》 贪心算法(Greedy Method): 所谓贪心算法就是重复地(或贪婪地)根据一个法则挑选解的一部分。当挑选完毕…...

解放B站缓存:m4s-converter让你的视频资产重获自由

解放B站缓存&#xff1a;m4s-converter让你的视频资产重获自由 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 穿透格式迷雾&#xff1a;解码m4s…...

OpenClaw对话日志分析:Qwen3.5-9B优化任务执行成功率

OpenClaw对话日志分析&#xff1a;Qwen3.5-9B优化任务执行成功率 1. 问题背景与数据准备 去年开始使用OpenClaw对接Qwen3.5-9B模型时&#xff0c;我发现一个有趣现象&#xff1a;同样的自动化任务&#xff0c;在不同时段执行成功率波动很大。有时能完美完成文件整理和邮件发送…...

网站 SEO 优化包年一般多少钱_网站 SEO 优化包年后如何提高网站流量

网站 SEO 优化包年一般多少钱 在当今数字化时代&#xff0c;网站 SEO 优化已经成为了每一个企业提升在线存在感和吸引客户的关键手段。网站 SEO 优化包年一般多少钱呢&#xff1f;这个问题对于很多初创企业和中小企业来说&#xff0c;是一个重要的考虑因素。本文将详细探讨这一…...

自用超香的 Navidrome 音乐库搭建分享,告别听歌各种糟心事!

前言 作为一个实打实的音乐爱好者&#xff0c;我曾被听歌这件事折腾得够呛 —— 手机播放器加载慢到让人没耐心&#xff0c;喜欢的歌动不动就因为版权问题听不了&#xff0c;充了会员也总觉得不划算&#xff0c;更别说囤了一堆无损音乐却只能在电脑上听的憋屈。直到用上 Navid…...

OpenClaw镜像体验:在星图GPU平台快速试用SecGPT-14B安全分析

OpenClaw镜像体验&#xff1a;在星图GPU平台快速试用SecGPT-14B安全分析 1. 为什么选择云平台体验OpenClaw 第一次接触OpenClaw时&#xff0c;我被它的自动化能力吸引&#xff0c;但本地安装过程让我望而却步。作为一个经常需要评估各种AI工具的安全工程师&#xff0c;我发现…...

如何用Notepad--打造跨平台开发环境:国产编辑器的逆袭之路

如何用Notepad--打造跨平台开发环境&#xff1a;国产编辑器的逆袭之路 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器&#xff0c;目标是做中国人自己的编辑器&#xff0c;来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- …...

突破暗黑2单机限制:d2s-editor存档修改工具全解析

突破暗黑2单机限制&#xff1a;d2s-editor存档修改工具全解析 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾在暗黑破坏神2的世界中&#xff0c;为了一件心仪的装备而反复刷怪数小时&#xff1f;是否因角色属性点分配失…...

反向传播:责任追溯大法——梯度如何“回流“

反向传播:责任追溯大法——梯度如何"回流"(Version B) 📚 《从零到一造大脑:AI架构入门之旅》专栏 专栏定位:面向中学生、大学生和 AI 初学者的科普专栏,用大白话和生活化比喻带你从零理解人工智能 本系列共 42 篇,分为八大模块: 📖 模块一【AI 基础概念…...

Cursor Free VIP破解指南:智能绕过AI编程助手使用限制的完整方案

Cursor Free VIP破解指南&#xff1a;智能绕过AI编程助手使用限制的完整方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reache…...

Java的迪米特原则介绍

01.问题思考的分析什么是迪米特原则&#xff0c;这个原则如何理解&#xff0c;如何运用到实际开发&#xff0c;举例说明一下&#xff1f;什么是高内聚松耦合&#xff0c;能否举例说明一下&#xff1f;迪米特法则。尽管它不像 SOLID、KISS、DRY 原则那样&#xff0c;人尽皆知&am…...