java实现链式线性表
package ch9;
public class LinkList <T>{
private class Node
{
//保存节点的数据
private T data;
//指向下一个节点的引用
private Node next;
public Node(T data,Node next)
{
this.data = data;
this.next = next;
}
}
//保存该链表的头节点
private Node header;
//保存该链表的尾节点
private Node tail;
//保存该链表已有的节点数
private int size;
//创建空链表
public LinkList()
{
header =null;
tail = null;
}
//以指定元素来创建链表,该链表只有一个元素
public LinkList(T element)
{
header = new Node(element, null);
tail =header;
size++;
}
//返回链表的长度
public int length()
{
return size;
}
//获取链表索引为index处的元素
public T get(int index)
{
return getNodeByIndex(index).data;
}
private Node getNodeByIndex(int index)
{
if(index<0 || index>size-1)
throw new IndexOutOfBoundsException("线性表索引越界");
Node current = header;
for(int i=0;i<size &¤t!=null;i++,current=current.next)
{
if(i==index)
return current;
}
return null;
}
// 查找执行元素的位置
public int locate(T element){
Node current = header;
for(int i=0;i<size && current!=null;i++,current=current.next)
{
if(current.data.equals(element))
return i;
}
return -1;
}
//向指定位置插入一个元素
public void insert(int index,T element)
{
if(index<0 || index>size)
throw new IndexOutOfBoundsException("索引越界");
//如果是空链表
if(header == null)
{
add(element);
}
else{
if(index ==0)
{
addAtHeader(element);
}
else{
Node prev = getNodeByIndex(index-1);
prev.next =new Node(element,prev.next);
// prev.next =prev.next.next;
//prev.next.data =element;
}
}
}
//头部插入节点
private void addAtHeader(T element) {
// TODO Auto-generated method stub
header = new Node(element,header);
if(tail ==null){
tail =header;
}
size ++;
}
//尾部插入
public void add(T element) {
// TODO Auto-generated method stub
if(header ==null)
{
header = new Node(element,null);
tail =header;
}
else{
Node newNode = new Node(element,null);
tail.next =newNode;
}
size++;
}
}
java实现链式线性表的更多相关文章
- 7-19 求链式线性表的倒数第K项
7-19 求链式线性表的倒数第K项(20 分) 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式: 输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示 ...
- 浙江大学PAT上机题解析之3-05. 求链式线性表的倒数第K项
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式说明: 输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理). 输出 ...
- 7-13 求链式线性表的倒数第K项(20 分)
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式: 输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理). 输出格式 ...
- 7-19 求链式线性表的倒数第K项(20 分)(单链表定义与尾插法)
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式: 输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理). 输出格式 ...
- Java实现链式存储的二叉查找树(递归方法)
二叉查找树的定义: 二叉查找树或者是一颗空树,或者是一颗具有以下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均小于根节点的关键字: 2. 若右子树非空,则右子树上所有节点关键字值 ...
- Java实现链式存储的二叉树
二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...
- java实现链式队列
java实现链式队列...比较简单 package datastruct; public class QueueLink implements Queue { // 定义一个节点内部类 class N ...
- Java bean 链式获取成员变量无需判空的工具设计
Java bean 链式获取成员变量无需判空的工具设计 本篇文章已发布至公众号 Hollis 对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者 ...
- 线性表的Java实现--链式存储(单向链表)
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. 链式存储结构的线性表将采用一组任意的存储单元存放线性表中的数据元素.由于不需要按顺序存储,链表在 ...
随机推荐
- 装了这几个IDEA插件,基本上一站式开发了!
前言 前几天有社区小伙伴私聊我,问我都用哪些IDEA插件,我的IDEA的主题看起来不错. 作为一个开源作者,每周要code大量的代码,提升日常工作效率是我一直追求的,在众多的IDEA插件中,我独钟爱这 ...
- mongodb入门命令-创建表数据(二)
1.mongodb入门命令 1.1 show databases; 或 show dbs; //查看当前的数据库 > show dbs; admin 0.000GB config 0.000GB ...
- Fiddler抓包工具简介:(一)认识Fiddler
认识Fiddler Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddler的数据(指coo ...
- Maven打包web项目报错:webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update)
问题描述 使用Maven打包项目的时候,出现错误: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing ...
- MySQL:由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题
我只是搬用工,记录一下 方法一: 安装这个微软常用运行库合集(https://www.repaik.com/), 链接:https://pan.baidu.com/s/1r4JJaUKjw-y1g3l ...
- BAT面试必问细节:关于Netty中的ByteBuf详解
在Netty中,还有另外一个比较常见的对象ByteBuf,它其实等同于Java Nio中的ByteBuffer,但是ByteBuf对Nio中的ByteBuffer的功能做了很作增强,下面我们来简单了解 ...
- 截取oracle字符串中的数字
方法一:如果Oracle版本不是太低的话,使用 正则表达式函数 REGEXP_SUBSTR 处理. REGEXP_SUBSTR有5个参数,分别是: 第一个是输入的字符串 第二个是正则表达式 第三个是标 ...
- c++学习笔记6(结构化程序设计)
结构化程序设计 c语言使用结构化程序设计: 程序=数据结构+算法 程序有全局变量以及众多相互调用的函数组成 算法以函数的形式实现,用于对数据结构进行操作 结构化程序设计不足
- inline-block布局VS浮动布局
a.不同之处:对元素设置display:inline-block ,元素不会脱离文本流,而float就会使得元素脱离文本流,且还有父元素高度坍塌的效果 b.相同之处:能在某程度上达到一 ...
- [hdu7035]Game
称区间$[i,j]$为普通区间,当且仅当$j-i\ge 3$且其操作两次内不会变为给定区间 结论:若$[i,j]$为普通区间,则$[i,j]$和$[i+1,j-1]$的状态( ...