1:单链表是:

  • 单链表是一种链式存取的 数据结构 用一组地址任意的 存储单元 存放线性表中的数据元素。
  • 链表中的数据是以结点来表示的,每个结点的构成:元素 ( 数据元素 的映象) + 指针 (指示后继元素 存储 位置),元素就是存储数据的存储单元,指针就是连接每个结点的 地址 数据。 链表中的数据是以结点来表示的,
  • 每个结点的构成:元素 ( 数据元素 的映象) + 指针 (指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。 以“结点的序列”表示线性表称作 线性链表 (单链表),单链表是链式存取的结构。 链接方式存储的线性表简称为链表(Linked List)。 ② 链表中结点的逻辑次序和物理次序不一定相同。

2:代码实现:

  单链表类属性的定义:

public class HeroNode {
//编号
public int no;
public String Name;
public String noName;
//指向下一个节点
public HeroNode next; public HeroNode(int no, String name, String noName) {
this.no = no;
Name = name;
this.noName = noName; }
}

  单链表管理类(简单的增删改查):

class LindedHeroNode {
private HeroNode head = new HeroNode(0, "", ""); //顺序添加并不能重复
public void addOrder(HeroNode heroNode) {
HeroNode temp = head;
//标识
boolean flag = false;
while (true) {
if (temp.next == null) {
//已经到最后了
break;
}
if (temp.next.no > heroNode.no) {//找到位置就添加到后面
break;
} else if (temp.next.no == heroNode.no) {//相等则不添加
flag = true;
break;
}
//后移
temp = temp.next;
}
if (flag) {
System.out.println("有相等的编号");
} else {
heroNode.next = temp.next;
temp.next = heroNode;
} } //修改
public void update(HeroNode heroNode) {
//先判断链表内部有没有数据
if (head.next == null) {
return;
}
HeroNode temp = head.next;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
//找到退出
if (temp.no == heroNode.no) {
flag = true;
break;
}
//指向下一节点
temp = temp.next;
}
if (flag) {
temp.Name = heroNode.Name;
temp.noName = heroNode.noName;
} else {
System.out.println("没有找到标识");
}
}
//删除
public void delect(int no) {
if (head.next == null) {
System.out.println("没有数据");
return;
}
HeroNode temp = head;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.no == no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.next = temp.next.next;
} else {
System.out.println("没有找到");
}
} //遍历
public void list() {
if (head.next == null) {
System.out.println("没有数据");
return;
}
//头结点不能动 需要一个辅助变量来辅助
HeroNode temp = head.next;
while (true) {
if (temp == null) {
break;
}
System.out.println(temp);
temp = temp.next;
} }
}

 3:测试:

//主测试
public class LinkedTest {
public static void main(String[] args) {
HeroNode heroNode = new HeroNode(1, "老大", "喜欢冰淇淋");
HeroNode heroNode1 = new HeroNode(3, "老三", "喜欢棉花糖");
HeroNode heroNode2 = new HeroNode(2, "老二", "喜欢巧克力");
HeroNode heroNode3 = new HeroNode(4, "老四", "喜欢棒棒糖");
LindedHeroNode lindedHeroNode = new LindedHeroNode();
//添加
lindedHeroNode.addOrder(heroNode);
lindedHeroNode.addOrder(heroNode1);
lindedHeroNode.addOrder(heroNode2);
lindedHeroNode.addOrder(heroNode3);
//修改
HeroNode heroNode4 = new HeroNode(2, "小杰", "帅哥");
lindedHeroNode.update(heroNode4);
//删除
lindedHeroNode.delect(6);
//遍历
lindedHeroNode.list();
}
}

  

