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.图形或者网状结构 接下来的 ...
随机推荐
- 基于C#的机器学习--旅行推销员问题
我们有一个必须在n个城市之间旅行的推销员.他不在乎什么顺序.他最先或最后访问的城市除外.他唯一关心的是他会去拜访每一个人,每个城市只有一次,最后一站是他得家. 每个城市都是一个节点,每个节点通过一条边 ...
- django基础知识之定义视图:
定义视图 本质就是一个函数 视图的参数 一个HttpRequest实例 通过正则表达式组获取的位置参数 通过正则表达式组获得的关键字参数 在应用目录下默认有views.py文件,一般视图都定义在这个文 ...
- UAVStack的慢SQL数据库监控功能及其实现
UAVStack是一个全维监控与应用运维平台.UAV.Monitor具备监控功能,包含基础监控.应用/服务性能监控.日志监控.业务监控等.在应用监控中,UAV可以根据应用实例画像:其中应用实例组件可以 ...
- 关于网页授权access_token和普通access_token的区别
关于网页授权access_token和普通access_token的区别 1.微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授 ...
- c++学习书籍推荐《Visual C++2008入门经典》下载
百度云及其他网盘下载地址:点我 <Visual C++2008入门经典>学习目标: 使用标准模板库(STL)来组织和操作本地C++程序中的数据 C++程序调试技术 构造Microsoft ...
- 网络下载器 迅雷大众版 v7.9.42.5050 精简绿色版
下载地址:点我 基本介绍 迅雷大众版是一款采用了先进的超线程技术基于网格原理,能够将存在于第三方服务器和计算机上的数据文件进行有效整合,通过这种先进的超线程技术,用户能够以更快的速度从这些第三方节点平 ...
- C语言指针专题——如何理解指针
本文为原创,欢迎转发! 最近在研读C primer plus 5版中文版,老外写的,还是很经典的,推荐给读者们,有需要的朋友可以在这里购买:C primer plus 5版中文版 指针,传说中是C语言 ...
- Unable to start services through AMBARI UI
ambari开启nodemanager卡住,后台日志: Mar ::, WARN [ambari-action-scheduler] ActionScheduler: - Exception rece ...
- 【题解】射击-C++
Description 不难发现,豆豆能从很多事情中去思考数学,于是豆豆父母决定让他去练习射击,这是项需要集中注意力的运动,相信 能够让豆豆暂时脱离数学.学习射击的第一天就让豆豆产生 了浓厚的兴趣,射 ...
- 庖丁解牛Linux内核分析 0x00:《庖丁解牛》
庖丁解牛 吾生也有涯,而知也无涯 .以有涯随无涯,殆已!已而为知者,殆而已矣!为善无近名,为恶无近刑.缘督以为经,可以保身,可以全生,可以养亲,可以尽年. 庖丁为文惠君解牛,手之所触,肩之所倚,足之 ...