链表的概念及功能实现

一、链表之单向链表

前面我们使用顺序储存结构实现的顺序表,虽然查询的时候很快,但在进行元素的增加或者删除的时候:比较麻烦,需要你去移动大量的元素把数据删除或者增加。

链表里的数据是以结点方式来表示的,每一个结点的组成是由:数据+指针来组成的。

一个结点的结构是这样的:

单向链表 :

  • 单链表是一种链式储存结构,在物理储存单元不连续,非顺序
  • 由多个结点组成的,每一个结点都是有一个数据域+指针域组成,数据域是用来存储数据元素的,指针用来指向后面的节点。
  • 链表分成带头结点的链表跟不带头结点的链表。
  • 单链表的头节点里不储存数据,它的指针指向真正存储有数据的第一个链表节点。

带头结点的单链表:

 该链表储存地址:

单链表的具体实现,首先需要定义一个类表示每个结点的信息(假设每个结点都是课程的信息):

class CourseNode{public int id;public String courseName;public CourseNode next;public CourseNode(int id, String courseName) {this.id = id;this.courseName = courseName;}@Overridepublic String toString() {return "CourseNode{" +"id=" + id +", courseName='" + courseName + '\'' +", next=" + next +'}';}
}

 然后定义单链表类:

class CourseLinke{//初始化头节点public CourseNode head = new CourseNode(0,"");//链表有效元素个数private int length=0;
}

添加课程的方法:

