链表
总论
顾名思义,所谓链表就是一条链。
在c++中一般使用结构体来存储链表。
链表用一张图(来自《算法竞赛上册》)可以很好的理解
。
上述为链表的存储原理,通过该原理,我们可以以此类推得到链表的插入与删除的原理。
对于插入与删除,其本质就是维护存储链表中的next与pre值。
我们可以通过以下两图来知晓插入与删除的操作
删除
c++中的用法
struct Node
{
int value;//当前位置的值
int prev/*当前位置的上一位的ID*/,next/*下一个位置的ID*/;
} node[100005];
例题
P1160 队列安排
思路
由于题目所给的信息
- 2∼N 号同学依次入列,编号为
i 的同学入列方式为:老师指定编号为 i 的同学站在编号为
1∼(i−1) 中某位同学(即之前已经入列的同学)的左边或右边;
由此可以看出该题所给的数据是链状,便是用链表
AC代码
#include<bits/stdc++.h>
using namespace std;
struct Node
{
int value;
int prev,next;
} node[100005];
int c,n,m,a,b,tot,d;
int right(int p,int val)
{
node[node[p].next].prev=node[val].value ;
node[val].next=node[p].next ;
node[p].next=node[val].value ;
node[val].prev=node[p].value ;
}
int left(int p,int val)
{
node[node[p].prev].next=val;
node[val].prev=node[p