顺序表

顺序表

  顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

class TestSqlist {
    private int[] elem; //存放数据元素的数组
    private int usedsize;   //有效数据个数

    public TestSqlist() { //无参构造
        this(10);
    }
    
    public TestSqlist(int size) { //指定数组大小,对其进行初始化
        this.elem = new int[size];
        this.usedsize = 0;
    }
    
    private boolean isFull() {   //判满
        if (this.usedsize == this.elem.length) {
            return true;
        }
        return false;
    }
    
    public boolean isEmpty() {  //判空
        if (this.usedsize == 0) {
            return true;
        }
        return false;
    }
    
    public boolean insert(int pos,int val) {    //插入
        if (isFull()) { //在数组满时进行扩容操作
            //二倍扩容
            this.elem = Arrays.copyOf(this.elem,this.elem.length*2);
        }
        //参数合法性校验
        if (pos < 0 || pos > this.usedsize) {
            return false;
        } else {
            for (int i = this.usedsize-1;i >= pos;i--) {
                this.elem[i+1] = this.elem[i];
            }
            this.elem[pos] = val;
            this.usedsize++;
        }
        return true;
    }
    
    public int search(int key) {    //查找
        if (isEmpty()) {
            return -1;
        } else {
            for (int i = 0; i < this.usedsize; i++) {
                if (this.elem[i] == key) {
                    return i;
                }
            }
        }
        return -1; //key不存在则返回-1
    }
    public boolean delete(int key) {   //删除第一次出现的key
        int index = search(key);  //获取待删除元素的位置
        if (index == -1) {
            return false;
        } else {
            for (int i = index;i < usedsize-1;i++) {
                this.elem[i] = this.elem[i+1]; //将后面的元素向前移动一个位置
            }
            //上面覆盖操作也可以用数组的拷贝来实现
            //System.arraycopy(this.elem,index+1,this.elem,index,this.usedsize-index-1);
            this.usedsize--;
        }
        return true;
    }
    
    public int getPos(int pos) {    //得到pos位置的值
   		//参数合法性校验
        if (isEmpty() || pos < 0 || pos > this.elem.length) {
            throw new UnsupportedOperationException("pos位置不合法或顺序表为空");  // 不支持的操作异常
        } else {
            return this.elem[pos];
        }
    }
    
    public void show() {	//打印(重写toString()也可以)
        for (int i = 0;i < usedsize;i++) {
            System.out.print(this.elem[i] + " ");
        }
        System.out.println();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值