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

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. [常用命令]Git命令

    取得Git仓库 初始化一个版本仓库 git init Clone远程版本库 git clone https://github.com/yhj167/yhj167.github.io.git 添加远程版 ...

  2. Spring Cloud 之 Hystrix.

    一.概述  在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依 ...

  3. js 控制文本框输入要求

    把输入框中 输入的字符串含有中文逗号 改成 英文逗号 举例: <input type="text" id="keywords" style="w ...

  4. Java学习笔记之---内部类

    Java学习笔记之---内部类 (一)成员内部类 内部类在外部使用时,无法直接实例化,需要借助外部类信息才能实例化 内部类的访问修饰符可以任意,但是访问范围会受到影响 内部类可以直接访问外部类的成员, ...

  5. 手机如何进入开发者选项--以vivo为例

    发现一个新方法  打开拨号键盘        输入    *#*#7777#*#* 欧儿了

  6. ubuntu18.04安装nvidia驱动总结经验

    本人电脑是 DELL Inspiron 3670, 系统装的是ubuntu18.04, 显卡使用的是GeForce GTX 1050 Ti, 在安装nividia显卡的时候花费两天时间,感受颇深,顾总 ...

  7. CentOS下搭建Git服务器(基于SSH协议)

    1,安装Git所需依赖包      # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel      # ...

  8. Git学习(一):版本控制介绍及安装

    一.VCS(版本控制系统)的演变 1.集中式VCS的特点 1)有集中的版本管理服务器: 2)具备文件版本管理和分支管理能力: 3)集成效率较没有版本控制(如:进行文件夹标注的方式)有明显地的提高: 4 ...

  9. 浅谈CMDB

    CMDB和运维自动化 一.运维 运维,指的是对已经搭建好的网络,软件,硬件进行维护.运维领域也是细分的,有硬件运维和软件运维 硬件运维主要包括对基础设施的运维,比如机房的设备,主机的硬盘,内存这些物理 ...

  10. selenium Java中常见等待的几种形式

    前言 在自动化测试中,我们经常会碰到编写脚本过程中操作某个元素的时候, 需要等待页面加载完成后,才能对元素操作,否则会报错,提示页面元素不存在异常,我们需要等待元素加载完成后,才能继续操作,而Sele ...