java 单链表数据结构的示例
前言
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。单链表是数据结构中最基本的结构。
目录
一、java 实现的单链表示例
二、程序执行后的效果
1.按输入顺序输入数据入单链表
2.按编号排序输入单链表,并实现增、删、改、查
一、java 实现的单链表示例
/*** 包名:linkedlist* 文件名:SingleLinkedListDemo.java* * 功能:单链表数据结构的增删改查** 作者:冰雪青松* 邮箱:946585434@qq.com* 日期:2022.10.9***/
package linkedlist;import java.util.*;/*** 一、主类,即入口类** 说明:对单链表数据结构的操作,是次要的类***/
public class SingleLinkedListDemo {public static void main(String[] args) {SingleLinkedList singleLinkedList = new SingleLinkedList();//########## [ 对单链表的增删改查的操作 ]######################//---------------------------------------------------------------------------------------------------------------------------// 1.遍历二维数组添加数据进单链表 begin//建立数据的二维数组String[][] nameArr = {{"宋江", "卢俊义", "吴用", "林冲", "公孙胜", "关胜", "秦明", "公孙胜", "呼延灼", "花荣"}, {"及时雨", "玉麒麟", "智多星", "豹子头", "入云龙", "大刀", "霹雳火", "入云龙", "双鞭", "小李广"}};//编号,排序依据此偏号,可修改编号查看排序情况int[] noArr = {1, 9, 2, 5, 8, 10, 4, 3, 7, 6};//true 不排序;false 排序boolean tag = true;//遍历二维数组添加节点进链表if(tag){//按输入顺序进链表for(int i = 0; i < nameArr[0].length; i++){singleLinkedList.add(new HeroNode(noArr[i] , nameArr[0][i], nameArr[1][i]));}}else{//按排序进链表for(int i = 0; i < nameArr[0].length; i++){singleLinkedList.addByOrder(new HeroNode(noArr[i], nameArr[0][i], nameArr[1][i]));}}System.out.println("--------------------------------------");System.out.println("一、单链表添加数据:\n");//遍历显示singleLinkedList.list();System.out.println("--------------------------------------");// 1.遍历二维数组添加数据进单链表 end.//---------------------------------------------------------------------------------------------------------------------------// 2.修改单链表 beginint upNo1 = 2;String upName1 = "孙悟空";String upNick1 = "齐天大圣";int upNo2 = 6;String upName2 = "猪八戒";String upNick2 = "花心大萝卜";System.out.printf("\n二、准备修改的内容:\n\n编号:%d,姓名:%s,绰号:%s", upNo1, upName1, upNick1);System.out.printf("\n编号:%d,姓名:%s,绰号:%s", upNo2, upName2, upNick2);System.out.println("\n\n修改后的数据:\n");singleLinkedList.update(new HeroNode(upNo1, upName1, upNick1));singleLinkedList.update(new HeroNode(upNo2, upName2, upNick2));//遍历显示singleLinkedList.list();System.out.println("--------------------------------------");// 2.修改单链表 end.//---------------------------------------------------------------------------------------------------------------------------// 3.删除单链表的一个节点 beginint n1 = 2;int n2 = 6;System.out.printf("三、要删除的编号为:%d和%d\n\n", n1, n2);singleLinkedList.delete(2);singleLinkedList.delete(6);System.out.println("删除后的数据:\n");//遍历显示singleLinkedList.list();System.out.println("--------------------------------------");// 3.删除单链表的一个节点 end.//---------------------------------------------------------------------------------------------------------------------------// 4.添加单链表的一个节点 beginString[][] addArr = {{"吴用", "花荣"}, {"智多星", "小李广"}};System.out.printf("\n四、要添加的数据为:\n\n编号:%d ,姓名:%s,绰号:%s\n", n1, addArr[0][0], addArr[1][0]);System.out.printf("编号:%d ,姓名:%s,绰号:%s\n\n", n2, addArr[0][1], addArr[1][1]);System.out.println("添加后的数据:\n");singleLinkedList.addByOrder(new HeroNode(n1, addArr[0][0], addArr[1][0]));singleLinkedList.addByOrder(new HeroNode(n2, addArr[0][1], addArr[1][1]));//遍历显示singleLinkedList.list();System.out.println("--------------------------------------");// 4.添加单链表的一个节点 end.//---------------------------------------------------------------------------------------------------------------------------// 5.查询单链表的一个节点 beginint qn = 9;System.out.printf("五、要查询的编号为:%d\n\n", qn);String[] strArr = singleLinkedList.query(qn);if(strArr[0] == "" && strArr[1] == ""){System.out.println("error!");}else{System.out.printf("编号:%d,姓名:%s,绰号:%s\n\n", qn, strArr[0], strArr[1]);}// 5.查询单链表的一个节点 end.//---------------------------------------------------------------------------------------------------------------------------//########################################################}
}/*** 二、链表管理** 说明:对单链表数据结构的算法类,重要的操作类***/
class SingleLinkedList{//申请一个空白的头节点private HeroNode head = new HeroNode(0, "", "");/*** 功能:按输入顺序添加进链表** @param HeroNode heroNode 要添加的数据节点* @return void**/public void add(HeroNode heroNode){HeroNode temp = head;boolean flag = false;while(true){if(temp.next == null) break;if(temp.next.no == heroNode.no) flag = true;temp = temp.next;}if(flag){System.out.printf("编号为%d的数据己经存在!\n", heroNode.no);return;}else{temp.next = heroNode;}}/*** 功能:按排序顺序添加数据进链表** @param HeroNode heroNode 要添加的数据节点* @return void**/public void addByOrder(HeroNode heroNode){HeroNode temp = head;boolean flag = false;while(true){if(temp.next == null)break;else if(temp.next.no > heroNode.no)break;else if(temp.next.no == heroNode.no)flag = true;temp = temp.next;}if(flag){System.out.printf("编号为%d的数据已经存在!\n", heroNode.no);return;}else{heroNode.next = temp.next;temp.next = heroNode;}}/*** 功能:修改单链表的数据** @param HeroNode heroNode 要修改的数据节点* @return boolean 返回 true 成功或 false 失败的信息**/public boolean update(HeroNode newNode){if(head.next == null){System.out.println("单链表为空!");return false;}HeroNode temp = head.next;boolean flag = false;while(true){if(temp.next == null)break;else if(temp.no == newNode.no){flag = true;break;}temp = temp.next;}if(flag){temp.name = newNode.name;temp.nickname = newNode.nickname;}else{System.out.printf("没有找到编号为%d的数据!\n", newNode.no);}return true;}/*** 功能:删除单链表的一个节点** @param int n 要删除的数据节点位置* @return boolean 返回 true 成功或 false 失败的信息**/public boolean delete(int n){HeroNode temp = head;boolean flag = false;if(head.next == null){System.out.println("链表为空!");return false;}while(true){if(temp.next == null)break;if(temp.next.no == n){flag = true;break;}temp = temp.next;}if(flag){temp.next = temp.next.next;return true;}else{System.out.printf("编号为%d的数据不存在!", n);}return false;}/*** 功能:查询某一节点的数据** @param int n 要查询的数据节点位置* @return String[] 返回 error 空数组或有数据数组的信息**/public String[] query(int n){String[] error = {"", ""};if(head.next == null){System.out.println("链表为空!");return error;}HeroNode temp = head;boolean flag = false;while(true){if(temp.next == null) break;if(temp.next.no == n){flag = true;break;}temp = temp.next;}if(flag){String[] tmp = {temp.next.name, temp.next.nickname};return tmp;}else{System.out.printf("编号为%d的数据不存在!", n);return error;}}/*** 功能:遍历显示数据** @param none* @return void**/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;}}
}/*** 三、单链表的数据结构的节点** 说明:定义单链表数据结构的节点数据,重要的数据类***/
class HeroNode{public int no;public String name;public String nickname;public HeroNode next;public HeroNode(int no, String name, String nickname){this.no = no;this.name = name;this.nickname = nickname;}@Overridepublic String toString(){String str1 = "", str2 = "";//由于界面显示混乱,排版switch(name.length()){case 1: str1 = ",...绰号:" ;break;case 2: str1 = ",..绰号:" ;break;case 3: str1 = ",.绰号:" ;break;case 4: str1 = ",绰号:" ;break;default: str1 = ",绰号:" ;}//由于界面显示混乱,排版if(no < 10)str2 = ", 姓名:" ;else if(no >= 10 && no < 100)str2 = ",姓名:" ;else if(no >= 100)str2 = ",姓名:" ;return "编号:" + no + str2 + name + str1 + nickname;}
}
二、程序执行后的效果:
1.按输入顺序输入数据入单链表:
2.按编号排序输入单链表,并实现增、删、改、查:
java 单链表数据结构的示例相关推荐
- Java单链表反转 详细过程
Java单链表反转 Java实现单链表翻转 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51119499 (一) ...
- Java单链表、双端链表、有序链表实现
Java单链表.双端链表.有序链表实现 原创 2014年03月31日 23:45:35 标签: Java / 单链表 / 双端链表 / 有序链表 65040 单链表: insertFirst:在表头插 ...
- 使用单链表数据结构存储结构化的学生信息
使用单链表数据结构存储结构化的学生信息 一.题目描述 定义一个学生结构体,包含有:学号,姓名,成绩.输入N个学生的信息,并进行基本的链表操作.(更好的阅读体验,请在我的博客网站上阅读此文:使用单链表数 ...
- java单链表节点翻转_Java数据结构01-链表基础(讲解+代码+面试题)
文章结构 链表的概念/用处 链表的基本代码实现(韩顺平Java数据结构网课) 剑指offer上链表题目代码实现(个人手敲,更精巧的答案可以参考官网) 链表 链表包含单链表,双向链表,循环链表等等.相对 ...
- java单链表输出_数据结构基础------1.线性表之单链表的创建与输出方法(Java版)...
基础知识: 线性表(linear list),是其组成元素间具有线性关系的一种线性结构. 线性表有 ①顺序存储结构(sequential storage structure) 顺序存储结构可以简单的理 ...
- java链式结构_(Java)单链表Java语言链式结构实现(数据结构四)
1.迭代器接口实现 package com.zhaochao; public interface Iterator { boolean hasNext(); E next(); boolean del ...
- python单链表实现具体例子_Python实现数据结构线性链表(单链表)算法示例
本文实例讲述了Python实现数据结构线性链表(单链表)算法.分享给大家供大家参考,具体如下: 初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码. #!/usr/bin ...
- JAVA进阶教学之(单链表数据结构)
什么是链表: 内存地址不连续,基本单元是节点对象Node,单链表尾结点默认是null 什么是链表中的节点: 节点是单链表中的基本单元,每一个节点都有两个属性 属性一:存储的数据 属性二:下一个节点的内 ...
- java单链表存储结构_Java数据结构——单链表
单链式存储线性列表 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的 (图片来自网络,侵删) 存储单元由两部分组成,数据源和指针,数据源 ...
最新文章
- 神秘围棋AI“神之一手”:5秒一步令日本高手叹服
- 【备忘】とある画像の自动生成
- 在线安装非GPU版的tensorflow流程
- java 非递归求二叉树高度_非递归算法实现二叉树高度
- 数据库原理学习笔记(二)数据库范式
- php封装一个加密算法,PHP封装的非对称加密RSA算法示例
- 如何判断三极管好坏?
- 开源音乐播放器_如何选择开源音乐播放器
- Unitest框架的使用(四)HTMLTestRunner输出测试报告
- Lesson 4 Part 2 Softmax Regression
- xshell连接虚拟机
- 关于概要设计文档的写作
- 软件测试中的80/20原则
- 在字符串s的第n个字符后面插入字符串t
- php静态页面制作,ps制作静态的html页面
- CF1111C Creative Snap
- pytorch RuntimeError: size mismatch, m1: [64 x 784], m2: [784 x 10] at
- 如何将阿里云旧服务器上的数据转移到新服务器上
- linux基础知识总结(上)
- 软件测试 - 测试用例常见面试题
热门文章
- Spring好书分享(一)
- 家乡乐山美食网站系统(含源码+数据库)
- 自己实现一个 atoi 函数
- i710700k和r73800x哪个好-对比性能有什么区别
- ftp服务器以文件夹形式展现,打开FTP时,让文件以文件夹的形式显现
- CSDN社区运营午餐会第7期–“聊聊全国的过年风俗”
- 以太网学习之二 物理介质(10Base、100Base-T、100Base-TX等)
- 三星android测试机,三星远程真机调试介绍
- 425 failed to establish connection
- 现在入手iPhone SE合适吗