19、数据结构之链表

链表(Linked List)一种常见的数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每个节点里存到是下一个节点的指针(Pointer)。

上面就是一个链表,这是一个只有一个链表的链表,左边大的区域储存链表里面的信息,右边小区域是指针,有null和指向下一个链表的指针。像下面这样:

我们再说一下这个链表:

按照百家姓前八个来说链表,我们知道,前八个是赵钱孙李,周吴郑王,我们从上面的图可以看到,它们的储存地址是不一样的,每一个数据与都不同,这就是链表,链表与数组不一样的地方就是数组是连续的一片区域,链表不需要。我们设定,头指针为61,可以看到,61的数据域就是赵,他的指针域是13,再看13,他的数据域是钱,指针域是25,接着看25,数据域是孙,指针域是1。最后排下来就是赵钱孙李周吴郑王了。

大家可以先看看给链表添加、显示全部的代码:

public class Demo1
{public static void main(String[] args){NodeManager nm = new NodeManager();nm.add(5);nm.add(4);nm.add(3);nm.add(2);nm.add(1);nm.print();}
}class NodeManager//这里创建一个链表
{private Node root;//这个是根节点,就是一开始的节点,就是图一,第一个点,并且是再链表内使用的要私有化,下面也是一样//下面就是内部类Node里面的方法了public void add(int data){if(root == null)//添加的时候,如果刚开始的根节点为空{root = new Node(data);}else//如果不为空,就用内部类来传,因为root类型是Node,Node是有next指针的{root.addNode(data);//调用完这个方法,就进入了Node的addNode方法}}public void del(int data){}public void print(){if(root != null)//说明根节点有东西{System.out.print(root.getData() + "->");root.printNode();//内部类调用System.out.println();}}public boolean find(int data){return false;}public void update(int oldData, int newData){}public void insertNode(int index, int data){}private class Node//内部类,理解成根节点后面的节点吧{private int data;//这里建立的对象可以是int,也可以是其他对象private Node next;//这个就是这个Node的下一个链表,next指的就是下一个,把当前类型作为属性。/*好,表示我们已经知道怎么该表示了,但是我们该怎么操作这个链表呢?比如增删改查和插入等。那么这些方法应该是谁的呢?应该是这个内部类的,提一个原则:谁拥有数据,谁提供方法。这样,Node里面有数据(data),如果Node不提供方法,外部是不能访问的,就像是你要在家里关着门,别人是进不到家里面来的。*///下面是构造方法和get set方法public Node(int data){this.data = data;}public void setData(int data){this.data = data;}public int getData(){return data;}//下面是增、删、输出、查询、修改、插入方法。这些方法只能是NodeManager来用,主函数不知道这些,这时候,就在NodeManager里也加上这些方法public void addNode(int data){//第一步,传进来参数时,首先要看一看this.next是不是等于空(这个this指的是root传进来的this)if(this.next == null){this.next = new Node(data);//后继有人}else//此时已经后继有人了{this.next.addNode(data);//这时候,说明后面还有对象,这样就用了一个递归,进入下一个addNode方法,进入下一个这个方法里面}}public void delNode(int data){}public void printNode(){if(this.next != null)//下一个节点不等于空{System.out.print(this.next.data + "->");this.next.printNode();}}public boolean findNode(int data){return false;}public void updateNode(int oldData, int newData){}public void insertNode(int index, int data)//index:要插入数据的位置{}}
}
/*
结果:
5->4->3->2->1->
*/