数据结构入门之单链表代码实现(java)的更多相关文章

  1. 理解单链表的反转(java实现)

    要求很简单,输入一个链表,反转链表后,输出新链表的表头.   反转链表是有2种方法(递归法,遍历法)实现的,面试官最爱考察的算法无非是斐波那契数列和单链表反转,递归方法实现链表反转比较优雅,但是对于不 ...

  2. 数据结构(一) 单链表的实现-JAVA

    数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺.加油.珍惜校园中自由学习的时光.按照链表.栈.队列.排序.数 ...

  3. 数据结构之单链表的实现-java

    一.单链表基本概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元(一般是非连续存储单元)存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素data + 指针next ...

  4. 数据结构(2):单链表学习使用java实现

    单链表是单向链表,它指向一个位置: 单链表常用使用场景:根据序号排序,然后存储起来. 代码Demo: package com.Exercise.DataStructure_Algorithm.Sing ...

  5. java单链表代码实现

    用惯了C++,java写起来果然不太爽...不废话了,上代码... package javaInnerclassDemo; class Link{ class Node{ private String ...

  6. 数据结构之单链表(基于Java实现)

    链表:在计算机中用一组任意的存储单元存储线性表的数据元素称为链式存储结构,这组存储结构可以是连续的,也可以是不连续的,因此在存储数据元素时可以动态分配内存. 注:在java中没有指针的概念,可以理解为 ...

  7. js数据结构与算法--单链表的实现与应用思考

    链表是动态的数据结构,它的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成. 现实中,有一些链表的例子. 第一个就是寻宝的游戏.你有一条线索,这条线索是指向寻找下一条线 ...

  8. PHP数据结构之实现单链表

    学习PHP中,学习完语法,开始尝试实现数据结构,今天实现单链表 <?php class node //节点的数据结构 { public $id; public $name; public $ne ...

  9. 基于python实现单链表代码

    1 """ 2 linklist.py 3 单链表的构建与功能操作 4 重点代码 5 """ 6 7 class Node: 8 " ...

  10. 数据结构-多级指针单链表(C语言)

    偶尔看到大一时候写了一个多级链表,听起来好有趣,稍微整理一下. 稍微注意一下两点: 1.指针是一个地址,他自己也是有一个地址.一级指针(带一个*号)表示一级地址,他自身地址为二级地址.二级指针(带两个 ...

随机推荐

  1. 五分钟k8s入门到实战-应用配置

    背景 在前面三节中已经讲到如何将我们的应用部署到 k8s 集群并提供对外访问的能力,x现在可以满足基本的应用开发需求了. 现在我们需要更进一步,使用 k8s 提供的一些其他对象来标准化我的应用开发. ...

  2. oracle-组合索引字段位置与查询效率之间的关系

    Oracle索引组合字段的位置不同,当查询条件不能覆盖索引时,影响查询效率.查询条件是不是索引字段的第一列影响执行计划,实验验证 实验1:查询条件为组合索引的第一列--创建测试表 create tab ...

  3. oracle RAC redhat

    RAC比较严格,如果操作系统不纯净,容易失败: 装备第一台VM:chkconfig sendmail offchkconfig iptables offchkconfig ip6talbes offs ...

  4. 17.2 实现无管道正向CMD

    WSASocket 无管道正向CMD,使用WSASocket函数创建一个TCP套接字,并绑定到一个本地地址和端口上.然后使用CreateProcess函数创建一个新的CMD进程,并将标准输入.输出和错 ...

  5. 鸿蒙极速入门(四)-通过登录Demo了解ArkTS

    ArkTS是HarmonyOS优选的主力应用开发语言.ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集. ArkTS在TS的基础上主 ...

  6. 20.3 OpenSSL 对称AES加解密算法

    AES算法是一种对称加密算法,全称为高级加密标准(Advanced Encryption Standard).它是一种分组密码,以128比特为一个分组进行加密,其密钥长度可以是128比特.192比特或 ...

  7. 鸿蒙开发学习(一)之ArkTS

    目录 TypeScript语法 基础 module ArkTS 基本UI描述 基本概念 状态管理 页面级变量的状态管理 @State @Prop @Link 应用级变量的状态管理 开发入门 应用模型 ...

  8. WPF --- TextBox的输入校验

    引言 在WPF应用程序开发中,数据校验是确保用户输入数据的正确性和完整性的重要一环. 之前在做一些参数配置功能时,最是头疼各种参数校验,查阅一些资料后,我总结了数据校验方式有两种: Validatio ...

  9. iptables中limit 和 limit-burst 说明

    Limit match    这个匹配操作必须由-m limit明确指定才能使用.有了他的帮助,就能对指定的规则的日志数量加以限制,以免你被信息的洪流淹没哦.比如,你能事先设定一个限定值,当符合条件的 ...

  10. 大白话说Python+Flask入门(三)

    写在前面 今天状态很不好,我发现学这部分知识的时候,会出现溜号或者注意力无法集中的情况. 我能想到的是,大概率是这部分知识,应该是超出了我现在的水平了,也就是说我存在知识断层了,整体感觉真的是一知半解 ...