C++学习笔记#22(2021.6.8)

138 阅读1分钟

静态链表

最近看了yxc大神的课,说是算法竞赛里面的链表实现都是用数组模拟链表,因为用结构体加指针的方式,会用到new这个操作,非常慢!,因此都是用数组模拟链表。

初始化静态链表(以下简称链表):idx表示当前指向的结点(节点的序号),e[idx]表示链表结点值域,ne[idx]表示链表结点指针域。

大佬的例题实在跑不通。。先搁置了,得找个调试c++的好办法

标准代码:

#include<iostream>
using namespace std;
const int N=100010;
int idx,head,n[N],ne[N];
int a;
void add_head(int x){
    n[idx]=x;
    ne[idx]=head;
    head=idx++;
}
void add(int k,int x){
    n[idx]=x;
    ne[idx]=ne[k];
    ne[k]=idx++;
}
void remove(int k){
    ne[k]=ne[ne[k]];
}

int main(){

    head=-1;idx=0;
    cin>>a;
    while(a--){
        string op;
        int k,x;
        cin>>op;
        if(op=="D")
        {

            cin>>k;
            if(!k)head=ne[head];
            remove(k-1);
        }
        else if(op=="H")
        {
            cin>>x;
            add_head(x);
        }
        else if(op=="I"){
            int k,x;
            cin>>k>>x;
            add(k-1,x);
        }
    }
    for(int i=head;i!=-1;i=ne[i])
      cout<<n[i]<<" ";
    return 0;

}

作者:wuog
链接:https://www.acwing.com/solution/content/3472/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。