链表和双链表(AcWing 826.827)
标签:需要 lse ace -- c++ 画图 namespace 数组 sync
今天我们讲的双链表和单链表是用数组的形式进行的。
也就是用邻接表的形式完成的。
#includeusing namespace std;
const int N =100010;
char cp;
int x,k;
int idx,head;
int a[N],Next[N];
void init()
{
idx=0;
head=-1;
}
void add_head(int x)
{
a[idx]=x;
Next[idx]=head;
head=idx;
idx++;
}
void shanchu(int k)
{
if(k==0){head=Next[head];}
else
Next[k-1]=Next[Next[k-1]];
}
void charu(int k,int x)
{
Next[idx]=Next[k-1];
Next[k-1]=idx;
a[idx]=x;
idx++;
}
int main()
{
init();
int m;
cin.tie(0);//优化速度,解除cin,cout捆绑
ios::sync_with_stdio(false);//优化速度2,解除cin,scanf捆绑
cin>>m;
while(m--)
{
cin>>cp;
if(cp==‘H‘)
{
cin>>x;
add_head(x);
}
if(cp==‘D‘)
{
cin>>k;
shanchu(k);
}
if(cp==‘I‘)
{
cin>>k>>x;
charu(k,x);
}
}
while(head!=-1)
{
cout‘ ‘;
head=Next[head];
}
return 0;
}
//双链表其实理解起来更加复杂,但用起来却更加方便,我们需要额外定义两个数组,和两个指针来索引我们的链表。一般情况下我们定义头节点等于0,尾节点为1.
#include //刚开始学的时候都非常难理解,但是你懂了还是贼**舒服好吧,建议多画图!容易加深亲们的理解噢~~
#include
using namespace std;
const int N = 100010;
int a[N] , l[N], r[N];
int adx;
//在k的右边加上一个x
void add_to(int k,int x)
{
a[adx]=x;
l[adx]=k;
r[adx]=r[k];
l[r[k]]=adx;
r[k]=adx++;
}
void shanchu(int k)
{
r[l[k]]=r[k];
l[r[k]]=l[k];
}
int main()
{
r[0]=1;
l[1]=0;
adx=2; //因为数组中已有两个元素,所以adx从2开始。0
int n;
cin>>n;
while(n--)
{
string cp;
cin>>cp;
int k,x;
if(cp=="L")
{
cin>>x;
add_to(0,x);
}
else if(cp=="R")
{
cin>>x;
add_to(l[1],x);
}
else if(cp=="D")
{
cin>>k;
shanchu(k+1);
}
else if(cp=="IL")
{
cin>>k>>x;
add_to(l[k+1],x);
}
else{
int k,x;
cin>>k>>x;
add_to(k+1,x);
}
}
for(int i=r[0];i!=1;i=r[i])
cout" ";
return 0;
}
链表和双链表(AcWing 826.827)
标签:需要 lse ace -- c++ 画图 namespace 数组 sync
原文地址:https://www.cnblogs.com/zyz010206/p/12369946.html
评论