Untitled
unknown
plain_text
2 years ago
2.6 kB
12
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...