20-咸鱼学Java-Java中的顺序表

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

/**
 * 顺序表
 * @author 焦焱
 *
 */
class List2{
    int usedSize;//已经使用的空间
    int[] elem;  //数据存储域
    /**
     * 无参构造默认size = 10
     */
    public List2() {
        this(10);
    }
    /**
     * 有参构造函数
     * @param size 长度
     */
    public List2(int size) {
        elem = new int[size];
    }
    /**
     * 判断顺序表是否满
     * @return 是否满
     */
    public boolean isFull()
    {
        if(this.usedSize == elem.length)
            return true;
        return false;
    }
    /**
     * 插入一个元素
     * @param pos 插入位置
     * @param val 值
     * @return    是否插入成功
     */
    public boolean insert(int pos,int val)
    {   //判断是否合法
        if(pos>this.usedSize||pos<-1)
            return false;
        //如果满了要进行扩容
        if(isFull())
            elem = Arrays.copyOf(elem, 2*elem.length);  //如果满了进行扩容
        //挪动数据
        for (int i = this.usedSize-1; i >=pos; i--) {   
            elem[i+1] = elem[i];
        }
        elem[pos] = val;                //赋值
        this.usedSize++;                //已使用空间加一
        return true;
    }
    /**
     * 打印顺序表
     */
    public void show()
    {
        for (int i = 0; i < this.usedSize; i++) {
            System.out.print(elem[i]+" ");
        }
        System.out.println();
    }
    /**
     * 判断顺序表是否为空
     * @return
     */
    public boolean isEmpty()
    {
        return this.usedSize==0?true:false;
    }
    /**
     * 查找顺序表中一个元素第一次出现的下标位置
     * @param key  元素
     * @return     查找到的下标,未找到返回-1
     */
    public int serch(int key)
    {
        if(isEmpty())
            return -1;
        for (int i = 0; i < this.usedSize; i++) {
            if(key == elem[i])
                return i;
        }
        return -1;
    }
    /**
     * 删除一个元素
     * @param val 元素
     * @return    删除成功返回true
     */
    public boolean delete(int val)
    {
        int pos = serch(val);//先查找下标 
        if(pos==-1)         //如果未找到
            return false;
        //把后面元素一直前移 覆盖掉pos位置的元素
        for (int i = pos; i < this.usedSize-1; i++) {
            elem[i] = elem[i+1];
        }
        this.usedSize--;
        return true;
    } 
    }

测试

public class SqList2 {

public static void main(String[] args) {
    List2 a = new List2();
    for (int i = 0; i < 20; i++) {
        a.insert(i,i);
    }
    System.out.println("初始化插入0-19");
    a.show();
    a.insert(0, 100);
    System.out.println("在0号位置插入100之后");
    a.show();
    System.out.println("2号元素所在下标为"+a.serch(2));
    System.out.println("删除下标2的结果:"+ a.delete(2));
    a.show();
}
}

结果
初始化插入0-19
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
在0号位置插入100之后
100 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2号元素所在下标为3
删除下标2的结果:true
100 0 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值