Java——数据结构(链表)
链表,可扩展长度,泛型。
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——数据结构(链表)的更多相关文章
- java数据结构----链表
1.链表:链表是继数组之后第二种使用的最广泛的通用存储结构,它克服了数组的许多弊端:无序数组的查找慢问题,有序数组的插入慢问题,数组定义时的定长问题.它也可取代数组,作为其他数据结构的基础. 2.引用 ...
- Java数据结构——链表-单链表
<1>链表 <2>引用和基本类型 <3>单链表 //================================================= // Fil ...
- java数据结构链表(纯面向对象的方式)
//Node.java //LinkedList.java _____ //测试类 [lcy, haha] 1 lcy 删除的对象是 1[lcy, haha] lcy
- Java数据结构和算法(七)——链表
前面博客我们在讲解数组中,知道数组作为数据存储结构有一定的缺陷.在无序数组中,搜索性能差,在有序数组中,插入效率又很低,而且这两种数组的删除效率都很低,并且数组在创建后,其大小是固定了,设置的过大会造 ...
- Java数据结构和算法 - 链表
Q: 为什么要引入链表的概念?它是解决什么问题的? A: 数组作为数据存储结构有一定的缺陷,在无序数组中,搜索是低效的:而在有序数组中,插入效率又很低:不管在哪一个数组中删除效率都很低:况且一个数组创 ...
- JAVA数据结构之链表
JAVA数据结构之链表 什么是链表呢? 链表作为最基本的数据结构之一,定义如下: 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 简单来说呢,链 ...
- Java数据结构和算法(一)线性结构之单链表
Java数据结构和算法(一)线性结构之单链表 prev current next -------------- -------------- -------------- | value | next ...
- Java数据结构和算法(四)--链表
日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...
- JAVA数据结构系列 栈
java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...
- Java数据结构之树和二叉树
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
随机推荐
- CPU缓存和内存屏障
CPU性能优化手段 - 缓存 为了提高程序的运行性能, 现代CPU在很多方面对程序进行了优化例如: CPU高速缓存, 尽可能的避免处理器访问主内存的时间开销, 处理器大多会利用缓存以提高性能 多级缓存 ...
- django基础知识之HTML转义:
HTML转义 Django对字符串进行自动HTML转义,如在模板中输出如下值: 视图代码: def index(request): return render(request, 'temtest/in ...
- ASP.NET Core系列(一): .NET Core简介及安装开发环境
大家都知道Java是跨平台的,.NET因为不具有跨平台的特性,被越来越多的开发者诟病,之前有各种间接的跨平台的方案,比如mono.但是由于各种兼容问题,最终 .NET Core出现了,它可以让程序在W ...
- Python重试模块retrying
Python重试模块retrying 工作中经常碰到的问题就是,某个方法出现了异常,重试几次.循环重复一个方法是很常见的.比如爬虫中的获取代理,对获取失败的情况进行重试. 刚开始搜的几个博客讲的有点问 ...
- 个人永久性免费-Excel催化剂功能第17波-批量文件改名、下载、文件夹创建等
前几天某个网友向我提出催化剂的图片功能是否可以增加导出图片功能,这个功能我一直想不明白为何有必要,图片直接在电脑里设个文件夹维护着不就可以了么?何苦还要把Excel上的图片又重新导出到文件夹中?这个让 ...
- KafKa 发消息到Storm
通过kafka客户端发送数据,由KafkaSpout进行接收消息,传输到ConsumerBolt进行实时数据处理. maven依赖 <dependencies> <!-- https ...
- HDFS的HA(高可用)
HDFS的HA(高可用) 概述 (1)实现高可用最关键的策略是[消除单点故障].HA 严格来说应该分成各个组件的 HA 机制:HDFS 的 HA 和 YARN 的 HA. (2)Hadoop2.0 之 ...
- 机器学习-EM算法
最大期望算法 EM算法的正式提出来自美国数学家Arthur Dempster.Nan Laird和Donald Rubin,其在1977年发表的研究对先前出现的作为特例的EM算法进行了总结并给出了标准 ...
- Java_Map接口
Map接口 1.1 Map接口概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤立存在 ...
- Anacodna之conda的使用
yum install -y bunzip2 wget https://repo.continuum.io/archive/Anaconda2-5.0.1-Linux-x86_64.sh chmod ...