线性表

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

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

实现:

定义一个接口:

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. shiro 会话管理

  2. ubuntu14配置opencv3.4.1(转)

    网站:https://blog.csdn.net/a1429331875/article/details/31539129 写此博客的目的是为了方便大家的学习,我是搞了半天,通过上网查找资料才成功的. ...

  3. ubuntu16.04 64bit 升级到 python3.6

    https://blog.csdn.net/zhao__zhen/article/details/81584933 https://www.codetd.com/article/1967538 htt ...

  4. linux下的arm汇编程序

    1.gnu 的编译环境搭建 解压编译工具,加入环境变量PATH 2.编译相关命令的使用 编译命令 arm-linux-gcc  -g -c -o led.o main.o led.c main.c / ...

  5. soap 简单调用其他系统的函数

    <?xml version ='1.0' encoding ='UTF-8' ?> <definitions name='自定义名称' targetNamespace='目标命名空间 ...

  6. OTU(operational taxonomic units),即操作分类单元

    转自http://www.dxy.cn/bbs/topic/35655953 1.OTU是什么? OTU(operational taxonomic units),即操作分类单元.通过一定的距离度量方 ...

  7. weblogc SessionData.getNextId性能问题

    参考:https://www.cnblogs.com/lemon-flm/p/7396627.html weblogic运行中持续报weblogic.servlet.internal.session. ...

  8. Java 中的 static 使用

    Java语言基础--static 0.目录 8.static 8.1 Java 中的 static 使用之静态变量 8.2 Java 中的 static 使用之静态方法 8.3 Java 中的 sta ...

  9. python之列表、元组、字典学习

    list特征列表中的元素可以是数字和字符串,列表,布尔值,列表中也可以嵌套列表 a=[1,2,3,"qqq","无"] b=[1,2,3,[1,2,3,&quo ...

  10. 安装scrapy时遇到的问题

    会报错,安装这个试试: pip install cryptography --force-reinstall