=== 규모 === 목표 : 스펙 기본 사항 만족 === 키 순차 화일, 확장 해쉬 파일 === 1. 화일 생성 * 레코드 입력 * 레코드 검색 * 임의 레코드 검색 ( 레코드 검색시 소요시간 측정) * 임의 레코드 삽입 ( 레코드 삽입 시간 측정 ) * 임의 레코드 삭제 * 편리한 사용자 인터페이스 === 자료구조 === === 키 순차 화일 === 1. 페이지 구조 * 페이지 정보를 갖는 페이지 헤더 * 페이지 ID * 저장된 레코드에 대한 레코드 정의 필드(레코드 개수 등) * 추가 삽입을 위한 자유공간 * 실제 데이타 정보(레코드 또는 버켓)를 저장하는 사용자 공간 * 레코드 정의 필드 === 확장 해쉬 파일 === 1. 버켓 크기 : 8 2. 디렉토리 구조 * 초기 디렉토리 헤더값 : 8 * 인덱스와 리프를 가리키는 포인터로 구성 {{{~cpp // 둘중 택일해야 할 상호아 struct Data{ char column1[]; char column2[]; char column3[]; } struct Record{ int key; // field1 Data* data; // field2 } struct Record{ int key; char* field1; char* field2; char* field3; } }}} === API 설계 === * parameter 기술 === (확장)해쉬함수 관리 === * pseudo code 작성 {{{~cpp typedef struct { int preBits = 3 // header; unsigned int leafs[8] // pointer; }DIRECTORY; typedef struct{ unsigned int pseudokey // header; unsigned int numOfBucket; unsigned int bucket[]; }LEAF; FILE create_h(char* fileName); // 새로운 해쉬 구조 생성 void open_h(FILE fileHandle, unsigned int psedoKey); // 기존 해쉬 구조 열기 void close_h(FILE f); // 해쉬 구조 닫기 void insert_h(); // 해쉬 값 넣기 void retrieve_h(FILE f, unsigned int pseudoKey); // 검색하기 void delete_h(); // 해쉬지우기 /* pseudo code */ File f = create_h("Test"); FILE f = open_h("fileName.dot", pseudoKey ); unsigned realKey = 10; char* data = "ThisIsATest"; unsigned int pseudoKey = hash_func_h(realKey); insert( f, pseudoKey, data ); char* pRetrieved_data = retrieve_h(f, pseudoKey ); prinf("%s", pRetrieved_data ); free(data); close_h(f); }}} 정말 감을;; --["neocoin"] ---- ["ProjectGaia"]