链表

119 阅读2分钟

链表定义

链式存储结构的表称为链表,传统的指针链表可以快速的执行插入和删除根据,但是不能根据数组下标访问元素。本篇文章使用数组模拟链表可以快速执行增删改查操作,包括单链表和双链表

单链表

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];//设置将后一个节点指向前一个节点
}