Untitled
unknown
plain_text
a year ago
2.0 kB
6
Indexable
#include<iostream>
using namespace std;
struct node{
int data;
node* next;
};
node pool[30005];
node* head;
int poolCnt;
node* getNode(int val){
node* newNode=&pool[poolCnt++];
newNode->data = val;
newNode->next = 0;
return newNode;
}
void init(){
poolCnt=0;
head=0;
}
int len(){
int dem=0; node* temp=head;
while(temp!=NULL){
dem++;
temp=temp->next;
}
return dem;
}
void putToHead(int val){
node* newNode=getNode(val);
newNode->next = head;
head = newNode;
}
void removeHead(){
if(head==0) return;
head=head->next;
}
void insertAt(int pos, int val){
node* insertNode=getNode(val);
if(pos==0 || head==NULL) {
putToHead(val); return;
}
node* temp=head;
for(int i=0;i<=pos-2;i++){
if(temp->next==NULL){
temp->next=insertNode;
return;
}
temp=temp->next;
}
insertNode->next=temp->next;
temp->next = insertNode;
}
void deleteAt(int pos){
if(pos==0 || head==NULL) {
removeHead(); return;
}
node* temp=head;
for(int i=0;i<=pos-2;i++){
temp=temp->next;
if(temp == NULL) return;
}
if(temp->next==NULL) return;
temp->next = temp->next->next;
}
void print(int pos){
if(len()==0) cout << "empty ";
node *temp;
temp=head;
int i=0;
while(temp!=NULL && i<pos) {
cout << temp->data << " " ;
temp = temp->next;
i++;
}
}
int t,n,x,a,b;
char cmd;
int main(){
freopen("input.txt","r",stdin);
cin >> t;
for(int tc=1;tc<=t;tc++){
cin >> n;
init();
cout << "#" << tc << " ";
for(int i=0;i<n;i++){
cin >> cmd;
switch(cmd){
case 'r':
removeHead();
break;
case 'f':
cin >> x;
putToHead(x);
break;
case 'i':
cin >> a >> b;
insertAt(a,b);
break;
case 'd':
cin >> x;
deleteAt(x);
break;
case 'p':
cin >> x;
print(x);
break;
};
}
cout << endl;
}
return 0;
}Editor is loading...
Leave a Comment