Pagini recente » Cod sursa (job #1150621) | Cod sursa (job #2134667) | Istoria paginii runda/runda1/clasament | Cod sursa (job #1715291) | Cod sursa (job #1974050)
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
struct Node{
int value;
Node *next;
Node *prev;
};
struct DLL{
Node * start;
Node * end;
};
DLL createEmptyList(){
DLL dll;
dll.start = NULL;
dll.end = NULL;
return dll;
}
DLL createList(int a[],int n){
Node* root, * inter, * prev, *end;
root = new Node;
root->prev = NULL;
root->next = NULL;
root->value = a[0];
prev = root;
for (int i=1;i<n;i++){
inter= new Node;
inter->value=a[i];
inter->prev=prev;
prev->next=inter;
inter->next=NULL;
prev=inter;
}
DLL dll;
dll.start = root;
dll.end = prev;
return dll;
}
int Lenght(DLL dll){
int l=0;
Node* root= dll.start;
while(root!=NULL){
l++;
root=root->next;
}
return l;
}
void Print(DLL dll){
Node * root = dll.start;
while (root!=NULL){
cout<<root->value<<" ";
root=root->next;
}
cout<<endl;
}
void insertAtTheEnd(DLL & dll, int x){
Node*nn=new Node;
nn->value=x;
if (dll.start==NULL) {
dll.start = nn;
dll.end = nn;
nn->prev=NULL;
nn->next=NULL;
return;
}
nn->prev = dll.end;
nn->next = NULL;
dll.end->next=nn;
dll.end = nn;
}
void removeElem(DLL & dll, int x){
Node* current = dll.start;
if (dll.start==NULL) return;
if (dll.start==dll.end && dll.start->value==x){
delete(dll.start);
dll.start=NULL;
dll.end=NULL;
return;
}
while (current!=NULL){
if (current->value==x) {
if(dll.start == current){
Node* next = current->next;
dll.start = next;
delete(current);
next->prev = NULL;
return;
} else if (dll.end == current){
Node* prev = current->prev;
dll.end = prev;
prev->next = NULL;
delete(current);
return;
}
Node* prev = current->prev;
Node* next = current->next;
delete(current);
prev->next = next;
next->prev = prev;
return;
}
current=current->next;
}
}
int search(DLL dll, int x){
Node* current = dll.start;
while (current!=NULL){
if (current->value==x) return 1;
current=current->next;
}
return 0;
}
///////////////
struct hashes{
int n = 1071;
DLL arr[1072];
};
hashes createHashes(){
hashes hs;
for(int i = 0; i <= hs.n; i++){
hs.arr[i].start = NULL;
hs.arr[i].end = NULL;
}
return hs;
}
void insertHash(hashes & hs, int x){
int mod = x % hs.n;
if(search(hs.arr[mod], x) == 0){
insertAtTheEnd(hs.arr[mod], x);
}
}
int searchHash(hashes & hs, int x){
int mod = x % hs.n;
return search(hs.arr[mod],x);
}
void removeHash(hashes &hs, int x){
int mod = x % hs.n;
removeElem(hs.arr[mod], x);
}
/////
ifstream f("hashuri.in");
ofstream g("hashuri.out");
////
int main(){
hashes hs = createHashes();
int n;
f >> n;
int opt = -1;
int x = -1;
for(int i = 0; i < n; i++){
f >> opt;
f >> x;
switch(opt){
case 1:
insertHash(hs, x);
break;
case 2:
removeHash(hs, x);
break;
case 3:
g << searchHash(hs, x) << endl;
}
}
return 0;
}