千峰Java教程:071. 数据结构之链表①相关推荐

  1. 数据结构之链表及其Java实现_数据结构之链表及其Java实现

    数据的存储一般分线性存储结构和链式存储结构两种.前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据,即逻辑上相连的物理位置相邻,比较常见的就是数组:后者是一种链式存储方式,不保证顺序性,逻 ...

  2. 字节跳动面试官:千峰java培训多少钱

    并发编程三大特性 原子性 一个操作或者多次操作,要么所有的操作全部都得到执行并且不会受到任何因素的干扰而中断,要么所有的操作都执行,要么都不执行. 对于基本数据类型的访问,读写都是原子性的[long和 ...

  3. 千峰java 笔记整理_千锋--多线程笔记

    进程:正在运行的程序 多线程处于宏观上的并行/微观上的串行状态 第一种实现多线程的方法: 新增类继承Thread 重写run方法 在测试类中创建子对象调用start()方法启动该子线程 第二种实现多线 ...

  4. 千峰JAVA逆战班Day49

    Day49 *下载文件案例:就是使用IO传输数据 private String resourceLocation = "D:\\Users\\t\\nginx-1.17.2\\html\\a ...

  5. 千峰JAVA逆战班Day35

    Day35 *注解:就是给代码中的方法,属性,参数等贴上了一个标签 注解的定义:@interface 注解名字 public @interface MyAnno{} 用法:在你想要贴上注解的地方的前面 ...

  6. 千峰JAVA逆战班Day38

    Day38 *连接查询:必须是两个或以上表之间且一定有主外键关系,才能进行连接查询 ​ I. 内连接:inner join on SELECT bid,bname,bprice,book.`tid`, ...

  7. 千峰JAVA逆战班Day40

    Day40 *对执行DQL的方法进行封装 ​ I. 连接,设置参数等方式跟封装DML是一样的,但是DQL返回的是一个结果集,所以需要对这个结果集进行处理.那么怎么处理呢?自然是封装到一个集合当中进行返 ...

  8. 千峰java 笔记整理_JAVA学习笔记系列:菜鸟Vue学习笔记(四)

    菜鸟Vue学习笔记(四) 上周学习了使用Vue来操作表单元素进行数据双向绑定,今天我们来学习下Vue中的组件,Vue中的组件作用就是去封装一些常用的页面标签,将其当做一个整体,以便在其他位置直接使用一 ...

  9. 2018千峰PHP教程完整版

    百度网盘下载 ==========课程目录=========== 14__RESTful API与服务器环境 13__千万级秒杀项目 12__Swoole课程 11__Laravel框架 10__微博 ...

  10. 千峰JAVA逆战班Day47

    Day47 *服务器的请求流程: *请求的方式:get 和 post,请求分为请求头和请求体 ​ I. get 请求的信息会直接显示在网页的地址栏. ​ II. post 请求的信息不会直接显示在网页 ...

最新文章

  1. 怎样操作vue.js使用3DES加密
  2. 2021春季学期-创新设计与实践-Lesson4
  3. 机器学习一 -- 什么是监督学习和无监督学习?
  4. 5G NR RLC:PDU Parameters
  5. C#.Net工作笔记011---c# visual studio中的assembly理解
  6. TS各个表 与 SECTION 的解析 CAS原理
  7. Farthest sampling on 3d mesh with mesh kept
  8. USB Storage启动EBox4300
  9. 如何去掉腾讯网址安全中心提醒
  10. 物联网之感知-分布式光纤传感-应用前景分析
  11. 计算磁偏角 php,如何计算地磁偏角?
  12. 解决全网 99的视频下载问题
  13. 帆软报表扩展列计算同比环比
  14. 计算机硬件系统(一)—计算机硬件系统的组成
  15. 图片提取文字很神奇?试试三步实现OCR!
  16. mysql数据库设计与应用答案智慧树_知到智慧树MySQL数据库设计与应用完整免费答案...
  17. Web设计中最常用的10种色调以及示例演示
  18. 前端图片上传并且裁切
  19. vs2015安装使用体验
  20. 【Java】图片 base64

热门文章

  1. 关于下载文件以及在swagger-ui中遇到的坑
  2. proxy代理配置及解析
  3. linux安装zend,linux安装配置Zend Optimizer详解
  4. vtk读取CT序列mip投影
  5. Android 2020年最新保活方案 保活90% 已适配8.0 ,9.0, 10.0(酷狗音乐)
  6. 扫二维码登陆微信 统计微信男女比例并绘图
  7. oracle hot patch david,Hot Patch工具Rollout
  8. 上课作业(5)——#576. 饥饿的牛(hunger)
  9. android 耳机数据传输,智能手机耳机电路工作原理
  10. 红蜻蜓抓图软件测试简历,红蜻蜓抓图精灵