顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数 据的增删查改。
顺序表一般可以分为:
- 静态顺序表:使用定长数组存储。
- 动态顺序表:使用动态开辟的数组存储。
相关方法实现:
package List;
public class SeqList {
int[] data = new int[10];
private int size = 0;
//打印顺序表
public void display(){
System.out.print("[");
for(int i = 0; i < size; i++) {
System.out.print(data[i]);
if(i < size-1){
System.out.print(",");
}
}
System.out.println("]");
}
//在pos位置新增元素
public void add(int pos, int element){
if(pos < 0 || pos > size){
return;
}
if(size > data.length){
System.out.println("空间不够,需扩容!已经按原空间2倍扩容");
expendCapacity();
}
if(pos == size) {
this.data[pos] = element;
}
for(int i = size - 1; i >= pos; i--) {
data[i+1] = data[i];
}
data[pos] = element;
size++;
}
//查找是否包含某个元素
public boolean contains(int tofind) {
return search(tofind)!= -1;
}
//查找某个元素的位置
public int search(int tofind){
for(int i = 0;i < size; i++){
if(data[i] == tofind){
return i;
}
}
return -1;
}
//获取某个位置的元素
public int getPos(int pos){
return data[pos];
}
//给pos位置的元素设为value
public void setPos(int pos, int value) {
data[pos] = value;
}
//删除第一次出现的关键字key
public void remove(int toRemove) {
if(search(toRemove)==-1){
return;
}
for(int i = search(toRemove); i<size - 1; i++){
data[i] = data[i+1];
}
size--;
}
//获取顺序表长度
public int size(){
return size;
}
//清空顺序表
public void clear(){
size = 0;
}
// 扩容顺序表
protected void expendCapacity(){
int[] newdata = new int [data.length*2];
for(int i = 0; i < size; i++) {
newdata[i] = data[i];
}
data = newdata;
}
}
调用方法:
package List;
public class runSeqList {
public static void main(String[] args) {
SeqList seqList = new SeqList();
seqList.add(0,1);
seqList.add(1,2);
seqList.add(2,3);
seqList.add(3,4);
seqList.add(1,10);
seqList.display();
System.out.println(seqList.contains(10));
System.out.println(seqList.search(10));
seqList.remove(2);
seqList.display();
}
}
个人对顺序表的理解,首先顺序表就是对一个数组的操作,增、删、改、查。其中对于查找以及修改相对容易操作,查找时间复杂度为O(1),其他操作时间复杂度为O(N)。
与君共勉!