单链式存储线性列表

线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的

(图片来自网络,侵删)

存储单元由两部分组成,数据源和指针,数据源放数据,指针指向下个存储单元。LinkedList采用的就是链式存储线性表。

链式线性表的插入操作

链式线性表的删除操作

实现(主要实现单链表的插入、删除、获取长度功能)

public class Node {

Object data; //结点数据

Node next; //下一个结点

static Node first; //头结点

static Node last; //尾结点

//构造结点

public Node() {

super();

}

//得到头结点方法

public static Node getFirst() {

return first;

}

//修改头结点方法

public static void setFirst(Node first) {

Node.first = first;

}

//得到尾结点方法

public static Node getLast() {

return last;

}

//修改尾结点方法

public static void setLast(Node last) {

Node.last = last;

}

//插入结点操作

public static void insert(Node node, int index) {

if (index == 0) { //在头结点插入时

node.next = first;

first = node;

} else { //普通情况

int temp = 0;

for (Node n = first; n != null; n = n.next) {

temp++;

if (index == temp) {

node.next = n.next;

n.next = node;

}

}

}

}

//得到链表长度

public static int getLength() {

int len = 0;

for (Node n = first; n != null; n = n.next) {

len++;

}

return len;

}

//删除结点操作

public static Node delete(int index) {

Node node = null;

if (index == 0) { //删除头结点时

first = first.next;

} else if (index == getLength()) { //删除尾结点时

for (Node n = first; n != null; n = n.next) {

n.next = last;

}

} else if (index > getLength()) { //传进来的结点位置超过了链表长度时

System.out.println("超出链表长度");

System.exit(0);

} else { //普通情况

int temp = 0;

for (Node n = first; n != null; n = n.next) {

temp++;

if (temp == index) {

node = n.next;

n.next = n.next.next;

}

}

}

return node;

}

public static void main(String[] args) {

//创建结点对象

Node l1 = new Node();

Node l2 = new Node();

Node l3 = new Node();

Node l4 = new Node();

Node l5 = new Node();

Node l6 = new Node();

Node.setFirst(l1); //设置初始链表头结点

Node.setLast(l5); //设置初始链表尾结点

//设置结点的data

l1.data = "aaa";

l2.data = "bbb";

l3.data = "ccc";

l4.data = "ddd";

l5.data = "eee";

l6.data = "fff";

//链接结点

l1.next = l2;

l2.next = l3;

l3.next = l4;

l4.next = l5;

System.out.println("当前链表:");

for (Node i = first; i != null; i = i.next) {

System.out.print(i.data + " ");

}

System.out.println();

System.out.println("链表长度:" + getLength());

System.out.println("头结点:" + getFirst().data);

System.out.println("尾结点:" + getLast().data);

insert(l6, 0);

System.out.println("插入结点后,当前链表:");

for (Node i = first; i != null; i = i.next) {

System.out.print(i.data + " ");

}

System.out.println();

delete(5);

System.out.println("删除结点后,当前链表:");

for (Node i = first; i != null; i = i.next) {

System.out.print(i.data + " ");

}

System.out.println();

}

}

与顺序表的主要区别

链式线性表删除和插入效率高,查询效率低

顺序表查询效率高,删除和插入效率低。

