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

数据结构之单链表实现(JAVA语言+C语言)

一、理论

1 单链表结构

在这里插入图片描述

2 增、删、查 、改思路

  • (增)直接添加放到最后即可。按顺序添加:找到要修改的节点的前一个节点,插入新节点()。
  • (改)要修改的节点修改内容即可。
  • (删)找到待删除节点的前一个节点,把要删除节点的后一个节点信息存放到该节点的next即可
  • (查==较容易)遍历依次打印即可。按编号查找,找到对应编号打印即可

二、代码实现

1、JAVA代码实现

package basicdata;public class SingleLinkedListTest {public static void main(String[] args) {Node node1 = new Node(123, "Tom", "无极剑道");//SingleLinkedList singleLinkedList = new SingleLinkedList();singleLinkedList.addNode(node1);singleLinkedList.list();System.out.println("*******************");singleLinkedList.addByOrder(new Node(234, "Jack", "断头斩杀"));singleLinkedList.addByOrder(new Node(121, "Jack", "断头斩杀"));singleLinkedList.addByOrder(new Node(121, "Jack", "断头斩杀"));singleLinkedList.list();//System.out.println("******修改后*******");//singleLinkedList.alter(new Node(121, "Bob", "无形之刃"));//singleLinkedList.list();// System.out.println("**************");//singleLinkedList.delNode(234);System.out.println("***反转后***");singleLinkedList.reverSetList();singleLinkedList.list();}
}
//
class SingleLinkedList{// 先初始化一个头结点,头节点不存放数据private Node head = new Node(0,"表头","领导单链表");// 返回表头public Node getHead(){return head;}public SingleLinkedList() {}// 添加节点到单链表,按添加顺序排列public void addNode(Node node){// 思路:把头结点的地址给temp//      直到next = null时,让next存放添加的节点Node temp = head;while (true){if (temp.next == null) {break;}else {temp = temp.next;}}// 退出while 循环时 temp.next = nulltemp.next  = node;}// 遍历单链表public void list(){Node temp = head;if (head == null) {System.out.println("链表为空");return;}while (true){if (temp == null) {break;}else {// 输出节点信息System.out.println(temp);// 指针后移temp = temp.next;}}}//  根据编号顺序插入节点 ,链表内容按编号从小到大排列public void addByOrder(Node node){// 需要先找到要添加位置的前一个节点// 链表为空不需要单独考虑Node temp = head;// 为找到插入位置 需要一个 flagboolean flag = false;while (true){// 此情况可以添加,添加到表头后if (temp.next == null) { // 到链表末端break;}// 此情况不可以添加,要添加的编号已经存在if (temp.next.number == node.number) {flag = true;break;}//此情况为找到要添加位置的前一个节点,可以添加if (temp.next.number > node.number) {break;}else {temp = temp.next;}}if (flag ) {System.out.printf("你要插入的节编号%d已经存在",node.number);System.out.println();}else {node.next = temp.next ;temp.next=node;}}// 修改节点信息(根据编号),编号不变,修改内容public void alter(Node node){if (head.next == null) {System.out.println("链表为空");return;}// 和按编号插入(Node temp = head;)稍微有点区别// Node temp  = head.next;Node temp  = head.next;boolean flag = false;while (true){if (temp == null) {break;}// 找到要修改的节点,可以修改if (temp.number == node.number) {flag = true;break;}else {temp = temp.next;}}if (flag) {// 修改temp.name = node.name;temp.skill= node.skill;}else {System.out.println("没有找到要修改的节点");}}// 根据编号删除节点public void delNode(int number){//需要找到待删除的前一个节点Node temp = head;boolean flag = false;while (true){if (temp.next == null) {break;}//找到待删除的前一个节点if (temp.next.number == number) {flag = true;break;}else {temp  =  temp.next;}}if (flag ) {//temp.next = temp.next.next;}else {System.out.println("要删除的元素不存在");}}// 反转单链表public void reverSetList(){if (this.head.next== null||this.head.next.next==null) {return;}Node tempCur = this.head.next; // 辅助变量Node tempNext = null;      // 指向tempCur,不然会丢失Node reverSetHead = new Node(0, "", ""); // 新链表while (tempCur != null){tempNext = tempCur.next; //存储当前节点的下一节点tempCur.next = reverSetHead.next;// 头插法 把当前节点接到到reverSetHeadreverSetHead.next = tempNext;tempCur=tempNext;// 后移}this.head.next = reverSetHead.next;}}
// 定义Node
class Node{public int number;public String name;public String skill;public Node next;    //存放下一个节点地址
//构造器public Node(int number, String name, String skill) {this.number = number;this.name = name;this.skill = skill;//this.next = next;// 理解:不给next赋值//没申请一个节点时 next = null}//重写 toString@Overridepublic String toString() {return "Node{" +"number=" + number +", name='" + name + '\'' +", skill='" + skill + '\'' +'}';}
}

运行结果

Node{number=0, name='表头', skill='领导单链表'}
Node{number=123, name='Tom', skill='无极剑道'}
*******************
你要插入的节编号121已经存在
Node{number=0, name='表头', skill='领导单链表'}
Node{number=121, name='Jack', skill='断头斩杀'}
Node{number=123, name='Tom', skill='无极剑道'}
Node{number=234, name='Jack', skill='断头斩杀'}
******修改后*******
Node{number=0, name='表头', skill='领导单链表'}
Node{number=121, name='Bob', skill='无形之刃'}
Node{number=123, name='Tom', skill='无极剑道'}
Node{number=234, name='Jack', skill='断头斩杀'}
删除后**************
Node{number=0, name='表头', skill='领导单链表'}
Node{number=121, name='Bob', skill='无形之刃'}
Node{number=123, name='Tom', skill='无极剑道'}

2、C语言代码实现

相关文章:

数据结构之单链表实现(JAVA语言+C语言)

一、理论 1 单链表结构 2 增、删、查 、改思路 (增)直接添加放到最后即可。按顺序添加:找到要修改的节点的前一个节点,插入新节点()。(改)要修改的节点修改内容即可。(…...

docker 安装Sentinel

1.拉取镜像:docker pull bladex/sentinel-dashboard 2.运行镜像:docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard 3. 访问地址: 本地地址:http://localhost:8858 (默认端口为8080) 远程地址&#xf…...

通过内网穿透、域名解析实现本地服务部署到公网的架构设计方案

本文主要是总结这些年自己在家玩互联网服务的心得收获, 同时随着年龄增大, 发现脑子确实越来越不好用, 只有记录到笔记中才是真正有意义的。 学生时期做了一些实验, 比如给实验室做日报系统、管理10多台服务器,当时学习了很多架构设计的知识,比如集群化…...

语音陪玩交友软件系统程序-app小程序H5三端源码交付,支持二开!

电竞行业的发展带动其周边产业的发展,绘制着游戏人物图画的抱枕、鼠标垫、海报销量极大,电竞游戏直播、游戏教程短视频也备受人们喜爱,自然,像游戏陪练、代练行业也随之生长起来,本文就来讲讲,从软件开发角…...

import关键字的使用

- import : 导入 - import语句来显式引入指定包下所需要的类。相当于import语句告诉编译器到哪里去寻找这个类。为了使用定义在其它包中的 Java 类,需用 import 语句来显式引入指定包下所需要的类。相当于 import 语句告诉编译器到哪里去寻找这个类 。 语法格式 …...

江协STM32:点亮第一个LED灯和流水灯

很多单片机都是高电平弱驱动,低电平强驱动,所以这里是低电平有效 点亮一个LED灯 操作STM32的GPIO需要三个操作: 第一个使用RCC开启GPIO的时钟 第二步使用GPIO_Init函数初始化GPIO 第三步使用输出或输入函数控制GPIO 1.使用RCC开启GPIO的时…...

设计模式之建造者模式精讲

也叫生成器模式。将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 在建造者模式中,有如下4个角色: 抽象建造者(Builder):用于规范产品的各个组成部分,并进行抽象&…...

vue3源码解析——watch和watchEffect区别

watch和watchEffect是Vue 3.0中新增的两个响应式API,用于监听数据的变化。watch适用于需要获取新值和旧值,或者需要懒执行的场景,而watchEffect适用于需要监听多个数据源,并且需要立即执行的场景。它们之间的区别如下:…...

微服务(基础篇-006-Docker)

目录 初识Docker(1) Docker解决的问题(1.1) Docker与虚拟机(1.2) 镜像和容器(1.3) Docker和DockerHub(1.4) docker架构(1.5) 安…...

深度学习算法概念介绍

前言 深度学习算法是一类基于人工神经网络的机器学习方法,其核心思想是通过多层次的非线性变换,从数据中学习表示层次特征,从而实现对复杂模式的建模和学习。深度学习算法在图像识别、语音识别、自然语言处理等领域取得了巨大的成功&#xf…...

查找算法及查找常用数据结构总结

1.顺序表查找 基本方法: 设查找表以一维数组来存储,要求在此表中查找出关键字的值为x的元素的位置,若查找成功,则返回其位置(即下标),否则,返回一个表示元素不存在的下标&#xff0…...

大语言模型---强化学习

本文章参考,原文链接:https://blog.csdn.net/qq_35812205/article/details/133563158 SFT使用交叉熵损失函数,目标是调整参数使模型输出与标准答案一致,不能从整体把控output质量 RLHF(分为奖励模型训练、近端策略优化…...

前端三剑客 —— CSS (第二节)

目录 内容回顾: CSS选择器*** 属性选择器 伪类选择器 1):link 超链接点击之前 2):visited 超链接点击之后 3):hover 鼠标悬停在某个标签上时 4):active 鼠标点击某个标签时,但没有松开 5):fo…...

