优惠券购物网站怎么做,云浮疫控动态,wordpress 4.9优化,网站上线流程图目录 单链表
初始化
头插
删除
插入
双链表
初始化
插入右和插入左
删除 单链表
单链表主要有三个接口#xff1a;头插#xff0c;删除#xff0c;插入#xff08;由于单链表的性质#xff0c;插入接口是在结点后面插入#xff09;
初始化
int e[N], ne[N]; …目录 单链表
初始化
头插
删除
插入
双链表
初始化
插入右和插入左
删除 单链表
单链表主要有三个接口头插删除插入由于单链表的性质插入接口是在结点后面插入
初始化
int e[N], ne[N]; // 不使用next[N],为和库中next分开以免命名冲突
int index, head;
void init()
{head -1;index 0;
}
e数组代表链表中每个结点的数据域ne数组代表每个结点的指针域指向下一个结点的下标。 将头结点的下标初始化为-1。index为待使用的数组下标。
头插
void add_to_head(int x)
{e[index] x;ne[index] head;head index;
}
删除
void pop(int k)
{ne[k] ne[ne[k]];
}
插入
void insert(int k, int x)
{e[index] x;ne[index] ne[k];ne[k] index;
}
双链表
初始化
int index;
int e[N], l[N], r[N];
void init()
{l[0] 1, r[1] 0;r[0] 1, l[1] 0;index 2;
}
0位置是头1位置是尾这两条性质永远不变。 待使用的数组下标从2开始0和1以及使用了。 需要遍历的时候应从2开始。 e数组存储数据域l数组存储左指针r数组存储右指针这两个数组指向的也是左边和右边的下标
插入右和插入左
void insertR(int k, int x)
{e[index] x;r[index] r[k];l[index] k;l[r[k]] index;r[k] index;
}
void insertL (int k, int x)
{e[index] x;r[index] k;l[index] l[k];r[l[k]] index;l[k] index;
}
这两个实现一个即可比如插入左可以调用插入右函数实现改变k的位置即可。
删除
void pop(int k)
{r[l[k]] r[k];l[r[k]] l[k];
}