一.单链表

1.单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。

3.存储

A.基本数据类型

首先得有一个类表示链表,只有一个属性记录节点的头地址。

  1. //链表类
  2. class MyList{
  3. Node head;
  4. }

接下来是节点类,属性是data,和next

  1. class Node{
  2. int data;//存储数据
  3. Node next;//存储下一个几点对象的地址
  4. }

其次是处理逻辑类:

  1. public class LinkUtil {
  2.     
  3.     
  4.     //只负责存储第一个
  5.     MyList list = new MyList();
  6.     //初始化链表对象,将其head存储第一个对象的地址
  7.     void intiList(){
  8.         list.head = null;
  9.     }
  10.     
  11.     
  12.     
  13.     void add(int date){
  14.         //创建一个节点
  15.         Node node= new Node();
  16.         //给节点两个属性赋值
  17.         node.data = date;
  18.         node.next = list.head;
  19.         //将第一父个节点 对象地址赋值给链表对象的head
  20.         list.head = node;
  21.         
  22.         
  23.     }
  24.     void delete(int data){
  25.         //删除第一个节点对象
  26.         if(list.head.data==data){
  27.             list.head=list.head.next;
  28.             return;
  29.         }
  30.         //第二种
  31.         Node p=list.head;
  32.         Node ppre = null;//ppre指向p的前一个节点
  33.         while(p!=null){
  34.             ppre = p;
  35.             p=p.next;
  36.             if(p.data==data){
  37.                 ppre.next=p.next;
  38.                 break;
  39.             }
  40.             
  41.         }
  42.         
  43.         
  44.         
  45.     }
  46.     //展示数据
  47.     void showAllNode(){
  48.         //p指向第一个节点对象
  49.         Node p = list.head;
  50.         while(p!=null) {
  51.             System.out.println(p.data);
  52.             p = p.next;
  53.         }
  54.         
  55.     }
  56.     //修改数据
  57.     void exchange(int data,int newData){
  58.         Node p = list.head;
  59.         while(p!=null){
  60.             if(p.data==data){
  61.                 p.data = newData;
  62.                 break;
  63.             }
  64.             p = p.next;
  65.         }
  66.         /*if(p==null){
  67.             System.out.println("修改的值不存在!");
  68.         }*/
  69.     }
  70. }
  71. 测试界面:
  72. package com.se.link;
  73. public class MyListTest {
  74.     public static void main(String[] args) {
  75.         LinkUtil l = new LinkUtil();
  76.         l.intiList();
  77.         l.add(3);
  78.         l.add(4);
  79.         l.add(5);
  80.         l.add(31);
  81.         l.add(41);
  82.         l.add(51);
  83.         //l.exchange(12, 331);
  84.         //l.delete(3);
  85.         l.showAllNode();
  86.         
  87.     }
  88. }

B.存储自定义对象

原理类似,在节点数据域存放的现在是对象的地址,拿到数据域有必要去转型。

  1. package com.se.link;
  2. public class ListStudent {
  3. //只负责存储第一个
  4. MyList1 list = new MyList1();
  5. //初始化链表对象,将其head存储第一个对象的地址
  6. void intiList(){
  7. list.head = null;
  8. }
  9. void add(Student stu){
  10. //创建一个节点
  11. Node1 node= new Node1();
  12. //给节点两个属性赋值
  13. node.msg = stu;
  14. node.next = list.head;
  15. //将第一父个节点 对象地址赋值给链表对象的head
  16. list.head = node;
  17. }
  18. //按姓名删除
  19. void delete(String name){
  20. Node1 p=list.head;
  21. //删除第一个节点对象
  22. Student stu = p.msg;
  23. if(name.equals(stu.getName())){
  24. list.head=list.head.next;
  25. return;
  26. }
  27. //第二种删除非第一个节点
  28. Node1 ppre = null;//ppre指向p的前一个节点
  29. while(p!=null){
  30. ppre = p;
  31. p=p.next;
  32. Student stu1 =p.msg;
  33. if(name.equals(stu1.getName())){
  34. ppre.next=p.next;
  35. break;
  36. }
  37. }
  38. }
  39. //展示数据
  40. void showAllNode(){
  41. //p指向第一个节点对象
  42. Node1 p = list.head;
  43. while(p!=null) {
  44. Student stu =p.msg;
  45. System.out.println(stu.getName()+":"+stu.getAge());
  46. p = p.next;
  47. }
  48. }
  49. // 修改姓名修改数据
  50. void exchange(String name,String newName){
  51. Node1 p = list.head;
  52. while(p!=null){
  53. Student stu =p.msg;
  54. if(name.equals(stu.getName())){
  55. stu.setName(newName);
  56. break;
  57. }
  58. p = p.next;
  59. }
  60. if(p==null){
  61. System.out.println("修改的名字不存在!");
  62. }
  63. }
  64. }
  65. //节点类
  66. class Node1{
  67. Student msg;//存储数据
  68. Node1 next;//存储下一个几点对象的地址
  69. }
  70. //链表类
  71. class MyList1{
  72. Node1 head;
  73. }
  74. class Student{
  75. String name;
  76. int age;
  77. public Student(){}
  78. public Student(String name,int age){
  79. this.name = name;
  80. this.age = age;
  81. }
  82. public String getName() {
  83. return name;
  84. }
  85. public void setName(String name) {
  86. this.name = name;
  87. }
  88. public int getAge() {
  89. return age;
  90. }
  91. public void setAge(int age) {
  92. this.age = age;
  93. }
  94. }
  95. 测试界面:
  96. package com.se.link;
  97. public class ListStudentTest {
  98.     public static void main(String[] args) {
  99.         
  100.         ListStudent stu = new ListStudent();
  101.         stu.add(new Student("小明",18));
  102.         stu.add(new Student("小刚",22));
  103.         stu.add(new Student("小强",34));
  104.         stu.add(new Student("老王",54));
  105.         stu.exchange("小明", "李白");
  106.         stu.delete("小刚");
  107.         stu.showAllNode();
  108.         
  109.     }
  110. }
  111. 注意,增加节点主要是运用链表的头插法。

