package com.cn.hbut.domain;

//节点设置
public class Node {
Object data;
Node next;
//初始化一个数据域以及next域均为null的节点
public Node() {
this.data=null;
this.next=null;
}
//生成元素为obj,引用值为n的新节点
public Node(Object obj,Node n){
data=obj;
next=n;

}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
@Override
public String toString() {
return "Node [data=" + data + ", next=" + next + "]";
}

}

----------------------------------------------------------------------------------

具体的实现

package com.cn.hbut.daoImpl;

import java.util.LinkedList;

import com.cn.hbut.dao.DefineList;
import com.cn.hbut.domain.Node;

/**
 * @author Administrator
 * description:
 * 单链表的具体实现
 */
public class SLinkList implements DefineList{
Node head;
int size;
//创建一个单链表,头结点的数据域以及指针域均为null
public SLinkList() {
head= new Node();
size=0;
}
//创建一个单链表,其长度为该数组的长度,节点的值为该数组的值
public SLinkList(Object []a){
//一个单节点
Node p;
int i,n=a.length;
//创建空的头结点
head =  new Node();
for(i=n-1;i>=0;i--){
p= new Node(a[i],head.getNext());
head.setNext(p);
}
size=n;
}
//取第i个节点
public Node index(int i){
Node p;
int j;
//索引的节点范围不合法,返回null
if(i<0||i>size)
p=null;
//第一个节点,为头结点
else if(i==0){
p=head;
}
//在范围内的索引
else{
p=head.getNext();
j=1;
while(p!=null&&j<i){
p=p.getNext();
j++;
}

}
return p;
}
@Override
public void clear() {
head=new Node();
size=0;
}
//获取第i个节点存的数据
@Override
public Object gete(int i) {
if(i<0||i>size){
return null;
}
return index(i).getData();
}

@Override
public int length() {
return size;
}

//根据元素,定位该元素在链表中的位置
@Override
public int loc(Object e) {
int j=1;
Node p= head.getNext();
//p的节点的值不为e,并且p的next不为null
while((!p.getData().equals(e))&&(p.getNext()!=null)){
j++;
p=p.getNext();
}
//索引到最后一个节点,若该节点的值还不是e,则该链表中不存在该e
if((p.getNext())==null&&(!p.getData().equals(e))){
return -1;
}
return j;
}
//在某个元素位置后面插入一个节点
@Override
public boolean inset(int loc, Object e) {
Node index=index(loc);
if(index==null)
return false;
Node now =new Node(e,index.getNext());
index.setNext(now);
size++;
return true;
}
//删除某个位置的节点
@Override
public Object dele(int loc) {
//位置不合法,返回null
if(loc<0||loc>size)
return null;
//待删除的节点
Node q = index(loc);
//待删除的前一个节点
Node p = index(loc-1);
p.setNext(q.getNext());
size--;
return q;
}

@Override
public boolean full() {
return false;
}

@Override
public boolean empty() {
return head.getNext()==null;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}

}

------------------------------------------------------------------------------

//测试单链表
}
@Test
public void testSlinkList(){
Integer [] a= {1,5,3,4};
//创建单链表
SLinkList  list = new SLinkList(a);
System.out.println(list.loc(3));
list.inset(2, 8);
//1 5 8 3 4
System.out.println("您删除的元素是:"+((Node)list.dele(2)).getData());
Object obj=list.gete(2);
System.out.println(obj);
System.out.println(((SLinkList) list).getSize());

}

