1.数组实现的线性表
package com.endual.job;
public class Alist<T> {
private T[] entry ;
private int length ;
private static final int MAX_SIZE = 20 ;
public Alist() {
this(MAX_SIZE) ;
}
public Alist(int maxSize) {
this.entry = (T[]) new Object[maxSize] ; // 把一个Object的对象数组强制的转换为T[]
this.length = 0 ;
}
public void add (T t) {
if (length <= MAX_SIZE) {
this.entry[length] = t ;
length ++ ;
return ;
}
T[] tempEntry = (T[]) new Object[2*entry.length] ;
for (int i=0; i<entry.length; i++) {
tempEntry[i] = entry[i] ;
}
entry = tempEntry ;
entry[length] = t ;
length ++ ;
}
}
类似这样,优缺点
数组的实现线性的表是很简单的,并且可以直接访问任何的元素,只要知道该元素在数组中的位置就可以了,
而且插入到最后一个也是最简单的,直接添加即可。
但是,由于数组的长度的限制,当超过了数组的长度以后,要动态扩充数组,这样有一个步骤就是要负责数据,这样对于
大数据而言是非常耗费时间的,还有就是插入到数组中某一个位子的时候,要移动大量的数据,也是一个不足,删除也是一样的。这样降低了效率。
2.用链表的形式实现线性表
package job;
public class LinkedAList<T> {
private Node<T> firstNode ;
private int length ;
public LinkedAList() {
firstNode = new Node<T>() ;
}
public void add (T entry) {
if (length == 0) { // 如果是第一个,那么就在第一个上赋值就可以了
firstNode.setData(entry) ;
this.length++ ;
return ;
}
Node<T> nextNode = new Node<T>() ;
nextNode.setData(entry) ;
Node<T> tail = firstNode ;
for (int i=0; i<length-1; i++) {
tail = tail.getNextNode() ; // 求的最后一个Node
}
tail.setNextNode(nextNode) ; // 怎么会空指针呢
length++ ;
}
//获取到某个位置的Node的数据
public T getNodeAt(int pos) {
if (pos<0 || pos>=this.length) {
return null ;
}
Node<T> tempNode = this.firstNode ;
while (pos>0) {
tempNode = tempNode.getNextNode() ;
pos-- ;
}
T t = tempNode.getData() ;
return t ;
}
//从中间插入进去,pos从1的位置开始算起,如果他是1,那么就作为头结点了
public boolean insert(T t, int pos) {
boolean isSuccess = false ;
if (pos<=0 || pos>length) { // 如果超过了这个长度,那么当然是不能插入了的
return isSuccess;
}
Node<T> insertNode = new Node<T>() ; // 要插入的Node
insertNode.setData(t) ;
if (pos==1) {
insertNode.setNextNode(this.firstNode) ;
this.firstNode = insertNode ;
length++ ;
return true ;
}
if (pos==this.length) {
this.add(t) ;
return true ;
}
Node<T> tempNode = this.firstNode ; //第一个结点
while (pos>1) {
tempNode = tempNode.getNextNode() ;
pos-- ;
}
Node<T> nextNode = tempNode.getNextNode() ; // 获取到Pos位置的下一个Node
tempNode.setNextNode(insertNode) ;
insertNode.setNextNode(nextNode) ;
return true ;
}
//获取到当前的链表的长度
public int getLength() {
return this.length ;
}
public String toString() {
int temp = this.length ;
Node<T> tempNode = this.firstNode ;
while (temp>0) {
T t = tempNode.getData() ;
System.out.println(t) ;
tempNode = tempNode.getNextNode() ;
temp-- ;
}
return null ;
}
}
好处当然是插入删除的时候,没有移动数据,而且添加的数据是没有限制的。
不足的地方就是查找的时候,需要时间来查找。
分享到:
相关推荐
在这个主题中,我们将深入探讨如何使用Java语言来实现线性表。 Java是一种面向对象的编程语言,它提供了丰富的类库支持各种数据结构的实现。在给定的压缩包中,我们有两个.java文件:SeqList.java和LList.java,...
java实现线性表 java实现线性表 java实现线性表 java实现线性表 java实现线性表 java实现线性表
Java开发线性表;Java开发线性表;Java开发线性表;Java开发线性表;Java开发线性表;Java开发线性表;Java开发线性表;Java开发线性表;
在Java中,我们通常使用数组或链表来实现线性表。本话题聚焦于使用动态数组来实现线性表,这是一种常见的数据结构实现方式,因为它既保留了数组的高效访问特性,又能灵活地调整大小以适应数据的变化。 动态数组,也...
本篇将深入探讨如何用链表来实现线性表,并通过提供的`ChainList.java`和`ListInterface.java`文件来理解其实现细节。 首先,线性表具有顺序访问的特点,其元素可以通过索引进行访问。链表是一种非连续存储结构,每...
在Java中,我们可以使用两种主要方式来实现线性表:顺序存储和链式存储。 1. **顺序存储**: 顺序存储的线性表,也称为顺序表,是通过将数据元素按照它们的逻辑顺序依次存放在一组连续的内存地址中。这种存储方式...
在这个"简单的 Java 线性表.zip"压缩包中,我们可以期待获取到关于Java实现线性表的基础知识和实践示例。 1. **数组实现线性表**: 数组是最基础的线性数据结构,它提供了一种存储固定数量元素的方式。在Java中,...
本文旨在通过Java实现线性表的基本操作,并应用于实际问题中。线性表是一种基本的数据结构,广泛应用于计算机科学和软件开发中。本文将通过两个部分来介绍线性表的实现和应用:顺序表的实现与应用和单链表的实现与...
在给定的文件名`VectorList.java`中,很可能包含了使用`Vector`类来实现线性表的示例代码。通常,这样的代码会定义一个类,类中包含一个`Vector`实例来存储元素,并提供方法来执行线性表的各种操作。可能的方法有`...
链式存储结构线性表的java实现,全代码注释,通俗易懂
下面将详细解释这些概念及其Java实现。 **线性表** 是一种基本的数据结构,它是由n(n>=0)个相同类型元素构成的有限序列。线性表中的元素具有顺序关系,即每个元素都有一个前驱和后继,除了第一个元素没有前驱,...
在Java中实现线性表,我们可以利用数组或链表这两种方式。本项目提供了使用Java原生SDK实现的线性表,有助于深入理解和应用数据结构中的线性表概念。 首先,我们要了解线性表的基本操作。这些操作包括插入元素、...
在Java中,线性表的实现通常包括两种主要方式:顺序表和链表。 **2.1 线性表的抽象数据类型** 线性表的抽象数据类型(Abstract Data Type, ADT)定义了线性表的基本操作。在Java中,我们可以定义一个名为`LList`的...
总结来说,这个实验报告详细探讨了如何使用Java实现线性表的两种主要形式——顺序表和单链表,并通过具体的应用示例(如约瑟夫斯问题、链表操作、排序和合并)加深了对这两种数据结构的理解。同时,还涉及到了接口...
在Java中实现线性表,通常会涉及到两种常见的存储方式:顺序存储和链式存储。 一、顺序存储结构 1. 数组实现:线性表的顺序存储是最直观的方式,即使用数组来存储元素。数组的特点是访问速度快,但插入和删除操作...
线性表可以顺序存储或链式存储,而Java中实现线性表的一个常见方式是使用定长数组。本篇文章将深入探讨如何用Java定长数组实现线性表,以及相关的设计和操作。 首先,我们需要理解什么是定长数组。在Java中,数组是...
Java数据结构 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构
利用循环队列来实现银行排队系统,对进入队列的客户分为VIP和普通客户,其中VIP优先出队。能实现的功能如下1.新客户排队等待服务 2.客户离开排队服务 3.查询当前客户前面还有几人 4.查询截止目前总共办理多少客户 注...
实验报告涉及的知识点主要集中在数据结构中的线性表,包括顺序表和循环链表的实现与操作。线性表是一种逻辑结构,其中的数据元素按照线性顺序排列,可以通过顺序存储或链式存储来实现。 1. **顺序表**:顺序表是用...