主要的好處是靜態的,所以不須要每一次都動態的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++; }
咱們假定鏈表位於
index
0和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