java顺序表

顺序表是基于数组的线性表。在java中基本的数组问题:数组的长度是固定的,声明后只能存放固定的长度的数值,而顺序表是动态数组可以根据数据的大小来调整数组的大小。

import java.util.Arrays;

public class MyArray {
    private int[]data;
    private int size;

    public MyArray(){
       data=new int[10];
    }
    public MyArray(int cap){
        data=new int[cap];

    }
    //判断是否已满
    private void full(){
        if (size==data.length){
            System.err.println("full");
        }
    }
    //扩容
    private void grow(){
        int[] newdata= Arrays.copyOf(this.data,data.length<<1);
        this.data=newdata;

    }
    //中间插入
    public  void addIndex(int index,int val){
       if (size==data.length){
           grow();
       }
       if (index<0||index>size){
           System.err.println("err");
           return;
       }else {
           for (int i = size - 1; i >= index; i--) {
               data[i+1] = data[i];
           }
       }
        data[index]=val;
        size++;
    }
    public void addFist(int val){
        addIndex(0,val);
    }
    public void  addlast(int val){
        addIndex(size,val);
    }
public String toString(){
        String ret="[";

    for (int i = 0; i <size; i++) {
        ret+=data[i];
        if (i!=size-1){
            ret+=",";
        }
    }
    ret+="]";
return ret;



}
public int getByvalue(int value){
    for (int i = 0; i <size ; i++) {
        if (data[i]==value){
            return i;
        }

    }
    return -1;
}
//删除
    public void removeIndex(int index){
        if (index<0||index>size){
            System.err.println("err");
            return;
        }
        for (int i = index; i <size ; i++) {
            data[i]=data[i+1];
        }
        size--;
        data[size]=0;

    }
    public void removeValueOnce(int value){
        for (int i = 0; i < size; i++) {
            if (data[i]==value){
                removeIndex(i);
                return;
            }

        }
    }
public void removeAllValue(int value){
    for (int i = 0; i <size ; i++) {
        while(i!=size&&data[i]==value){
            removeIndex(i);

        }
    }
}
public  void removeFist(){
        removeIndex(0);
}
public  void removeLast(){
        removeIndex(size-1);
}


}
public class test {
    public static void main(String[] args) {
    MyArray myArray=new MyArray(3);
    myArray.addlast(1);
    myArray.addlast(2);
    myArray.addlast(3);
        System.out.println(myArray);
        myArray.addIndex(2,4);
        System.out.println(myArray);
        myArray.removeIndex(2);
        System.out.println(myArray);

    }


}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java顺序表是一种线性数据结构,它按照元素在内存中的顺序存储数据。顺序表的插入操作是将一个元素插入到指定位置,而不改变其他元素的位置。binsert是一种二分插入排序算法,用于在有序的顺序表中插入一个元素。 binsert算法的基本思想是通过二分查找找到插入位置,然后将插入位置之后的元素依次后移,最后将待插入的元素放入插入位置。 以下是Java顺序表binsert的实现代码示例: ```java public class SeqList { private int[] data; // 存储数据的数组 private int size; // 顺序表的大小 public SeqList(int capacity) { data = new int[capacity]; size = 0; } // 在指定位置插入元素 public void binsert(int index, int element) { if (index < 0 || index > size) { throw new IndexOutOfBoundsException("插入位置超出范围"); } // 二分查找找到插入位置 int low = 0; int high = size - 1; while (low <= high) { int mid = (low + high) / 2; if (data[mid] == element) { break; } else if (data[mid] < element) { low = mid + 1; } else { high = mid - 1; } } int insertIndex = low; // 将插入位置之后的元素依次后移 for (int i = size - 1; i >= insertIndex; i--) { data[i + 1] = data[i]; } // 将待插入的元素放入插入位置 data[insertIndex] = element; size++; } } ``` 使用示例: ```java public class Main { public static void main(String[] args) { SeqList list = new SeqList(10); list.binsert(0, 5); // 在位置0插入元素5 list.binsert(1, 3); // 在位置1插入元素3 list.binsert(1, 7); // 在位置1插入元素7 // 输出顺序表的元素 for (int i = 0; i < list.size; i++) { System.out.println(list.data[i]); } } } ``` 输出结果为: 5 7 3
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值