Untitled

 avatar
unknown
plain_text
2 years ago
2.6 kB
7
Indexable
#include <iostream>
using namespace std;
int N;
//struct Node{
//  int data;
//  Node* next;
//  Node* prev;
//};
//struct List{
//  Node *head,*tail;
//  List(){
//      head=tail=nullptr;
//  }
//  Node* CreatNode(int val){
//      Node* ret = new Node();
//      ret->next=ret->prev=nullptr;
//      ret->data= val;
//      return ret;
//  }
//  void pushAtfront(int val){
//      Node* newNode = CreatNode(val);
//      if(head==nullptr){
//          head= newNode;
//          tail= newNode;
//          return;
//      }
//      head->prev= newNode;
//      newNode->next= head;
//      head= newNode;
//  }
//  void pushAtback(int val){
//      Node* newNode = CreatNode(val);
//      if(head==nullptr){
//          head= newNode;
//          tail= newNode;
//          return;
//      }
//      tail->next= newNode;
//      newNode->prev = tail;
//      tail= newNode;
//  }
//
//};
struct Node{
    int data,next;
};
Node pool[30001];
int usedIndex=0;
void Print(int cnt){
    int p=0;
    for(int i=0;i<cnt;i++){
        p= pool[p].next;
        if(p==-1) break;
        cout<<" "<<pool[p].data;
    }
     
}
void InsertATindex(int index,int val){
    int p=0;
    for(int i=0;i<index;i++){
        if(pool[p].next==-1) break;
        p= pool[p].next;
    }
    ++usedIndex;
    pool[usedIndex].next=-1;
    pool[usedIndex].data=val;
 
    pool[usedIndex].next= pool[p].next;
    pool[p].next= usedIndex;
}
void removeFromIndex(int index){
    int p=0;
    for(int i=0;i<index;i++){
        if(pool[p].next==-1) return;
        p= pool[p].next;
    }
    if(pool[p].next!=-1){
        pool[p].next= pool[pool[p].next].next;
    }
}
 
int main(){
//  freopen("input.txt","r",stdin);
    int Testcase;
    cin>>Testcase;
    for(int tc=1;tc<=Testcase;tc++){
        cin>>N;
        char CMD;
        int a,b;
        usedIndex=0;
        pool[0].next=-1;
        cout<<"#"<<tc;
        for(int i=0;i<N;i++){
            cin>>CMD;
            if(CMD=='f'){
                cin>>a;
                InsertATindex(0,a);
            }else if(CMD== 'i'){
                cin>>a>>b;
                InsertATindex(a,b);
            }else if(CMD=='r'){
                removeFromIndex(0);
            }else if(CMD=='d'){
                cin>>a;
                removeFromIndex(a);
            }else{
                cin>>a;
                if(pool[0].next==-1){
                    cout<<" empty";
                }else Print(a);
            }
        }
        cout<<endl;
    }
    return 0;
}
Editor is loading...