线性表简述

一、简单实现增,删,改、查

package datatructs;

/**

 * 表接口

 */

public interface LinearList {

    

    boolean isEmpty();//判断线性表是否为空

    int size();   //返回线性表的大小

    Object get(int index); //获取指定索引的元素

    Object set (int index,Object element);//修改指定索引的元素

    

    boolean addForIndex(int index,Object element);//在指定索引位置添加的元素

    

    boolean add(Object element);//在线性表最后添加元素

    

    Object remove(int index); //移除指定位置的元素

    

    void clear(); //清空线性表

    

    

    

    

}

实现类

package datatructs;



public class LinearListImpl implements LinearList {

    //线性表

    private Object [] sList;

    //线性表大小

    private int size;

    

    

    



    public LinearListImpl(int length) {

        if(length<0){

            sList=new Object[10];

        }else{

            sList=new Object[length];

        }

    }

    

    



    public LinearListImpl() {

        //设置默认为10个大小

        this(10);

    }





    /*

     * 检查线性表是否为空

     */

    @Override

    public boolean isEmpty() {

        //如果size=0就说明为空 true,不为0就为false

        return size==0;    

    }

    /*

     * 返回线必表的大小

     */

    @Override

    public int size() {

    

        return size;

    }



        /*

         * 返回指定索引位置的元素

         */

    @Override

    public Object get(int index) {

        

        return sList[index];

    }

    

    

    



    @Override

    public Object set(int index, Object element) {

        //得到原来位置上的元素

        Object old=sList[index];

        //修改

        sList[index]=element;

        //返回原来的值

        return old;  

    }

    /*

     * 检查在指定位置添加元素的,索引是否在范围内

     */

    public void checkIndexForAdd(int index){

        if(index<0 || index>size){

            throw new IndexOutOfBoundsException("要插入的索引不在表的范围内");

        }

    }

    /*

     * 检查在指定索引是否在范围 内

     */

    public void checkIndex(int index){

        if(index>size){

            throw new IndexOutOfBoundsException("要操作的索引不在表的范围内");

        }

    }





    

        /*

         *在指定索引位置添加     

         */

    @Override

    public boolean addForIndex(int index, Object element) {

        checkIndexForAdd(index);

        

        //判断线性表是否还有空间

        if(size()==sList.length){

            //如果为0

            if(sList.length==0){

                //初始化为10

                sList=new Object[10];

            }else{

                //不为空就+1

                //临时表

                Object [] tmp=sList;

                //重新+1 

                this.sList=new Object[sList.length+1];

                //将元素复制过来

                for (int i = 0; i < size; i++) {

                    sList[i]=tmp[i];

                }

            }

        }

        //向后移一位

        for(int i=size-1;i>=index;i--){

            sList[i]=sList[i+1];

        }

        //插入元素

        sList[index]=element;

        size++;

        return true;

    }

    /*

     * 在最后添加元素

     */

    @Override

    public boolean add(Object element) {

        //调用 上面的添加方法

         return addForIndex(size,element);

        

    }

    /*

     * 删除指定索引的元素

     */

    @Override

    public Object remove(int index) {

        checkIndex(index);

        for(int i=index;i<size-1;i++){

            sList[i]=sList[i+1];

        }

        sList[--size]=null;

        //返回要移除的元素

        return sList[index];

    }



    @Override

    public void clear() {

        for (int i = 0; i < size; i++) {

            //将每个值设置为null

            sList[i]=null;

        }

        //将线性表大小设置0

        size=0;



    }



}

 

测试

package datatructs;



public class Demo {



    /**

     * @param args

     */

    public static void main(String[] args) {

        LinearListImpl ll=new LinearListImpl();

        System.out.println("是否为空:  "+ll.isEmpty());

        System.out.println("大小:"+ll.size());

        ll.add("张三");

        ll.add("李四");

        ll.addForIndex(2, "王五");

        

        System.out.println(ll.set(2, "赵六"));

        

        

        

        ll.remove(2);

        for (int i = 0; i < ll.size(); i++) {

            System.out.print("\t第"+i+" 元素 :"+ll.get(i));

        }

        

        ll.clear();

        System.out.println("元素大小:"+ll.size());

        System.out.println("是否为空:  "+ll.isEmpty());

    }



}

 

你可能感兴趣的:(线性表)