线性表

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

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

实现:

定义一个接口:

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. Java学习04 (第一遍)

    封装.抽象.继承和多态.封装:在面向对象语言中,封装特性是由类来体现的,我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法),就好像人类,可以具有name,sex,age等属 ...

  2. spring中的IOC/DI的知识点

    IOC(Inverse of control):控制反转;其实就是一个装对象的容器,以前我们在controller中调用service中的方法,都要先new 一个service对象,这样不符合模式设计 ...

  3. 获取当前ip

    测ip地址http://2018.ip138.com/ic.asphttps://www.ip.cn/

  4. js教程

    http://study.163.com/course/courseLearn.htm?courseId=1076006#/learn/video?lessonId=1290547&cours ...

  5. hdu5505-GT and numbers-(贪心+gcd+唯一分解定理)

    GT and numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  6. webstocket 聊天

    /** * 初始化socket **/ function initSocket(index_host){//端口号 if( !window.WebSocket ){ console.log(" ...

  7. 总是Eqw

    1.投递总是Eqw状态 qstat -j job_ID #Eqw状态的job id qconf -sq all.q |grep host qconf -shgrp @allhosts

  8. git flow分支管理

    阅读目录 两种核心分支 三种临时分支 Git Flow流程示例代码 Git Flow工具 分支命名规范 总结 git flow是Vincent Driessen提出了一个分支管理的策略,非常值得借鉴. ...

  9. 预览InputFile

    [预览InputFile] 通过input的files属性,可以取到选择的File对象,通过FileReader可以将File对象读取出来. <body> <input type=& ...

  10. unittest测试

    标签(空格分隔): unittest unittest介绍: python里面也有单元测试框架-unittest,相当于是一个python版的junit. 一.unittest简介 1.先导入unit ...