java数据结构--顺序表

顺序表:

顺序表是线性表的顺序存储方式,且地址存储连续

特点:

1.顺序表的底层实现是数组,并且需要预先分配内存 

2.顺序表中逻辑上相邻的数据元素,其物理意义上也相邻              

3.顺序表不便于插入和删除操作

4.便于随机存取

代码实现:

定义一个object类型的数组,并且,根据所需要的存储数据的大小定义其数组长度

    Object[]list;
    int cur;
    public Sqlist(int maxsize){
        cur=0;
        list=new Object[maxsize];
    }

这里定义了一个objec类型的数组,定义了一个表长,maxsize表示定义的顺序表最大存储空间

在定义了一个构造函数,用来在创建这个顺序表的时候,定义其最大储存空间并初始化顺序表长度

顺序表的顺序添加方法

 //按顺序添加元素
public void add(Object x){
        if(cur==list.length){
            return;
        }
        list[cur]=x;
        cur++;
    }

 在添加中,首先需要判断当前长度是否已经达到顺序表中的最大长度,没有达到在

list[cur]=x; c++;将要添加的元素要插入到顺序表的最后;然后索引加1。

顺序表在指定位置添加元素方法

 public void insert(int i,Object x){//注意:索引应当是从0开始
        if(cur==list.length){
            System.out.println("顺序表已满");
            return;
        }
        if(i<0||i>cur){
            System.out.println("插入不合法");
            return;
        }
        for (int j = cur; j>i ; j--) { //遍历待插入后面的数
            list[j] = list[j - 1];//待插入的后面的数都向后移动
        }
            list[i]=x;
            cur++;
    }//在指定位置添加值

首先两个判断,判断表长是否已经已经达到最大存储限制,再判断插入位置是否和法,

符合就将元素添加,如果添加位置有元素,则之后的所有元素都向后移动

需要注意的是顺序表的添加索引是从0开始

删除方法

public void remove(int i){
        if(isEmpty()) {
            System.out.println("顺序表为空");
            return;
        }
            if(i<0||i>cur){
                System.out.println("删除不合法");
                return;
        }
        for (int j =i; j<cur-1; j++) {//核心
            list[j] = list[j + 1];//被删除元素后面的数都向前移动
        }
            cur--;
    }//删除指定位置的值

删除方法和插入指定元素有些类似,不过是最后删除的位置后面有元素的话,就将其后面的所有元素前移

查询指定元素

public Object get(int i){
        if(i<0||i>cur){
            return null;
        }
       return list[i];
    }//返回一个指定元素值

如果要查询的元素没有超过表长并且索引值是大于等于0的,那么就返回一所查询索引的数组的值

顺序表的输出

  public void display(){
        for (int i = 0; i <length() ; i++) {
            System.out.print(list[i]+" ");
        }
    }//打印顺序表

这里我写了一个length()方法来把表长得到

for循环遍历输出即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值