写点什么

【数据结构 Java 版】玩转顺序表

  • 2021 年 11 月 11 日
  • 本文字数:1116 字

    阅读完需:约 4 分钟

  1. 判断顺序表是否已满


public boolean isFull(){


return this.usedSize == capacity;


}


  1. 在 pos 位置新增元素


public void add(int pos, int data){


if(pos<0 || pos>this.usedSize){


System.out.println("pos 位置不合法");


return;


}


if(isFull()){


// 扩容


this.elem=Arrays.copyOf(this.elem, 2*capacity);


capacity*=2;


}


for(int i = this.usedSize;i>pos;i--){


this.elem[i]=this.elem[i-1];


}


this.elem[pos]=data;


this.usedSize++;


}


  1. 打印顺序表


public void display(){


for(int i=0;i<this.usedSize;i++){


System.out.print(this.elem[i]+" ");


}


}


  1. 判断顺序表是否为空


public boolean isEmpty(){


return this.usedSize==0;


}


  1. 判断是否包含某个元素


public boolean contains(int toFind){


if(isEmpty()){


return false;


}


for(int i=0;i<this.usedSize;i++){


if(this.elem[i]==toFind){


return true;


}


}


return false;


}


  1. 查找某个元素的第一次出现的位置


public int search(int toFind){


if(isEmpty()){


return -1;


}


for(int i=0;i<this.usedSize;i++){


if(this.elem[i]==toFind){


return i;


}


}


return -1;


}


  1. 获取 pos 位置的元素


public int getPos(int pos){


if(isEmpty()){


return -1;


// throw new RuntimeException("顺序表为空");


}


if(pos<0 || pos>=this.usedSize){


throw new RuntimeException("顺序不合法");


}


return this.elem[pos];


}


  • 其实上述代码返回 -1 其实是不一定的,因为在已知该数组不可能等于-1 的情况下,我们可以这样处理,但是如果能等于-1.就是错的,就需要换其他值(这相当于具体情况对业务进行处理)


  • 也可以使用注释里的 throw new RuntimeException("顺序表为空"); ,这其实是手打抛出错误(异常


  1. 获取顺序表长度


public int size(){


return this.usedSize;


}


  1. 给 pos 的位置的元素设为 value


public void setPos(int pos, int value){


if(pos<0 || pos>=this.usedSize){


throw new RuntimeException("pos 不合法")


}


this.elem[pos]=value;


}


  1. 删除第一次出现的关键字 key


public void remove(int toRemove){


if(isEmpty()){


System.out.println("数组为空");


return;


}


int index=search(toRemove);


if(indfex==-1){


System.out.println("没用你要删除的数字");


return;


}


for(int i =index;i<this.usedSize-1;i++){


this.elem[i]=this.elem[i+1];


}


this.usedSize--;


}


其实在循环中是不能删除最后一个元素的,因为 i < this.usedSize ,但是上述代码是可以直接删除最后一个元素,因为 usedSize 自减后,就相当于删除最后一个元素了


  1. 清空顺序表


public void clear(){


for(int i=0;i<this.usedSize;i++){


this.elem[i]=0;


}


this.usedSize=0;


}

3. 增、删、改、查的时间复杂度

既然我们实现了以上接口,我们可以根据上述代码思考下,顺序表中增删改查的时间复杂度为多少

评论

发布
暂无评论
【数据结构 Java 版】玩转顺序表