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

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. 使用java的MultipartFile实现layui官网文件上传实现全部示例,java文件上传

    layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用. layui文件上传示例地址:https://www. ...

  2. 微信小程序 setData 数组 渲染问题 删除之后的数组渲染不正确

    list: [ { id: , mode: , src: ' }, { id: , mode: , src: ' }, { id: , mode: , src: ' } ], onDelete(e) ...

  3. html css 布局小细节

    学了两个月的html和css每天都重复一样的生活,敲着大同小异的代码,这样的生活枯燥无味.我腻了,我也累了!小米首页算是我写的第三个静态页面,写了好久,很多细节都把握不好,下面的这个简单的布局细节是我 ...

  4. getlasterror() 输出错误信息,

    得自http://bbs.csdn.net/topics/390416234 LPVOID lpMsgBuf;  FormatMessage(      FORMAT_MESSAGE_ALLOCATE ...

  5. HashSet源码分析:JDK源码系列

    1.简介 继续分析源码,上一篇文章把HashMap的分析完毕.本文开始分析HashSet简单的介绍一下. HashSet是一个无重复元素集合,内部使用HashMap实现,所以HashMap的特征耶继承 ...

  6. nginx(一)

    localtion的语法 已=开头表示精确匹配 如 A 中只匹配根目录结尾的请求,后面不能带任何字符串. ^~ 开头表示uri以某个常规字符串开头,不是正则匹配 ~ 开头表示区分大小写的正则匹配; ~ ...

  7. 端口,OSI7层模型,TCP的三次握手和四次挥手,进度条

    1.端口: 端口是为了将同一个电脑上的不同程序进行隔离 IP是找电脑,端口是找电脑上的程序 MySQL是一个软件,帮助我们在硬盘上进行文件操作,默认端口是3306 Redis是一个软件,帮助我们在内存 ...

  8. C语言中的“>>”和“

    先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如: int i = 1; i = i << 2; //把i里的值左移2位 也就是说,1的2进制是00 ...

  9. 开源分布式事务中间件Seata使用指南

    介绍 Seata 是阿里巴巴开源的分布式事务中间件,一种分布式事务解决方案,具有高性能和易于使用的微服务架构. 初衷 对业务无侵入:即减少技术架构上的微服务化所带来的分布式事务问题对业务的侵入 高性能 ...

  10. python元类深入理解

    1.python 中的类 在python中,类也是一个对象,只不过这个对象拥有生成实例的能力,我们一般使用class XXX来定义一个类,在python解释器执行到这个地方的时候会自动创建出这个对象, ...