JAVA单向链表实现
JAVA单向链表实现
单向链表
链表和数组一样是一种最常用的线性数据结构,两者各有优缺点。数组我们知道是在内存上的一块连续的空间构成,所以其元素访问可以通过下标进行,随机访问速度很快,但数组也有其缺点,由于数组的内存是一次性申请的,就像基本数据类型一样,一次性申请所需的空间,在数据量变动很大的时候就容易导致预先申请的内存不够或内存浪费。在者就是在存的是有序数列时进行数据插入会比较麻烦,所以链表就是为了弥补数组的不足的一种数据结构。相反的,链表对于变动很大的数据有很大的适应性,而且其对于数据插入和删除很方便。而链表的缺点就是对于内存的浪费,链表除了存储需要的数据还要存储额外的指针。链表的节点示意图如下:
看到指针你可能会想:“我们这不是java语言吗?没有指针啊!”,没错!在我对java了解不是很深的时候我也这么想,但是我要说的是java虽然不允许程序员像c/c++那样使用指针,但java语言本身的实现还是离不开指针的(变量名其实就是指向jvm中一块内存的指针,我就不详述)。请看以下节点的代码:
//节点数据结构
private class Node{
private Object data=null;//数据域
private Node next=null;//下一个节点
private Node(Object data) {
this.data=data;
}
}
这里的节点class我是写成inner class的形式,后面有完整代码。还有一点就是这里object类型,这里也可以使用泛型
//链表数据结构
public class SingleLinkList {
int size=0;//链表长度,可有可无,有的话很容易实现很多链表的特殊操作
Node head=null;//头节点
public SingleLinkList() {
this.size=0;this.head=null;
}
}
有了这两个类,然后再来实现链表的一些基本操作:插入头节点,删除头节点,删除指定节点,查找指定节点。直接看完整源代码。
package singleLinkList;
public class SingleLinkList {
int size=0;//链表长度
Node head=null; public SingleLinkList() {
this.size=0;this.head=null;
} //节点数据结构
private class Node{
private Object data=null;//数据域
private Node next=null;//下一个节点
private Node(Object data) {
this.data=data;
}
} //表头添加元素
public Object addHead(Object data) {
Node newHead=new Node(data);
if(size==0) {
this.head=newHead;
}
else {
newHead.next=this.head;
this.head=newHead;
}
size++;
return data;
} //删除表头元素
public Object deleteHead() {
if(size>0) {
Node node=this.head;
this.head=this.head.next;
size--;
}
return null;
} //查找指定元素
public Node findData(Object data) {
if(size==0)return null;
Node cur=this.head;
while(cur!=null) {
if(cur.data.equals(data))return cur;
cur=cur.next;
}
return null;
} //删除指定元素
public boolean deleteData(Object data) {
if(size==0)return false;
Node pre=head;
Node cur=head;
while(cur!=null) {
if(cur.data.equals(data))break;
pre=cur;cur=cur.next;
}
if(cur!=null) {//找到
if(cur==head) {//找到在头节点
deleteHead();
}
else {
pre.next=cur.next;
size--;
}
return true;
} return false;
} //判断是否为空
public boolean isEmpty() {
return size==0;
} //查看链表内容
public void display() {
if(size==0) {
System.out.println("[]");
}
else {
System.out.print("[");
System.out.print(head.data);
Node cur=head;
while(cur.next!=null) {
cur=cur.next;
System.out.print("->");
System.out.print(cur.data);
}
System.out.println("]");
}
} }
调用测试的代码就不给出,只给出一个我测试过程的截图:
JAVA单向链表实现的更多相关文章
- Java 单向链表学习
Java 单向链表学习 链表等同于动态的数组:可以不同设定固定的空间,根据需要的内容动态的改变链表的占用空间和动态的数组同一形式:链表的使用可以更加便于操作. 链表的基本结构包括:链表工具类和节点类, ...
- JAVA 单向链表
package com.session.link; /** * 单向链表 */public class LinkedList<T> { private Node head;//指向链表头节 ...
- java 单向链表实现
1 class Node{//Node类 2 private String data; 3 private Node next; 4 public Node(String data){ 5 this. ...
- JAVA单向/双向链表的实现
一.JAVA单向链表的操作(增加节点.查找节点.删除节点) class Link { // 链表类 class Node { // 保存每一个节点,此处为了方便直接定义成内部类 private Str ...
- (原创)用Java实现链表结构对象:单向无环链表
转载请注明本文出处:http://www.cnblogs.com/Starshot/p/6918569.html 链表的结构是由一个一个节点组成的,所谓链,就是每个节点的头尾连在一起.而单向链表就是: ...
- Java实现单向链表基本功能
一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单 ...
- [Java算法分析与设计]--单向链表(List)的实现和应用
单向链表与顺序表的区别在于单向链表的底层数据结构是节点块,而顺序表的底层数据结构是数组.节点块中除了保存该节点对应的数据之外,还保存这下一个节点的对象地址.这样整个结构就像一条链子,称之为" ...
- 线性表的Java实现--链式存储(单向链表)
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. 链式存储结构的线性表将采用一组任意的存储单元存放线性表中的数据元素.由于不需要按顺序存储,链表在 ...
- java对单向单向链表的操作
概述:众所周知,数据对于数据的存储时连续的,也就是说在计算机的内存中是一个整体的.连续的.不间断的ADT数据结构.伴随的问题也会随之出现,这样其实对于内存的动态分配是不灵活的.而链表具备这个优点.因此 ...
随机推荐
- js正则匹配数字字母汉字
1,匹配所有字母数字汉字:^[A-Za-z0-9\u4e00-\u9fa5]+$2,清空某项:$('#id').empty()3,某项功能关闭,不再执行:$('#id').off()4,查看数据类型: ...
- python类和对象-扩展
1.为类或对象动态创建属性或方法 2.__slots__ = ('name','age'),[实例]只能创建指定的属性属性或方法 ---新式类 3.执行父类的构造函数的不同Father.__init_ ...
- MySQL练习-主外键多表查询
练习: 1.建立表关系: 请创建如下表,并创建相关约束 USE db1; CREATE TABLE class( cid INT AUTO_INCREMENT PRIMARY KEY, caption ...
- 差分约束系统+(矩阵)思维(H - THE MATRIX PROBLEM HDU - 3666 )
题目链接:https://cn.vjudge.net/contest/276233#problem/H 题目大意:对于给定的矩阵 每一行除以ai 每一列除以bi 之后 数组的所有元素都还在那个L- ...
- 2016.6.24——vector<vector<int>>【Binary Tree Level Order Traversal】
Binary Tree Level Order Traversal 本题收获: 1.vector<vector<int>>的用法 vector<vector<int ...
- pip pytorch安装时出现的问题
pytorch 的安装命令在官网就有,这里就不说了 执行安装命令 pip3 install http://download.pytorch.org/whl/cu80/torch-0.2.0.post3 ...
- avalonJS-源码阅读(一)
写angularJS源码阅读系列的时候,写的太垃圾了.一个月后看,真心不忍直视,以后有机会的话得重写.这次写avalonJS,希望能在代码架构层面多些一点,少上源码.多写思路. avalon暴露句柄方 ...
- 【写在NOIP前】
快NOIP了,感觉自己得总结一下吧. 1.要自信啊,相信自己啊,我明明还是有些实力的是吧. 哪怕之前被教练怎么怼,自己别放弃啊 一定要注意心态吧,考试的时候怎么都不能慌,你不会的题也不会有多少人会做的 ...
- Vim 编辑文件时,突然断开链接
centos 系统 编辑文本 突然退出 ,恢复文档操作: 有道笔记链接地址
- python网络编程-多进程multiprocessing
一:mutilprocess简介 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去 ...