01數據結構_順序表【大綱】

順序表

本文 主要爲部分內容複習展示
【詳細內容】https://blog.csdn.net/qq_36390039/article/details/89057500
這裏我們使用數組模擬實現順序表以及各項功能

public interface ISequence { 
//在pos位置插入val 
boolean add(int pos,Object data); 
//查找關鍵字key 找到返回key的下標,沒有返回null; 
int search(Object key); 
//查找是否包含關鍵字key是否在順序表當中(這個和search有點衝突) 
boolean contains(Object key); 
//得到pos位置的值 
Object getPos(int pos); 
//刪除第一次出現的關鍵字key 
Object remove(Object key); 
//得到順序表的長度 
int size(); 
//打印順序表 
void display(); 
//清空順序表以防內存泄漏 
void clear(); 
}

(1)順序表初始化

1.通過Object數組存放數據內容
2.定義可變化存放數據大小userSize
3.構造器初始化順序表

private Object[] elem;   
private int userSize;
public static final int DEFAULT_LENGTH = 10;

public SequenceImpl(){
    this.elem = new Object[DEFAULT_LENGTH];
    this.userSize = 0;
}

(2)數據增加

public boolean isFull(){
    return this.userSize==this.elem.length;
}
@Override
public boolean add(int pos, Object data) {
    if(pos<0||pos>this.userSize){
        return false;
    }
   if(isFull()){
       //數組擴容
       this.elem = 
               Arrays.copyOf(this.elem,this.elem.length*2);
   }
   int key = this.userSize-1;
   for(int i=key;i>=pos;i--){
       this.elem[i+1] = this.elem[i];
   }
   //放入數據
    this.elem[pos] = data;
   this.userSize++;
   return true;
}

1.對pos取值範圍進行判斷
2.數組大小是否需要擴容
3.對數據進行挪移
4.放入數據

(3)數據的查詢

1.查詢數據是否存在返回int

private boolean isEmpty(){
    return this.userSize==0;
}
@Override
public int search(Object key) {
    if(key==null){
        throw new UnsupportedOperationException("不可傳入null");
    }
    if(isEmpty()){
        return -1;
    }
    for(int i=0;i<this.userSize;i++){
        if(this.elem[i].equals(key)){
            return 1;
        }
    }
    return -1;
}

2.查詢數據是否存在返回boolean

@Override
public boolean contains(Object key) {
    if(key==null){
        throw new UnsupportedOperationException("不可傳入null");
    }
    if(isEmpty()){
        return false;
    }
    for(int i=0;i<this.userSize;i++){
        if(this.elem[i].equals(key)){
            return true;
        }
    }
    return false;
}

遍歷對比每一個值 進行查找
3.根據下標獲取數據

@Override
public Object getPos(int pos) {
    if(pos<0||pos>=this.userSize){
        return null;
    }
    return this.elem[pos-1];
}

(4)數據刪除

1.刪除單個數據返回數據

@Override
public Object remove(Object key) {
    int index =search(key);
    if(index==-1){
        return false;
    }
    Object originalData = this.elem[index];
    int i = 0;
    for(i=index;i<this.userSize-1;i++){
        this.elem[i] = this.elem[i+1];
    }
    this.elem[i+1] = null;
    this.userSize--;
    return originalData;
}

2.清空數組

@Override
public void clear() {
    for(int i=0;i<this.userSize;i++){
        this.elem[i] = null;
    }
    this.userSize = 0;
}
@Override
public void clear() {
    for(int i=0;i<this.userSize;i++){
        this.elem[i] = null;
    }
    this.userSize = 0;
}

(5)計算大小與打印

@Override
public int size() {
    return this.userSize;
}

@Override
public void display() {
    for(int i=0;i<this.userSize;i++){
        System.out.print(this.elem[i]+" ");
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章