线性表

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

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

实现:

定义一个接口:

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. 在iOS上使用ffmpeg播放视频

    国外靠谱的有这几个:1.Mooncatventures group https://github.com/mooncatventures-group 2.KxMoviePlayer (use Open ...

  2. rsync sersync搭建

    目标服务器 192.168.100.47 源服务器    192.168.100.46 目标服务器配置 [root@node01 nodejs]# cat /etc/rsyncd.conf #日志文件 ...

  3. NTKO OFFICE文档控件

    目录 前言 什么是ntko 准备工作 实战演练 总结 一.前言 Web开发中经常需要用到在线处理office文档的功能,现在市面上有一些常用的Web页面调用显示Office的控件技术,用起来很方便. ...

  4. 10.18号java课后动手动脑

    问题一结论:类如果提供了一个自定义的构造方法,将导致系统不再提供默认构造方法. 问题二结论:(1)程序运行的结果是100和300,field=200为类的初始化块,可以在类中使用“{”和“}”将语句包 ...

  5. 1.5.3、CDH 搭建Hadoop在安装之前(定制安装解决方案---创建群集主机的虚拟映像)

    创建群集主机的虚拟映像 您可以使用预先部署的Cloudera软件创建虚拟机映像,例如PXE启动映像,Amazon AMI和Azure VM映像,这些映像可用于快速启动虚拟机.这些图像使用parcel来 ...

  6. new.target

    [new.target] The new.target property lets you detect whether a function or constructor was called us ...

  7. 使用ddns搭建免费服务器

    [使用ddns搭建免费服务器] 第一步 tplink路由器提供了ddns服务,它为用户免费提供一个子tpddns.cn下的子域名,映射到你的路由器上.当启用后,只在要能接入互联网的地方,都能过此域名, ...

  8. Appium 1.6安装步骤

    原来用的Appium1.5.3GUI版本,那为什么升级呢? 为了兼容最新版本的iOS10和Android7 Xcode8升级后,将不支持使用UIAutomation,而是改为使用XCUITest了,并 ...

  9. Python Flask学习

    开了一个新坑..一直以来对web的前端后端了解比较模糊,所以打算学一个后端框架,写个小博客什么的增长一下姿势水平. 初学嘛,选个相对轻量级一点的,就决定学习flask啦.

  10. poj3292(筛法+打表)

    题目链接:https://vjudge.net/problem/POJ-3292 题意:定义4n+1数(简称H数),H数分为三类:unit,即为1; H-primes,只能分解为1×自身,类似于我们平 ...