public void addCourse(CourseNode node){//辅助的指针CourseNode cur = head;//遍历链表,找到最后一个节点while (true){if(cur.next==null){break;}cur=cur.next;}cur.next=node;length++;}

遍历课程的方法:

public void showCourse(){//定义辅助的指针CourseNode cur = head;if(cur.next==null){System.out.println("链表为空,不能输出");return;}while (true){if(cur.next==null){System.out.println("课程输出完成");return;}System.out.println(cur.next);cur=cur.next;}}

 删除课程的方法:

public void delCourse(int id){//定义辅助的指针CourseNode cur = head;if(cur.next == null){return;}//记录是否找到课程boolean flag = false;while (cur.next!=null){if(cur.next.id==id){flag=true;break;}//一直遍历cur=cur.next;}if(flag){//删除节点cur.next=cur.next.next;length--;}else {System.out.printf("要删除的节点%d没有找到",id);}}

修改课程的方法:

public void update(CourseNode node){CourseNode cur = head;boolean flag = false;while (cur.next!=null){if(cur.next.id==node.id){flag=true;break;}cur = cur.next;}if(flag){cur.next.id=node.id;cur.next.courseName=node.courseName;}else {System.out.println("没有找到要修改的课程");}}

接下来我们要实现查找倒数第K个课程,首先我们要先得到链表的长度:

public int getLength(){return length;}

查找倒数第K个课程:

//1、求解链表的长度   2、遍历到链表长度-K+1public CourseNode getLastCourse(int k){CourseNode cur = head;if(cur.next==null){System.out.println("链表为空");return null;}int length = getLength();if(k==0||k>length){throw new IllegalArgumentException("参数不合法");}for (int i=0;i<length-k+1;i++){cur=cur.next;}return cur;}

二、链表之双向链表

双向链表拥有两个指针域,一个指向后继的节点,另一个指向前驱结点。

链表的头结点的数据域是不存储数据的,所以,头结点的前驱指针域为null,它的后继指针域指的是第一个真正有数据存储的结点。

 

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

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

相关文章

【Python 语法】算法合集

查找二分查找代码大 O 表示法 广度优先搜索代码 狄克斯特拉算法 递归递归调用栈 分而治之&#xff08;divide and conquer&#xff0c;D&C&#xff09;贪心教室调度问题背包问题集合覆盖问题 动态规划背包问题旅游行程最优化 遇到问题时&#xff0c; 如果不确定该如何 高效…

Android 应用开发中,证书、签名和加固简述

在 Android 应用开发中&#xff0c;证书、签名和加固是保障应用安全和完整性的重要机制&#xff0c;各自作用如下&#xff1a; 一、应用证书&#xff08;Digital Certificate&#xff09; 作用&#xff1a; 身份标识&#xff1a;证书包含开发者的公钥、组织信息等&#xff0c;用…

在什么情况下需要使用光谱相机呢?

1.需要捕捉不可见光信息时 光谱相机不仅能捕捉可见光&#xff0c;还能记录红外、紫外等波段的光谱信息。以下场景尤其适用&#xff1a; 环境监测&#xff1a;检测水质、空气污染物等肉眼无法观察的物质。 农业监测&#xff1a;分析植物的近红外反射率&#xff0c;判断作物健…

一周一个Unity小游戏2D反弹球游戏 - 球板的发球

前言 本文将实现当游戏开始时球在球板上,且不具备物理性,在Windows平台上通过点击屏幕来球发射,安卓平台上当手指触摸到屏幕上时进行发球,并此时开始具备物理性。 发球逻辑 首先在球板上创建一个球的发射点,新建一个空的游戏物体,并命名为BallPoint,并将其作为SpringBoa…

【算法】图论 —— Floyd算法 python

洛谷 B3647 【模板】Floyd 题目描述 给出一张由 n n n 个点 m m m 条边组成的无向图。 求出所有点对 ( i , j ) (i,j) (i,j) 之间的最短路径。 输入格式 第一行为两个整数 n , m n,m n,m&#xff0c;分别代表点的个数和边的条数。 接下来 m m m 行&#xff0c;每行三…

从实例出发,讲解BLE专业调试工具nRF Connect

nRF Connect是NORDIC Semiconductor提供的一套强大的低功耗蓝牙&#xff08;BLE&#xff09;开发工具和应用程序&#xff0c;本文从两个示例着手分析&#xff1a;iBeacon和Eddystone协议的信标Beacon 前置知识&#xff1a;什么是信标Beacon&#xff1f; 信标&#xff08;Beacon…

[STM32]从零开始的STM32 BSRR、BRR、ODR寄存器讲解

一、前言 学习STM32一阵子以后&#xff0c;相信大家对STM32 GPIO的控制也有一定的了解了。之前在STM32 LED的教程中也教了大家如何使用寄存器以及库函数控制STM32的引脚从而点亮一个LED&#xff0c;之前的寄存器只是作为一个引入&#xff0c;并没有深层次的讲解&#xff0c;在教…

使用Truffle、Ganache、MetaMask、Vue+Web3完成的一个简单区块链项目

文章目录 概要初始化Truffle项目创建编写合约编译合约配置Ganache修改truffle-config.js文件编写迁移文件部署合约使用Truffle 控制台使用MetaMask和VueWeb3与链交互 概要 使用Truffle、Ganache、MetaMask、VueWeb3完成的一个简单区块链项目。 初始化Truffle项目 安装好truf…

在线会议时, 笔记本电脑的麦克风收音效果差是为什么

背景 最近在线面试. 使用腾讯会议或者飞书, 戴耳机参加在线面试, 遇到好几个面试官说我的音质不好. 一直没在意, 后来反思, 应该是电脑哪里出了问题. 排查 先买了一副品牌有线耳机, 测试后本地录制的声音仍然品质很差去掉耳机延长线后, 麦克风品质仍然很差最终找到答案, 原…

通过百度构建一个智能体

通过百度构建一个智能体 直接可用,我不吝啬算力 首先部署一个模型,我们选用deepseek14 构建智能体思考步骤,甚至多智能体; from openai import OpenAIclass Agent:def __init__(self, api_key, base_url, model

解决“request returned Internal Server Error for API route and version xxx”错误

一、问题描述 ragflow/README_zh.md at main infiniflow/ragflowhttps://github.com/infiniflow/ragflow/blob/main/README_zh.md 当我们使用Docker部署ragflow,确认服务器状态时,提示“request returned Internal Server Error for API route and version http://%2F%2F.%…

OpenFlexure记录

https://openflexure.org/projects/microscope/build

游戏引擎学习第131天

仓库:https://gitee.com/mrxiao_com/2d_game_3 运行游戏并识别我们的小问题 今天的工作重点是对游戏引擎进行架构优化&#xff0c;特别是针对渲染和多线程的部分。目前&#xff0c;我们的目标是让地面块在独立线程上进行渲染&#xff0c;以提高性能。在此过程中&#xff0c;我…

Hbase伪分布安装教程,详细版

注意Hbase版本与Hadoop版本的兼容&#xff0c;还有与JDK版本的兼容 本次用到的Hbase为2.4.6版本&#xff0c;Hadoop为3.1.3版本&#xff0c;JDK为JDK8 打开下面的网址查看兼容问题 Apache HBase Reference Guidehttps://hbase.apache.org/book.html#configuration 点击基础先…

使用Hydra进行AI项目的动态配置管理

引言:机器学习中的超参数调优挑战 在机器学习领域,超参数调优是决定模型性能的关键环节。不同的模型架构,如神经网络中的层数、节点数,决策树中的最大深度、最小样本分割数等;以及各种训练相关的超参数,像学习率、优化器类型、批量大小等,其取值的选择对最终模型的效果…

基于Kerberos认证对接华为云Elasticsearch

可以通过华为官方提供的Elasticsearch Java客户端&#xff08;基于Elasticsearch官方版本改造&#xff09;&#xff0c;实现基于Kerberos认证访问和操作华为云Elasticsearch&#xff1b;亦可以使用更加通用的开源Elasticsearch Java客户端bboss&#xff0c;实现基于Kerberos认证…

Rocky Linux 8.5 6G内存 静默模式(没图形界面)安装Oracle 19C

Oracle19c 下载地址 Database Software Downloads | Oraclehttps://www.oracle.com/database/technologies/oracle-database-software-downloads.html#db_ee 目录 一、准备服务器 1、服务器可以克隆、自己装 2、修改主机名 3、重启 4、关闭selinux 5、关闭防火墙 5.1、…

6.6.6 嵌入式SQL

文章目录 2个核心问题识别SQL语句主语言和SQL通信完整导图 2个核心问题 SQL语句嵌入高级语言需要解决的2个核心问题是&#xff1a;如何识别嵌入语句&#xff1f;如何让主语言&#xff08;比如C,C语言&#xff09;和SQL通信&#xff1f; 识别SQL语句 为了识别主语言中嵌入的SQL…

农作物叶子病害检测数据集VOC+YOLO格式5169张29类别

数据集有部分增强 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;5169 标注数量(xml文件个数)&#xff1a;5169 标注数量(txt文件个数)…

hfs for windows linux apple

HFS&#xff08;HTTP File Server&#xff09;是一款轻量级的文件共享工具&#xff0c;专门用于通过 HTTP 协议快速共享文件。它非常适合在局域网或互联网上临时共享文件&#xff0c;操作简单&#xff0c;无需复杂的配置。 HFS 的主要特点 简单易用&#xff1a; 界面直观&#…