數組模擬鏈表

主要的好處是靜態的,所以不須要每一次都動態的new,因此在作算法題的時候可以節省時間!數組

數組模擬單鏈表

利用兩個數組模擬,一個數組存儲val值,另外一個數組存儲其下一個節點的index,存val數組的index值對應在next數組中code

代碼以下

int e[N], ne[N];
int head, idx;

void init(){
    head = -1;//開始爲空,-1表明空集
    idx = 1;
}

//將數據加入到頭部,就像頭插法同樣
void add_to_head(int x){
    e[idx] = x;
    ne[idx] = head;
    head = idx;
    idx++;
}

//刪除下標爲k的點
void del(int k){
    ne[k] = ne[ne[k]];
}

void insert(int k, int x){
    e[idx] = x;
    ne[idx] = ne[k];
    ne[k] = idx;
    idx++;
}

數組模擬雙向鏈表

咱們假定鏈表位於index0和1之間
物理地址是在index 0, 1以後,可是邏輯地址是在index 0, 1之間(就是index全在0, 1之間)索引

代碼以下

int e[N], l[N], r[N], idx;

void init(){
    //初始化,使得0, 1位置爲兩個端點
    idx = 2;
    r[0] = 1;//開始
    l[1] = 0;//結束
}

//index爲k的右邊插入
void add(int k, int x){
    e[idx] = x;
    l[idx] = k;
    r[idx] = r[k];
    l[r[k]] = idx;
    r[k] = idx;
    idx++;
}

void remove(int k){
    r[l[k]] = r[k];
    l[r[k]] = l[k];
}

數組模擬鏈表理解:實際的索引值在另外數組中對應索引處存放指向的元素位置的索引rem

相關文章
相關標籤/搜索