[해시테이블-구현] C++ 구현...
그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
#include <iostream> #include <string> using namespace std; // 이중 연결 리스트의 노드 정의 class Node { public: int playerNumber; string playerName; Node* prev; Node* next; Node(int num, const string name) : playerNumber(num), playerName(name), prev(nullptr), next(nullptr) {} }; // 해시 테이블 클래스 정의 class HashTable { private: static const int TABLE_SIZE = 10; // 해시 테이블 크기 Node** table; // 해시 테이블 배열 public: HashTable() { table = new Node * [TABLE_SIZE]; for (int i = 0; i < TABLE_SIZE; ++i) { table[i] = nullptr; // 초기화 } } ~HashTable() { for (int i = 0; i < TABLE_SIZE; ++i) { Node* current = table[i]; while (current) { Node* toDelete = current; current = current->next; delete toDelete; } } delete[] table; } // 삽입 함수 void set(int playerNumber, const string& playerName) { int index = playerNumber % TABLE_SIZE; Node* newNode = new Node(playerNumber, playerName); // 리스트의 맨 앞에 추가 if (table[index]) { newNode->next = table[index]; table[index]->prev = newNode; } table[index] = newNode; } // 검색 함수 string get(int playerNumber) { int index = playerNumber % TABLE_SIZE; Node* current = table[index]; while (current) { if (current->playerNumber == playerNumber) { return current->playerName; // 선수 이름 반환 } current = current->next; } return "선수를 찾을 수 없습니다."; // 선수 없음 } // 삭제 함수 void remove(int playerNumber) { int index = playerNumber % TABLE_SIZE; Node* current = table[index]; while (current) { if (current->playerNumber == playerNumber) { if (current->prev) { current->prev->next = current->next; } else { table[index] = current->next; // 첫 번째 노드 삭제 } if (current->next) { current->next->prev = current->prev; } delete current; return; } current = current->next; } } }; 복잡 스럽네요.. DoublyLinkedList를 가져와서 구현하려고 하니까. 일단.. 안되가지고. 애초애 javascript는 잘 모르겠지만... string을 넘겨주고 있는데. 만들어준 DoublyLinkedList는 호환되지 않네요..;; 일단. 방법을 좀 찾고 싶었는데.... 흠.. 너무 꼬여버려서. 뭔지 모르겠네요.. 흠.. 스터디에 끌려가서 큰일이네요. 빨리 끝내야 하는데. 하면서 하니까> #include <iostream> #include "Hash.h" using namespace std; int main() { HashTable hash; hash.set(1, "이운재"); hash.set(4, "최진철"); hash.set(20, "홍명보"); hash.set(6, "유상철"); hash.set(22, "송종국"); hash.set(21, "박지성"); hash.set(5, "김남일"); hash.set(10, "이영표"); hash.set(8, "최태욱"); hash.set(9, "설기현"); hash.set(14, "이천수"); cout << "1번 선수: " << hash.get(1) << endl; hash.remove(1); cout << "1번 선수: " << hash.get(1) << endl; cout << "21번 선수: " << hash.get(21) << endl; return 0; }
- 알고리즘
- 수업질문





