实现对顺序表的增删查改以及打印

 下面这个代码是一开始就定义好的数组大小,现在说一下我的顺序表的大概思想吧。

增也就是要对组数进行插入操作,插入又分为三种情况,头插,尾插和指定下标的插入;其实也可以直接看成一种情况,那就是指定位置插入,头插也就是把位置设定成第0个元素,尾插就是把把位置设定成size所在的地方,下面我对三种情况具体分析。

头插:首先要判断数组是否已满,如果数组已满则要给反馈一个信息给用户,提示数组已经满了。如果没满找到size的位置,将前一个的值一个一个移到后一个上去,将最前面的位置空下来,把值插入进去,然后size加一。

              

尾插:也要判断数组是否已满,如果数组已满则要给反馈一个信息给用户,提示数组已经满了。如果没满找到size的位置,将值插入到size所在位置上,然后size加一。

指定位置插入:也同样要判断数组是否已满,如果数组已满则要给反馈一个信息给用户,提示数组已经满了。如果没满再判断size的是否为0,如果size为0并且指定插入的位置也为零的话,那么就将值直接插入,size加一,接着判断要插入的位置是否在1到size之间,是否找到size的位置,定义一个临时变量i,让其开始等于size的值,从后往前移动,将前一个的值一个一个移到后一个上去,移动一个,i减一,直到i到达指定位置,将值插入进去,最后size加一。

 

删和插入一样也分成三种,头删,尾删和指定位置删除。也同样可以看成是一种指定位置删除,下面我就只详细的说一下指定位置的删除。

指定位置index的删除:首先判断index的值是否大于0并且小于size,如果不是,抛出一个异常告诉用户index值不合法;如果满足要求,那么定义一个临时变量i,让i的值等于index,将i的下一个的值赋给i,也就是前移,直到i的值等于size的前一个的值,然后size减一,删除操作完成。

 

查就是在顺序表中查找有没有指定的element值,如果有就返回该下标(这个代码是返回所有出现element值的下标)。首先判断顺序表是否为空,即size是否为0。如果size==0;直接返回,告诉用户该顺序表为空;如果size != 0,那么就定义一个临时变量从前往后找,如果找到element,就将下标输出,继续下一次查找,直到i的值为size,结束查找;如果该顺序表中没有element值就提示用户,该顺序表中不存在element值。我在下面查找的代码中用了一个临时变量index来记录是否出现过element,如果出现指定的element,那么index的值会小于size的值,否则index的值会等于size。

对于修改的话,其实很简单,顺序表不为空的情况下,只需要先判断要修改的下标是否是大于0,并且小于size的,如果是就直接将值放入到指定的下标即可。

public class MyArrayList {
    private int[] array;
    private int size;    //记录顺序表中已有的个数

    //构造方法
    public MyArrayList() {
        //1.申请空间
        array = new int[20];
        //2.初始化个数
        size = 0;
    }
    //增加
    //1.尾插
    public void pushBack(int element){
        if(size < array.length && size >=0){
        array[size] = element;
        size++;
        }else{
            throw new UnsupportedOperationException("顺序表已满!");
        }
    }
    //2.头插
    public void pushFront(int element){
        if(size < array.length){
            for (int i = size - 1; i >= 0 ; i--) {
                array[i + 1] = array[i];
            }
            array[0] = element;
            size++;
        }else if(size == 0){
            array[size] = element;
            size++;

        }else{
            throw new UnsupportedOperationException("顺序表已满!");
        }
    }
    //3.插入到指定index下标的元素
    public void insert(int index,int element){  //index为下标
        if(size == 0 && index == size){
            array[index] = element;
            size++;
        }else if (size < array.length && size >= 1){
            if(index < size && index >= 0 ){
                for(int i = size;i>index;i--){
                    array[i] = array[i-1];
                }
                array[index] = element;
                size++;
            }else{
                throw new UnsupportedOperationException("index为不合法下标!");
            }
        }else{
            throw new UnsupportedOperationException("顺序表已满!");
        }

    }

    //删除
    //1.尾删
    public void popBack(){
        if(size <= 0){
            throw new UnsupportedOperationException("当前顺序表为空!");
        }else{
            size--;     //为了获取下标
            array[size] = 0;
        }
    }
    //2.头删
    public void popFront(){
        if(size <= 0){
            throw new UnsupportedOperationException("当前顺序表为空!");
        }else {
            for (int i = 1; i < size; i++) {
                array[i - 1] = array[i];
            }
            size--;
        }
    }
    //3.删除指定index下标的元素
    public void popinsert(int index){
        if (index < 0 || index >= size){
            throw new UnsupportedOperationException("index值不合法!");
        }else {
            for (int i = index; i < size - 1; i++) {
                array[i] = array[i + 1];
            }
            size--;
        }
    }
    //查(查找出所有值为element的下标)
    public void Find(int element){
        int index = 0;
        int i = 0;
        while ( i < size) {
            if (array[i] == element){
          
                System.out.println(i + " ");
                i++;
            }else{
            index++;
          }
        }
        if (index==size){
            System.out.println("顺序表中不存在element值");
        }
    }
    //改
    public void Alter(int index,int element){
        if(size!=0){
        if(index < 0 || index >= size){
            throw new UnsupportedOperationException("index下标不合法!");
        }else{
           array[index] = element;
        }
      }else{
          throw new UnsupportedOperationException("顺序表为空!");
         }
    }
    //打印
    public void print(){
        System.out.println("打印顺序表:");
        for (int i = 0; i < size ; i++) {
            System.out.print(array[i] + " ");
        }
    }

    //测试
    public static void main(String[] args) {
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值