主要的好处是静态的,所以不须要每一次都动态的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