链表
链表
特性
通过每个结点记录之后或之前结点的值,那么就可以知道所有结点的排列顺序。
插入
如果要在链表中插入一个元素。
那么就可以将前面的元素的后缀(指的是之后结点的值)改成插入的元素,
插入元素的后缀顶上前面元素的后缀。
void insret(int x,int y){
nxet[y]=next[x];
next[x]=y;
}
删除
如果要在链表中删除一个元素。
那么可以在将删除元素的后缀继承为其前面元素的后缀。
void remove(int x){
next[x]=next[next[x]];
}
类别
- 单链表:每个结点记录自己的后继。
- 双链表:每个结点记录自己的前驱和后继。
- 循环单链表:将末尾结点的后继为第一个结点。
- 循环双链表:第一个的前驱为最后的结点,最后一个的后继为第一个结点
- 块状链表:特殊链表,将若干元素压缩成一块,将这些块串联起来。
- 跳表:每个结点拥有自己的右指针和下指针,通过分层的方式加快查询,而每个元素的层数由概率决定。相当于平衡树。