数据结构(二)---单链表的实现---java版相关推荐

  1. [Java数据结构][3]单链表以及双向链表Java代码实现

    单链表Java代码实现,以水浒英雄链表为例 文章目录 单链表Java代码实现,以水浒英雄链表为例 定义一个英雄链表 定义一个SingleLinkedList 用于管理结点 初始化头结点以及添加结点到单 ...

  2. Java数据结构——用单链表编写一个简易通讯录

    Java数据结构--用单链表编写一个简易通讯录 1.定义线性表的抽象数据类型(接口) 2.定义单链表的结点Node类 3.定义数据域中的联系人Person类 4.编写顺序表(类) 5.编写测试程序(m ...

  3. 数据结构 (二) ----- 单向链表双向链表

    相关文章: <数据结构 (一) ----- 数据结构基本概念&基于数组实现线性表> <数据结构 (二) ----- 单向链表&双向链表> 文章目录 单链表 一. ...

  4. 基本的数据结构:单链表(Singly Linked List)

    一.基本的数据结构:单链表(Singly Linked List) 什么是单链表? 下面是百度百科给出的官方解释: 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表 ...

  5. 数据结构-二叉链表存储的二叉树(利用先序遍历)

    树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用.对于每一个结点至多只有两课子树的一类树,称其为二叉树.二叉树的链式存储结构是一类重要的数据结构,其形式定义如下: 而二叉树的前序.中序遍历 ...

  6. 数据结构:单链表中在P结点前插入S结点

    标题:数据结构:单链表中在P结点前插入S结点 在数据结构的习题中偶然看到了一个题目 已知在单链表中P不是首元结点也不是尾元结点,在P结点前插入S结点 #include<stdio.h> # ...

  7. 浅谈:数据结构之单链表,java代码演示单链表

    单链表 本文是观看尚硅谷韩老师视频学习总结,部分来源网络. 单链表介绍 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每 ...

  8. 【 数据结构 】单链表的实现 - 详解(C语言版)

    目录 前言: 顺序表的缺陷: 单链表:(Single Linked List) 概念及结构: 单链表的实现: 头文件:SList.h malloc函数: free函数: 具体函数的实现:SList.c ...

  9. 数据结构单链表SingleLinkedList,Java实现单链表增删改查

    文章目录 链表介绍 应用示例 链表介绍 链表是有序的列表,但是它在内存中是存储是不连续的,如下: 链表是以节点的方式来存储,是链式存储: ①每个节点包含data域存储数据,next域指向下一个节点 ② ...

最新文章

  1. Python pickle模块:实现Python对象的持久化存储
  2. 一段关于低价的对话(被低价困扰的安利伙伴进!)
  3. 设计模式6——创建型模式之原型模式
  4. pytorch的多分类问题
  5. ABAP数据库操作之操作语句Insert
  6. 【研发管理】聊一聊DevOps
  7. Python加密—HMACSHA1 加密
  8. 迈入JavaWeb第一步,Java网络编程基础,TCP网络编程URL网络编程等
  9. 魔兽争霸3地图(WarIII Maps):梦若流星
  10. c语言 数组循环移动,如何将一个数组的元素循环左移?
  11. 微服务开发利器:ELK进行日志采集以及统一处理
  12. thoughtworks笔试整理【转载】
  13. 认知机器人:机器人学
  14. linux离线安装pg数据库
  15. 0_freeCAD_介绍,下载,语言设置
  16. 微信小程序tap事件中target与currentTarget的区别
  17. 人类的历史就是一部创业史
  18. android5.0 root工具,ROOT大师:Android 5.0 ROOT并没那么难
  19. cisco 2960交换机密码恢复教程
  20. 南大通用GBase8s 常用SQL语句(150)

热门文章

  1. ES6函数第二篇:剩余参数与展开运算符的练习
  2. 【双100%解法】LeetCode 141 【剑指Offer 23】链表中环的入口节点
  3. 蓝桥杯 试题 基础练习 字母图形——13行代码AC
  4. 10行代码AC——7-2 说反话-加强版 (20 分)——解题报告
  5. netsh 查询mac地址_ARP(Address Resolution Protocol)地址解析协议
  6. 百度地图标点点击变色_《和平精英》版本爆料第三弹:雪地洞穴开启!组队标点功能升级~...
  7. android ui布局适配,Android适配全面总结(一)----屏幕适配
  8. JSP中动态添加 “添加附件选择框”
  9. Jfreechart显示数据点图表(线上可以显示点数据)
  10. jsonp跨域读取cookie