1. 程式人生 > 實用技巧 >靜態連結串列

靜態連結串列

靜態連結串列

#include<iostream>
using namespace std;
const int N  = 1e5+10;
int ne[N];  //存放當前節點下標的下一個位置的下標
int e[N];   //存放每個節點的資料
int idx;    //儲存當前已經用到了那個節點
int head;   //表示頭結點的下標
void Init()
{
    head = -1;
    idx = 0;
    
}
void add_to_head(int x)
{
    e[idx] = x;
    ne[idx] = head;
    head = idx ++;
    //idx++;
}
//插入到第k個節點後邊
void add(int k,int x)
{
    e[idx] = x;
    ne[idx] = ne[k];
    ne[k] = idx ++;
    //idx++;
}
//刪除第k各節點的下一個節點
void remove(int k)
{
    ne[k] = ne[ne[k]];
}
int main(void)
{
    int m;
    cin>>m;
    Init();
    while(m--){
        char op[2];
        cin>>op;
        int k,x;
        if(op[0] =='H'){
            
            cin>>x;
            add_to_head(x);
            
        }
        else if(op[0] =='D'){
            
            cin>>k;
            if(!k) head = ne[head];
            else remove(k-1);
        }else{
            
            cin>>k>>x;
            add(k-1,x);
            
        }
        
    }
    
        for(int i= head;i!=-1;i=ne[i]) cout<<e[i]<<' ';
        cout<<endl;
    return 0;
}