C++
0924 해쉬구현중 (with linkedlist)
리하이
2022. 9. 24. 18:30
#include <stdio.h>
struct Data {
int a1, a2, a3;
Data(){}//constructor
Data(int a1, int a2, int a3) : a1(a1), a2(a2), a3(a3){}
bool operator ==(const Data &A)const {
return a1 == A.a1 && a2 == A.a2 && a3 == A.a3;
}
bool operator !=(const Data &A)const {
return a1 != A.a1 || a2 != A.a2 || a3 != A.a3;
}
};//data
class hash_table {
public:
const static int SIZE = 10000;
struct NODE {//linked list
Data value;
NODE* next;
NODE(){}
NODE(Data value, NODE* next):value(value), next(next){}
};
NODE* table[SIZE];
hash_table() {
for (int i = 0; i < SIZE; i++) {
table[i] = NULL;
};
};
int hash(Data& A) {
return (A.a1 + A.a2 + A.a3) % SIZE;
};
void insert(Data key) {
int index = hash(key);
table[index] = new NODE(key, table[index]);
};
void remove(Data key) {
int index = hash(key);
NODE* prev = NULL, * it = table[index];
while (it != NULL && it->value != key) {
prev = it;
it = it->next;
}
if (it == NULL) return;
if (prev == NULL) {
table[index] = table[index]->next;
}
else {
prev->next = it->next;
}
}
bool search(Data key) {
int index = hash(key);
NODE* it = table[index];
while (it != NULL) {
if (it->value == key) return true;
it = it->next;
}
return false;
}
};
C 문법 정리
1. 생성자 오버로딩 & 변수선언
struct Data {
int a1, a2, a3;
Data(){}//constructor
Data(int a1, int a2, int a3) : a1(a1), a2(a2), a3(a3){}}
2. struct operator
operator '!=' 를 정의하는 것임.
bool operator !=(const Data &A)const {
return a1 != A.a1 || a2 != A.a2 || a3 != A.a3;
}
3. reference parameter
operator 의 parameter로서 Data & (레퍼런스)를 받았음.
reference 변수의 특징
:
const reference
:
(https://luv-n-interest.tistory.com/1179 참고중..)
bool operator ==(const Data &A)const {
return a1 == A.a1 && a2 == A.a2 && a3 == A.a3;
}