牛客NC31 第一个只出现一次的字符【simple map Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c 核心 Map参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*…...

软考系统架构设计师(摘抄)01

架构师承担的责任 系统架构师设计师是承担系统架构设计的核心角色,他不仅是连接用户需求和系统进一步设计与实现的桥梁,也是系统开发早期阶段质量保证的关键角色。系统架构师就是项目的总设计师,他是一个既需要掌控整体又需要洞悉局部瓶颈&a…...

5G无线接入网和接口协议

**部分笔记** 4.3无线协议架构 NR无线协议分为两个平面:用户面和控制面。 用户面(UP):协议栈及用户数据采用的协议 控制面(Control Plane,CP)协议栈即系统的控制信令传输采用的协议簇。 虚线标注的是信令数据的流向。一个UE在…...

【力扣刷题日记】1173.即时食物配送I

前言 练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。 今日题目: 1173.即时食物配送I 表:Delivery 列名类型delivery_idintcustomer_idintorder_datedatecustomer…...

2024年github之node排行榜top50

如果有帮助到您还请动动手帮忙点赞,关注,评论转发,感谢啦!💕💕💕😘😘😘 本文由Butterfly一键发布工具发布 2024年github之node排行榜top50 语言star项目名称…...

当我们在地址栏输入URL的时候浏览器发生了什么

