数据结构——SimpleList的实现

这个SimepleList就是一个最简单的用数组实现的表。为了更好的表达表这个结构的特点,只实现存储int型数组的形式。并且没有结合泛型,接口等机制进行更高层次的抽象处理,不过以后我会在这个基础上编写一个类似JDK中的ArrayList类的数据结构。

这个SimpleList主要涉及以下功能点:

  • 创建表;
  • 重置表;
  • 查询表中数据元素个数;
  • 在位置x插入数据元素;
  • 删除位置x的数据元素;
  • 在尾部追加数据元素;
  • 修改位置x的元素值;
  • 获取位置x的元素值;
  • 判断表是否为空表;
  • 判断表是否已经满;
  • 输出数组当前所有元素。

属性

  • public static int DEFAULT_CAPACITY : 默认表大小
  • private int size : 表中元素个数
  • private int[] elements : 元素数组

构造器

共有两个构造器,一个为使用默认容器大小来构造表,一个则是使用自定义大小。
clear()和init()函数功能见后,主要是用来初始化成员变量的。

public SimpleList(){
    clear();
}

public SimpleList(int size){
    size = 0;
    init(size);
}

函数

inti()初始化元素数组。

public void init(int capacity){
    elements = new int[capacity];
}

clear()函数用默认构造函数重置表的状态

public void clear(){
    size = 0;
    init(DEFAULT_CAPACITY);
}

接下来是典型的一行代码实现的功能。

public int size(){return size;}
public boolean isEmpty(){
    return size == 0 ? true : false;
}
public boolean isFull(){
    return size() == elements.length ? true : false;
}

insert()在指定位置idx插入一个元素,idx的取值范围为0~size. idx为size则在尾部插入元素,其余则是idx位置的前面插入元素。
在插入操作中,其花销是比较昂贵的。因为插入元素时,会涉及到元素的移动。最坏的情况则是在头部插入元素,则需要把原来的所有元素都后移一位,这个函数的时间复杂度是线性增长的。

public boolean insert(int idx, int ele){
    /* 表已满 */
    if(isFull())
        return false;
    /* 判断传入的参数pos是否合法 ,= =,这个和上面的可以合并?*/
    if(idx < 0 || idx > size)
        return false;
    /* idx位置及其后所有数据后移一位 */
    for(int i=size()-1; i >= idx; i--){
        elements[i+1] = elements[i];
    }
    elements[idx] = ele;
    size++;
    return true;
}

append()复用insert()方法,只在数组尾部插入的元素。该方法的时间复杂度是常数,并不涉及元素的移动。

public boolean append(int ele){
    return insert(size(), ele);
}

根据提供的索引获取对应元素的值,这里可能就会涉及到当提供的索引是非法的情况,本实现中该情况处理为抛出一个异常。
同样的根据索引设置新的元素值也是类似的。

public int getElementByPos(int idx) throws IllegalArgumentException{
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值