数据结构-链表

链表一般分为两种:1)单链表  2)双链表,二者是及其相似的,但双链表有两个指针

数据结构-链表

1.单链表:

//数组模拟链表(快)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#define ll long long
const int N=1e6+10;
using namespace std;
typedef pair<int,int>PII;
//head 表示头节点的下标
//e[i] 表示结点的value
//ne[i] 表示节点i的next指针是多少
//idx 存储当前的已经用到了哪个点 
int head,e[N],ne[N],idx;

//初始化
void init(){
   head=-1;
   idx=0;
}

//将x插到头节点
void add_to_head(int x){
  e[idx]=x;    //3
  ne[idx]=head; //1
  head=idx;    //2
  idx++;       //4
}

//将x插到下标是k的点的后面
void add(int k,int x){
     e[idx]=x;    
     ne[idx]=ne[k];
     ne[k]=idx;
     idx++;
}

//将下标是k的后面的点删去
void remove(int k){
  ne[k]=ne[ne[k]];
}
int main(){
 ios::sync_with_stdio(false);
 
  return 0;
}

2.双链表

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#define ll long long
const int N=1e6+10;
using namespace std;
typedef pair<int,int>PII;
int m;
int e[N],l[N],r[N],idx;

//初始化
void init(){
// 0表示左端点,1表示右端点
 r[0]=1,l[1]=0;
 idx=2;
}

//在下标是k的点的右边,插入x
void add(int k,int x){
  e[idx]=x;
  r[idx]=r[k];
  l[idx]=k;
  l[r[k]]=idx;
  r[k]=idx;
}

//删除第k个点
void remove(int k){
  r[l[k]]=r[k];
  l[r[k]]=l[k];
}
int main(){
 ios::sync_with_stdio(false);
  return 0;
}