链表定义
链式存储结构的表称为链表,传统的指针链表可以快速的执行插入和删除根据,但是不能根据数组下标访问元素。本篇文章使用数组模拟链表可以快速执行增删改查操作,包括单链表和双链表
单链表
int head,e[N],ne[N],idx;//单链表的声明
//Head:链表的头指针。
//e[i]:表示i节点的存的值。
//ne[i]:表示i节点所指向的下一个节点。
//Idx:表示指针游标,每使用一次需要+1。
void init()
{
head=-1;//设置为1的目的是为了找到链表的尾部
idx=0
}
void add_to_head(int x)//向链表头添加一个数
{
e[idx]=x;ne[idx]=head;head=idx++;
}
void remove(int k)//删除第k个插入的数后米娜的数
{
ne[k]=ne[ne[k]];
}
void insert(int k,int x)//在第k个插入的数后插入一个数
{
e[idx]=x; //先设置节点的值
ne[idx]=ne[k]; //再设置节点的下一个节点
ne[k]=idx++;//最后断链
}
双链表
int e[N],pe[N],ne[N],idx;//双链表的声明
//e:存储节点值
//pe:存储当前节点所指向的前一个节点
//ne:存储当前节点所指向的下一个节点
void insert(int k,int a)//在k节点之后插入一个a
{
e[idx]=a;
ne[idx]=ne[k]; //设置新节点指向后面一个节点
pe[idx]=k;//设置新节点指向前面一个节点
pe[ne[k]]=idx;//设置后面一个节点指向新节点
ne[k]=idx;//设置前面一个节点指向新节点
}
void remove(int k)
{
ne[pe[k]]=ne[k];//设置将前一个节点指向后一个节点
pe[ne[k]]=pe[k];//设置将后一个节点指向前一个节点
}