博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法之 线性表顺序结构
阅读量:5072 次
发布时间:2019-06-12

本文共 3037 字,大约阅读时间需要 10 分钟。

package math;import java.util.ArrayList;import java.util.List;//线性表顺序结构public class LinearTable {    public int len = 0; //线性表表长度    public List list;    public int currentLen = 0;    //构造方法,申请一个对应长度得 线性表    public LinearTable(int i){        this.list = new ArrayList(i);        this.len = i;    }        //是否微空    public boolean listEmpty(){        if(this.getElem(0) == null){            return true;        }else{            return false;        }    }    //清空数组    public void clearList(){        for (int i = 0; i < len; i++) {            if(list.get(i) != null){                list.remove(i);            }else{                break;            }        }            }    //增删改查    //在某个位置 增加一个    public void listInsert(int i,Object obj){        if(this.check(i) && obj != null){            //当线性表长度 等于数据长度时候            if(currentLen == len){                throw new RuntimeException("线性表已满");            }            //从最后一项开始 让前一项等于后一项   一直到J = i-1 也就是 j>i            if(i >= currentLen+1){                //判断是否插入 插入最后一项                 list.add(obj);                System.out.println("插入在当前线性表最后面");            }else{                Object temp = new Object();                list.add(list.get(currentLen-1));                for (int j = currentLen-1; j >=i-1; j--) {                    temp = list.get(j-1);                    list.set(j,temp);                    // 后一项 等于前一项                    if(j == i-1){                        list.set(j, obj);                    }                 }            }            currentLen = currentLen+1;//长度加一        }else{            throw new RuntimeException("listInsert 第二个参数不能为空");        }    }    public void listDelete(int i){        this.check(i);        //验证是否微空表        if(this.listEmpty()){            throw new RuntimeException("当前线性表为空,不允许删除操作");        }        if(i > currentLen ){            //判断是否为没有的下标            throw new RuntimeException("下标不存在");        }else{            Object temp = new Object();            for (int j = i-1; j < currentLen-1; j++) {                temp = list.get(j+1);                // 后一项 等于当前项                System.out.println(temp);                list.set(j, temp);            }            //每次删除最后一项            list.remove(currentLen-1);            currentLen = currentLen-1;//长度减一        }            }    public void listUpdate(int i,Object obj){        this.check(i);        //判断与当前长度得关系        if(i>currentLen){            throw new RuntimeException("无效得数组下标");        }else{            list.set(i-1, obj);        }    }    public Object getElem(int i){        this.check(i);        //判断与当前长度得关系        if(i>currentLen){            throw new RuntimeException("无效的组下标");        }else{            return list.get(i);        }    }    public int listLength(){        return currentLen;    }        public boolean check(int i){        // 大于0项          if(i <= len && i >= 0 ){            return true;        }else{            throw new RuntimeException("无效的下标值");        }    }}

 

转载于:https://www.cnblogs.com/bin-pureLife/p/4150033.html

你可能感兴趣的文章