java基础之自定义单链表练习的更多相关文章

  1. java基础学习之单例设计模式学习

    最近狂补java基础的我重新学习了下单例,下面直接贴出代码,以作备忘 package com.darling.single; /** * 单例模式 * 单例即在内存中只存在该类的一个实例,要想实现这个 ...

  2. 用java简单的实现单链表的基本操作

    package com.tyxh.link; //节点类 public class Node { protected Node next; //指针域 protected int data;//数据域 ...

  3. java基础(7):自定义类、ArrayList集合

    1. 引用数据类型(类) 1.1 引用数据类型分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类.Random类. 我们可以把类的类型为两种: 第一种,Java为我们提供好 ...

  4. JAVA基础_自定义泛型

    泛型的来源 在Java中,泛型借鉴了C++的模版函数,从而引入了泛型. C++泛型 int add(int x,int y){ return x + y; } float add(float x.fl ...

  5. 荐书在精不在多,推荐一份夯实Java基础的必备书单!

    文/黄小斜 转载请注明出处 head first Java 推荐指数:⭐️⭐️⭐️⭐️⭐️ 推荐理由: 说实话,这本书和其他的我Java类型书籍真的大不相同,它不会一本正经地去说技术概念和原理,而是通 ...

  6. java基础讲解01-----简单了解一下java

    2017-4-12(晚)  闲来无事,静静把自己了解的java,好好回忆一次.如果能帮助别人也好.会不断补充 java有关的书籍真的很多,我也不过多的介绍了. 1.什么是java 2.java的语言特 ...

  7. java基础复习-自定义注解4(结合JDBC技术,打造类表映射微框架)

    写在前面: 1.该框架为自己所写的第一个框架类产品,可能有着许多不足的地方,读者可以到评论区指出.同时,该微框架的源码也会开源至博客中,够后来的学习者借鉴.由于该框架逻辑结构稍些复杂,不可能花大量篇幅 ...

  8. java单链表常用操作

    总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K ...

  9. Java数据结构--单链表

    #java学习经验总结------单链表的建立与结点的增删 在该链表结点有data数据,并且还有cpu,分给cpu随机的时间片,根据时间片大小进行结点data的排序 链表结点的建立 class Lin ...

随机推荐

  1. SPSS Modeler数据挖掘:回归分析

    SPSS Modeler数据挖掘:回归分析 1 模型定义 回归分析法是最基本的数据分析方法,回归预测就是利用回归分析方法,根据一个或一组自变量的变动情况预测与其相关的某随机变量的未来值. 回归分析是研 ...

  2. day 50 MySQL数据备份与还原(mysqldump)

      MySQL数据备份与还原(mysqldump)   一 mysqldump指令实现数据备份.mysql指令实现数据还原 经常有朋友问我,DBA到底是做什么的,百科上说:数据库管理员(Databas ...

  3. ie9table排列不对.td错行,多了一列

    发现问题是ie9,本地用google/ie11都是好的. 有合并行的问题,本来就5列,偏偏莫名其妙多了一列,某一行上就有一个单元格空着,往后推了一列,刷新无数次都是同一行错位. 略微改动一下jsp(删 ...

  4. 金融IT的算法要求

    岗位职责 1.负责宏观经济预测的算法研究 2.负责债券.股票.基金等品种的模型研究 3.负责持仓收益分析,及绩效归因等模型研究 任职要求 1.一般数学: 线性代数与矩阵运算 随机过程 微积分 概率论 ...

  5. wdatapicker 时间选择器——例

    效果: html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  6. 分布式日志收集之Logstash 笔记(一)

    (一)logstash是什么? logstash是一种分布式日志收集框架,开发语言是JRuby,当然是为了与Java平台对接,不过与Ruby语法兼容良好,非常简洁强大,经常与ElasticSearch ...

  7. UBOOT的的 C 语言代码部分

    调用一系列的初始化函数 1. 指定初始函数表: init_fnc_t *init_sequence[] = { cpu_init,           /* cpu 的基本设置         */ ...

  8. layui+croppers完成图片剪切上传

    不多说直接上代码: 前台代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" / ...

  9. python requests 高级用法 -- 包括SSL 证书错误的解决方案

    Session Objects会话对象 Session对象在请求时允许你坚持一定的参数.此外,还坚持由Session实例的所有请求的cookie. 让我们坚持在请求时使用 s = requests.S ...

  10. springMVC项目创建及导入包项

    springMVC项目创建及导入包项 - zhangzhetaojj的博客 - CSDN博客https://blog.csdn.net/zhangzhetaojj/article/details/50 ...