线性表

概念:零个或者多个数据元素的有限序列。

特点:除了第一个元素没有前驱结点,最后一个元素没有后继结点外,其它元素有且仅有一个直接前驱和一个直接后继结点。元素的个数必定为有限个。

实现:

定义一个接口:

public interface List {
public void add(int index,Object element);//在指定下标添加元素
public boolean isEmpty();//判断线性表是否为空
public int size();//线性表中当前元素的个数
public Object get(int index);//获得指定下标的元素
public void remove(int index);//删除指定下标的元素
}

实现线性表

public class SeqList implements List {
final static int defaultSize=10;//默认长度
int maxSize;//最大长度
int size;//当前元素的个数
Object []array;//存储线性表 //初始化
public SeqList(){
this(defaultSize);
}
public SeqList(int sz){
maxSize=sz;
this.size=0;
array=new Object[sz];
}
@Override
public void add(int index, Object element) {
if(index>size||index<0){
System.out.println("插入下标错误");
}
if(size==maxSize){
System.out.println("线性表已经满了,无法进行插入");
} System.arraycopy(array, index, array, index+1, size-index);
array[index]=element;
size++;
} @Override
public boolean isEmpty() {
return size==0;
} @Override
public int size() {
return size;
} @Override
public Object get(int index) {
if(index>size||index<0){
System.out.println("获得下标位置出错");
}
if(size==0){
System.out.println("线性表为空");
}
return array[index];
} @Override
public Object remove(int index) {
if(size==0){
System.out.println("线性表为空");
}
if(index>size-1){
System.out.println("删除下标有误");
}
Object l=array[index];
System.arraycopy(array, index+1, array, index, size-index-1);
size--;
return l;
} @Override
public void ensureCapacity(int minCapacity) {
// TODO Auto-generated method stub } }

线性表的查找效率高,但是插入和删除要移动大量元素所以效率比较低。

ArrayList简易版实现

import java.util.Arrays;

public class MyList implements List{
private int size;
private Object []array; public MyList(){
this(10);
} public MyList(int initCapacity) {
super();
if(initCapacity<=0){
throw new IllegalArgumentException("下标不正确!");
}else{
this.array=new Object[initCapacity];
}
} @Override
public void add(int index, Object element) {
if(index<0||index>size){
throw new IllegalArgumentException("下标不正确!");
}
ensureCapacity(size+1);
System.arraycopy(array, index, array, index, size-index);
array[index]=element;
size++;
} @Override
public boolean isEmpty() {
return size==0;
} @Override
public int size() {
return size;
} @Override
public Object get(int index) {
if(index<0||index<size){
throw new IllegalArgumentException("下标不正确!");
}
return array[index];
} @Override
public Object remove(int index) {
if(size==0){
System.out.println("线性表为空");
}
if(index>size-1){
System.out.println("删除下标有误");
}
Object l=array[index];
System.arraycopy(array, index+1, array, index, size-index-1);
size--;
return l;
} @Override
public void ensureCapacity(int minCapacity) {//实现扩容
int oldCapacity=array.length;
if(oldCapacity<minCapacity){
Object oldData[]=array;
int newCapacity=(oldCapacity*3)/2+1;
if(newCapacity<minCapacity){
newCapacity=minCapacity;
}
array=Arrays.copyOf(oldData, newCapacity);
}
} }

线性表(java)的更多相关文章

  1. 线性表java实现

    顺序表 public class SequenceList { /* * content,节点内容 * location,节点在表中的位置(序号) * */ private String conten ...

  2. 数据结构(Java描述)之线性表

    基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...

  3. Java Se :线性表

    Java的集合框架分为两个系列,Collection和Map系列.在大学期间,学习数据结构时,好像学习了线性表.非线性表.树,哎,都给忘了.其实,在Collection系列内部又可以分为线性表.集合两 ...

  4. Java数据结构之线性表(2)

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  5. Java数据结构之线性表

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  6. 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  7. JAVA中的数据结构——集合类(线性表:Vector、Stack、LinkedList、set接口;键值对:Hashtable、Map接口<HashMap类、TreeMap类>)

    Java的集合可以分为两种,第一种是以数组为代表的线性表,基类是Collection:第二种是以Hashtable为代表的键值对. ... 线性表,基类是Collection: 数组类: person ...

  8. Java线性表的排序

    Java线性表的排序 ——@梁WP 前言:刚才在弄JDBC的时候,忽然觉得order-by用太多了没新鲜感,我的第六感告诉我java有对线性表排序的封装,然后在eclipse里随便按了一下“.” ,哈 ...

  9. 线性表的顺序存储结构——java

    线性表的顺序存储结构:是指用一组地址连续的存储单元一次存放线性表的元素.为了使用顺序结构实现线性表,程序通常会采用数组来保存线性中的元素,是一种随机存储的数据结构,适合随机访问.java中ArrayL ...

  10. 线性表的Java实现

    一.概念 对于常用的数据结构,可分为线性结构和非线性结构,线性结构主要是线性表,非线性结构主要是数和图.当n>0时,表可表示为:(a0,a1,a2,a3,…an) 1. 线性表的特征: 1.存在 ...

随机推荐

  1. SqlServer数据库碎片整理——BCC SHOWCONTIG

    SQLServer提供了一个数据库命令——DBCC SHOWCONTIG——来确定一个指定的表或索引是否有碎片.  示例: DBCC SHOWCONTIG语法: 显示指定的表的数据和索引的碎片信息.  ...

  2. Running Your Application

    在运行你的第一个app前,您先要了解以下文件: 1.AndroidManifest.xml:Android的基本配置信息: <uses-sdk> element:app兼容版本信息: ex ...

  3. C# 保证数据长度相同

    /// <summary> /// 保证数据长度相同 /// </summary> /// <param name="obj"></par ...

  4. 吴裕雄 oracle 管理数据表对象

  5. Error logged from Ant UI:

    2down vote Have a look at the Eclipse error log. I recently saw following error there: Error logged ...

  6. Java进阶 线程安全

    多线程编程中的三个核心概念 原子性 这一点,跟数据库事务的原子性概念差不多,即一个操作(有可能包含有多个子操作)要么全部执行(生效),要么全部都不执行(都不生效). 关于原子性,一个非常经典的例子就是 ...

  7. pring Boot 与Spring Cloud版本对应

    Spring Boot Spring Cloud 1.2.x Angel版本 1.3.x Brixton版本 1.4.x Camden版本 1.5.x Dalston版本.Edgware版本 2.0. ...

  8. Java中String的常用方法总结

    Java中String的常用方法总结 1.length()字符串的长度 String str="HelloWord"; System.out.println(str.length( ...

  9. 如何区分Java中的方法重载和重写

    首先说的是重载: 方法的重载 * 在同一个类中,方法名相同,参数列表不同.与返回值类型无关. * 参数列表不同: * A:参数个数不同 * B:参数类型不同 * C:参数的顺序不同(不算重载 报错) ...

  10. 解题8(FindLongestNumberStr)

    题目描述 样例输出 输出123058789,函数返回值9 输出54761,函数返回值5 接口说明 函数原型: unsignedint Continumax(char** pOutputstr,  ch ...