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;
	}