java单链表存储结构_Java数据结构——单链表相关推荐

  1. 线性单链表存储结构c语言代码,单链表定义-(线性表的链表存储结构)

    线性表分为:顺序存储结构和连存储结构 顺序存储结构的优点: 1.空间利用率高,几乎不需要额外的空间开销. 2.数据的逻辑结构和物理结构完全一致. 3.结点地址计算的时间和线性表的规模大小无关. 4.可 ...

  2. 《大话数据结构》5一文学会数据结构中的静态链表存储结构(概念,实例,代码)

    静态链表 1.静态链表基本介绍 (1)静态链表:用数组来代替指针,来描述单链表.我们把用数组描述下标的链表叫做静态链表.也叫游标实现法. (2)首先让数组的元素是两个数据域组成,data 和cur.也 ...

  3. 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...

    已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...

  4. 数据结构——单链表存储结构

    单链表的链式存储结构 所谓链式存储结构,相较于顺序存储结构的顺序表,顾名思义其存储方式不再是物理地址开辟一块连续空间存储所有结点的方式,见图1,而是通过指针将结点连接起来的存储方式.因此,单链表的每一 ...

  5. 单链表存储一元多项式[IMUT 数据结构实验]

    题目 [问题描述] 利用单链表存储一元多项式. [基本要求] 实现以下基本操作: (1)从键盘输入一元多项式的信息,建立一元多项式. (2)实现两个一元多项式相加,并输出和多项式. 分析 题目说是用单 ...

  6. 线性表的单链表存储结构

    文章目录 一.什么是单链表 (一)单链表结点的数据结构 (二)非空单链表数据结构 二.单链表的各个功能实现 (一)初始化 1.算法步骤 2.算法代码 (二)查找元素 1.算法步骤 2.算法代码 (三) ...

  7. java有链表吗_Java数据结构之链表(Linked List)

    1.链表(Linked List)介绍 链表是有序的列表,但是它在内存存储结构如下: 2.特点: 链表是以节点的方式来存储,是链式存储 每个节点包含 data 域, next 域:指向下一个节点. 链 ...

  8. java vector内存结构_Java 数据结构

    Java工具包提供了强大的数据结构.在Java中的数据结构主要包括以下几种接口和类: 枚举(Enumeration) 位集合(BitSet) 向量(Vector) 栈(Stack) 字典(Dictio ...

  9. java 中都有什么结构_java中都有哪些数据结构?

    数据结构: ①数组 (Array) 在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来.这些按序排列的同类数 据元素的集合称为数组.在C语言中, 数组属于构造数据类型.一个数组 ...

最新文章

  1. WriteStrToReg() ReadStrFormReg()
  2. oracle创建一个表同已存在表结构一样
  3. php查看音频属性,PHP获取音频mp3文件时长或音频文件其它参数属性
  4. Unix系统编程():分散输入和集中输出(Scatter-Gather IO):readv和writev
  5. 罗永浩望着 7 年前的罗永浩
  6. http请求,普通的get和post方法
  7. sliverlight+WCF项目发布到IIS
  8. 个人健康管理系统1.0(微信小程序+java(ssm框架)+layui+爬虫+mysql)(新手学习之路,带源码,仅供学习)
  9. Maven下载和安装
  10. WhiteSmoke无限试用
  11. C# 中xmlreader类的实用源码演示
  12. 分类模型的评价指标--混淆矩阵,ROC,AUC,KS,Lift,Gain
  13. 英语四级口语考试计算机考吗,英语四级口试必须考吗 不考会怎样
  14. 142.CSS 海盗船加载特效
  15. centos 自动运行python脚本,centos配置 Python 定时任务
  16. Java面试宝典最新整理 下篇(持续更新中)
  17. frame 和 bounds的区别
  18. AD网表转换ALLEGO步骤详解(可私信问题解决)
  19. 百度网盘下载mysql8.0版和安装教程
  20. java编程输入学生成绩 判断最高分,java代码初学者适用,输入学生成绩,符合要求的过~~~~注意数据范围...

热门文章

  1. 打开多网页用服务器系统好吗,如何在打开多个网页后,只需在一个网页上操作,其他网页都会同步操作?...
  2. php静态类 使用场景,【php】PHP静态方法和非静态方法的使用场景
  3. python继承属性_python继承,属性查找顺序
  4. linux查看和编辑文件,查看和编辑文件(Linux的快捷键和主要命令)
  5. libsvm3.21 matlab,Matlab 2015b安装libsvm 3.21
  6. python查看函数参数快捷键_python查看函数源代码快捷键_pycharm中查看源码的快捷键...
  7. php mysql网页评论,PHP / MySQL:如何在您的网站中创建评论部分
  8. vscode插件推荐
  9. php任务奖励体系,phpwind7.5完备的积分体系
  10. 关于asp.net 中 cookies 的清空