Untitled
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...