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

简介: 数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺。按照链表、栈、队列、排序、数组、树这种顺序来学习数据结构这门课程把。

      数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺。按照链表、栈、队列、排序、数组、树这种顺序来学习数据结构这门课程把。

                            -WZY

一、单链表的概念

      链表是最基本的数据结构,其存储的你原理图如下图所示

          

      上面展示的是一个单链表的存储原理图,简单易懂,head为头节点,他不存放任何的数据,只是充当一个指向链表中真正存放数据的第一个节点的作用,而每个节点中都有一个next引用,指向下一个节点,就这样一节一节往下面记录,直到最后一个节点,其中的next指向null。

      链表有很多种,比如单链表,双链表等等。我们就对单链表进行学习,其他的懂了原理其实是一样的。

二、用java实现单链表

      语言只是一种工具,数据结构真正体会的是那种思想,这句话确实是这样,不管用什么写,其思想是不改变的。以前使用的是C++,现在用的是java,一步步来实现。

      2.1、编写一个Node类来充当结点的模型。我们知道,其中有两个属性,1存放数据的data,2存放下一结点的引用,

          

View Code

      2.2、单链表的简单操作(增加,删除,获取总长度,链表元素排序,链表遍历)  

            

         2.2.1、增加结点操作,addNode(Node)

             

           想法: 一开始也会想如果什么结点也没有。是不是需要判断插入的是第一个结点的问题,但写完后发现没有必要,是不是第一个结点操作都是一样的,所以通过移动的指针遍历整个链表,找到最后一个结点,往后添加即可。没难度。      

View Code
         2.2.2、插入结点到链表的指定位置。 insertNodeByIndex(int index,Node node)

              

            注意:要知道插入操作需要的前提是什么,你才好写代码,写完之后,考虑如果在特殊位置上插入,是否也一样。还有需要进行插入位置是否可行的判断。

View Code

         2.2.3、删除指定位置上的结点  delNodeByIndex(int index)

              

View Code

          2.2.4、单链表进行选择排序  selectSortNode()  

                前提要知道什么是选择排序,如果不会,请查看我讲解排序的文章

              

              分析

              

View Code

          2.2.5、单链表进行插入排序  insertSortNode()

              前提:要知道什么是插入排序。这个使用插入排序写了我好久,懵逼一样的状态,并且我认为我自己写效率不是很高。不管怎样,是骡子是马拿出来溜溜

              

              

View Code
    

          2.2.6、当然还可以使用冒泡排序、归并排序,等等等,都可以自己去尝试,我就不写了。如果不懂这些排序,那么就看我写排序的文章把。

          2.2.7、计算单链表的长度

              

View Code

          2.2.8、遍历单链表,打印data

                

 

View Code
  

三、总结

    基本的单链表操作就是上面这些了,自己完全手动写一写,会对单链表这种数据结构的理解有很大的帮助。当然其中比较难的是在于对链表的排序上,说难也不难,只要懂的几种排序的原理,就跟写伪代码一样,去实现即可。这里还有一些操作,大家可以动手做一做,我会在下一篇文章中讲解这些答案。

    3.1、如何从链表中删除重复数据

    3.2、如何找出单链表中的倒数第k个元素

    3.3、如何实现链表的反转

    3.4、如何从尾到头输出单链表

    3.5、如何寻找单链表的中间结点

    3.6、如何检测一个链表是否有环

    3.7、如何在不知道头结点的情况下删除指定结点

    3.8、如何判断两个链表是否相交

  

             

相关文章
|
7月前
|
存储 安全 Java
Java 集合面试题从数据结构到 HashMap 源码剖析详解及长尾考点梳理
本文深入解析Java集合框架,涵盖基础概念、常见集合类型及HashMap的底层数据结构与源码实现。从Collection、Map到Iterator接口,逐一剖析其特性与应用场景。重点解读HashMap在JDK1.7与1.8中的数据结构演变,包括数组+链表+红黑树优化,以及put方法和扩容机制的实现细节。结合订单管理与用户权限管理等实际案例,展示集合框架的应用价值,助你全面掌握相关知识,轻松应对面试与开发需求。
369 3
|
9月前
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
297 1
|
9月前
|
存储 Java 编译器
Java 中 .length 的使用方法:深入理解 Java 数据结构中的长度获取机制
本文深入解析了 Java 中 `.length` 的使用方法及其在不同数据结构中的应用。对于数组,通过 `.length` 属性获取元素数量;字符串则使用 `.length()` 方法计算字符数;集合类如 `ArrayList` 采用 `.size()` 方法统计元素个数。此外,基本数据类型和包装类不支持长度属性。掌握这些区别,有助于开发者避免常见错误,提升代码质量。
902 1
|
11月前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
414 30
|
11月前
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
550 25
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
576 5
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
224 5
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
410 5
|
存储 算法 Perl
数据结构实验之链表
本实验旨在掌握线性表中元素的前驱、后续概念及链表的建立、插入、删除等算法,并分析时间复杂度,理解链表特点。实验内容包括循环链表应用(约瑟夫回环问题)、删除单链表中重复节点及双向循环链表的设计与实现。通过编程实践,加深对链表数据结构的理解和应用能力。
246 4