链表,可扩展长度,泛型。

public class Link {
Node header = null; //头结点
int length;//当前链表长度 class Node {
Node next = null;
private Object data; public Node(Object data) {
this.data = data;
} public Object GetData() {
return this.data;
}
} /*
* 增加一个节点
*/
public void addNode(Object data) {
Node node = new Node(data);//使用传入的数据新建一个节点 if(this.header == null) {
this.header = node;
this.length++;
}else {
Node ex = this.header; //创建一个节点用于遍历链表
//找到最后一个节点
while(ex.next != null) {
ex = ex.next;
}
ex.next = node;//将最后一个节点指向想要增加的节点
this.length++;//增加链表长度
}
} /*
* 查询第i个节点的数据。
*/
public Object GetLink(int i) {
if(this.header == null) {
return 0;
}
if(i > this.length) {
return 0;
}
Node ex = this.header;//创建一个节点用于遍历链表
int j = 1; //找到第i个节点
while(j != i) {
ex = ex.next;
j++;
}
return ex.GetData();
}
/*
* 在第i个节点后插入数据
*/
public void LinkInsert(int i, Object data) {
Node newNode = new Node(data);
Node ex = this.header;//创建一个节点用于遍历链表
int j = 1;
while(j != i) {
ex = ex.next;
j++;
}
Node ex_next = ex.next;
ex.next = newNode;
newNode.next = ex_next;
this.length++;
} /*
* 删除第i个节点
*/
public void LinkDelete(int i) {
Node ex = this.header;
int j = 1;
//找到要删除的节点的前一个节点
while(j != i-1) {
ex = ex.next;
j++;
}
Node ex_next = ex.next;
ex.next = ex_next.next;
this.length--;
} /*
* 查找链表数据中等于data的,并返回其节点位置
*/
public Object LocateElem(Object data) {
Node ex = this.header;
for(int j = 1; j < this.length; j++) {
if(ex.GetData() == data) {
return j;
}
ex = ex.next;
}
return 0;
}
public static void main(String[] args) {
Link list = new Link();
list.addNode(1);
list.addNode(1.6);
list.addNode("字");
System.out.println("当前链表长度:" + list.length);
System.out.print("当前链表:");
for(int i = 1; i <= list.length; i++) {
System.out.print(list.GetLink(i) + ",");
}
System.out.println();
list.LinkInsert(2, "数据");
System.out.print("当前链表:");
for(int i = 1; i <= list.length; i++) {
System.out.print(list.GetLink(i) + ",");
}
System.out.println();
list.LinkDelete(2);
System.out.print("当前链表:");
for(int i = 1; i <= list.length; i++) {
System.out.print(list.GetLink(i) + ",");
}
System.out.println();
System.out.println(list.LocateElem("数据"));
} }

main方法输出:

当前链表长度:
当前链表:,1.6,字,
当前链表:,1.6,数据,字,
当前链表:,数据,字,

Java——数据结构(链表)的更多相关文章

  1. java数据结构----链表

    1.链表:链表是继数组之后第二种使用的最广泛的通用存储结构,它克服了数组的许多弊端:无序数组的查找慢问题,有序数组的插入慢问题,数组定义时的定长问题.它也可取代数组,作为其他数据结构的基础. 2.引用 ...

  2. Java数据结构——链表-单链表

    <1>链表 <2>引用和基本类型 <3>单链表 //================================================= // Fil ...

  3. java数据结构链表(纯面向对象的方式)

    //Node.java //LinkedList.java _____ //测试类 [lcy, haha]    1  lcy 删除的对象是 1[lcy, haha] lcy

  4. Java数据结构和算法(七)——链表

    前面博客我们在讲解数组中,知道数组作为数据存储结构有一定的缺陷.在无序数组中,搜索性能差,在有序数组中,插入效率又很低,而且这两种数组的删除效率都很低,并且数组在创建后,其大小是固定了,设置的过大会造 ...

  5. Java数据结构和算法 - 链表

    Q: 为什么要引入链表的概念?它是解决什么问题的? A: 数组作为数据存储结构有一定的缺陷,在无序数组中,搜索是低效的:而在有序数组中,插入效率又很低:不管在哪一个数组中删除效率都很低:况且一个数组创 ...

  6. JAVA数据结构之链表

    JAVA数据结构之链表 什么是链表呢? 链表作为最基本的数据结构之一,定义如下: 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 简单来说呢,链 ...

  7. Java数据结构和算法(一)线性结构之单链表

    Java数据结构和算法(一)线性结构之单链表 prev current next -------------- -------------- -------------- | value | next ...

  8. Java数据结构和算法(四)--链表

    日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...

  9. JAVA数据结构系列 栈

    java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...

  10. Java数据结构之树和二叉树

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

随机推荐

  1. oracle获取当天时间的最开始的时间和最结尾的时间

    ),,'yyyy-mm-dd')||' 23:59:59' from dual

  2. JsonUtil(基于Jackson的实现)

    JsonUtil(基于Jackson的实现) 前言: 其实,我一直想写一个有关Util的系列. 其中有四个原因: Util包作为项目的重要组成,是几乎每个项目不可或缺的一部分.并且Util包的Util ...

  3. ServiceFabric极简文档-5.1 编程模型选择

    项目中:actor用的服务是无状态服务:ASP.NET Core用的是无状态ASP.NET Core模板. ​

  4. Win10更新后,MySQL服务莫名消失的问题

    手欠的给Win10更新,之后就发现右下角托盘里的小海豚变成白色的了,最后确认MySQL服务丢失 解决办法1: 1.重新安装服务:mysqld --install 2.如果之前没有自定义数据保存路径(d ...

  5. uSID:SRv6新范式

    摘要:本文介绍最新的SRv6创新uSID(Micro Segment).uSID兼容既有的SRv6框架,将极大地改变SRv6的设计.实现和部署方式,成为SRv6的新范式. 一.SRv6 101 Seg ...

  6. 【题解】导游-C++

    Description 宁波市的中小学生们在镇海中学参加程序设计比赛之余,热情的主办方邀请同学们参观镇海中学内的各处景点,已 知镇海中学内共有n处景点.现在有n位该校的学生志愿承担导游和讲解任务.每个 ...

  7. Lock和synchronized比较详解(转)

    从Java5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock. 也许有朋友会问,既然都可以通过synchronized来实现同步访问了, ...

  8. 随机点名可视化界面,记录迟到人员,转exe文件

    随机点名可视化界面,记录迟到人员,转exe文件 一.介绍 对于人员采取随机点名 二.代码 import datetime import random from tkinter import * fro ...

  9. 深入理解 JavaScript 单例模式 (Singleton Pattern)

    概念 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在. 核心:确保只有一个实例,并提供全局访问. 实现思路 一个类能返回对象一个引用(永远是同 ...

  10. Android studio 混淆打包安装后报错NullPointerException int java.util.List.size()

    菜鸟的我,尝试混淆打包app...打包之前没有什么问题,混淆打包之后遇到各种问题.首先,感谢原博主的分享.解决了我的问题.谢谢. 原文地址:http://blog.csdn.net/tou_star/ ...