URL 解析 是否合法 首先判断你输入的是一个合法的 URL 还是一个待搜索的关键词,并且根据你输入的内容进行自动完成、字符编码等操作。检查http缓存 DNS 查询 浏览器缓存 -> 操作系统缓存 -> 路由器缓存 -> DNS缓存 -> 根域名服务器查询 TCP 连接 …...

【研发日记】Matlab/Simulink开箱报告(十一)——Requirements Toolbox

目录 前言 Requirements Toolbox 编写需求 需求联接设计 需求跟踪开发进度 追溯性矩阵 分析和应用 总结 前言 见《开箱报告,Simulink Toolbox库模块使用指南(六)——S-Fuction模块(TLC)》 见《开箱报告&#x…...

如何用Win11Debloat让你的Windows系统速度提升70%:终极优化指南

如何用Win11Debloat让你的Windows系统速度提升70%:终极优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutt…...

终极指南:Google Maps Python客户端错误处理与异常类型完全解析

终极指南:Google Maps Python客户端错误处理与异常类型完全解析 【免费下载链接】google-maps-services-python Python client library for Google Maps API Web Services 项目地址: https://gitcode.com/gh_mirrors/go/google-maps-services-python 在Pytho…...

赋能音乐自由:Unlock Music技术解密与全场景应用指南

赋能音乐自由:Unlock Music技术解密与全场景应用指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https:…...

探索音乐资源获取:如何通过开源工具畅享高品质音乐体验

探索音乐资源获取:如何通过开源工具畅享高品质音乐体验 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 在数字音乐时代,寻找稳定、免费且高质量的音乐资源成为许多音乐爱好…...

WebGL开发者必备:用RenderDoc旧版本抓帧调试的完整避坑指南(附DEBUG_CHROME.bat脚本)

WebGL开发者必备:用RenderDoc旧版本抓帧调试的完整避坑指南(附DEBUG_CHROME.bat脚本) 最近在WebGL开发中遇到一个棘手问题:最新版RenderDoc已经禁止了对Chrome等浏览器的抓帧功能。这对于正在学习图形学课程(比如GAMES…...

通义千问1.5-1.8B-Chat-GPTQ-Int4场景应用:网络安全威胁情报的智能分析与报告生成

通义千问1.5-1.8B-Chat-GPTQ-Int4场景应用:网络安全威胁情报的智能分析与报告生成 1. 引言:当安全分析师遇上信息洪流 想象一下,你是一名网络安全分析师。凌晨三点,刺耳的告警声把你从睡梦中惊醒。屏幕上,来自防火墙…...

别再自己造轮子了!用Qt的QModbusTcpClient库5分钟搞定Modbus TCP通讯

别再重复造轮子!用Qt的QModbusTcpClient库5分钟实现工业级Modbus TCP通信 在工业自动化领域,Modbus TCP协议因其简单可靠的特点,已成为PLC与上位机通信的事实标准。许多Qt开发者面对Modbus通信需求时,第一反应往往是手动封装协议栈…...

AI图像抠图新体验:cv_unet_image-matting参数调优全解析

AI图像抠图新体验:cv_unet_image-matting参数调优全解析 1. 引言:为什么需要专业抠图工具 在日常工作和生活中,我们经常需要处理图片——制作证件照、设计海报、编辑产品图等等。传统的手动抠图不仅耗时耗力,而且对技术要求高&a…...

视觉问答技术全解析:从原理到实践的LAVIS框架应用指南

视觉问答技术全解析:从原理到实践的LAVIS框架应用指南 【免费下载链接】LAVIS LAVIS - A One-stop Library for Language-Vision Intelligence 项目地址: https://gitcode.com/gh_mirrors/la/LAVIS 技术原理:机器如何"看懂"并"回答…...

宠物店主的福音:用LongCat一键生成宠物服装电商主图,省时省力

宠物店主的福音:用LongCat一键生成宠物服装电商主图,省时省力 1. 为什么宠物店主需要AI图片编辑工具 开宠物店的朋友们都知道,商品主图的质量直接影响销量。一件宠物小衣服,如果只是平铺拍摄或者随便套在模特身上,很…...