Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

이중 연결 목록을 사용하여 해시 테이블 연결을 구현하는 C++ 프로그램

<시간/>

해시 테이블은 키-값 쌍을 저장하는 데 사용되는 데이터 구조입니다. 해시 함수는 해시 테이블에서 요소를 삽입하거나 검색할 배열의 인덱스를 계산하는 데 사용됩니다.

이중 연결 목록으로 해시 테이블을 구현하는 C++ 프로그램입니다.

알고리즘

삽입용:

Begin Declare Function insert(int k, int v) int hash_v=HashFunc(k) HashTableEntry *en =ht[hash_v] if (en ==NULL) en =new HashTableEntry en->d =v en->k =k en->n =NULL en->p =NULL ht[hash_v] =en top[hash_v] =en else while (en !=NULL) en =en->n en =new HashTableEntry en->d =v en->k =k en->n =NULL en->p =top[hash_v] top[hash_v]->n =en top[hash_v] =enEnd

삭제:

Begin Declare function remove(int k) int hash_v =HashFunc(k) HashTableEntry *en =ht[hash_v] if (en->k !=k || en ==NULL) Print No Element found at key return while (en !=NULL) if (en->n ==NULL) if (en->p ==NULL) ht[hash_v] =NULL top[hash_v] =NULL delete en break else top[hash_v] =en-> p top[hash_v]->n =NULL 삭제 en en =top[hash_v] en =en->nEnd

키 값 검색:

Begin Declare function SearchKey(int k) int hash_v =HashFunc(k) bool flag =false HashTableEntry* en =ht[hash_v] if (en !=NULL) while (en !=NULL) if (en->k ==k) flag =true if (flag) 키에서 요소가 발견됨 print en->d en =en->n if (!flag) "키에서 요소를 찾을 수 없음"을 인쇄합니다. 종료

예시 코드

#include  const int T_S =200; 네임스페이스 사용 std;struct HashTableEntry { int d, k; 해시 테이블 항목 *n; HashTableEntry *p;};class HashMapTable { 공개:HashTableEntry **ht, **top; HashMapTable() { ht =새로운 HashTableEntry*[T_S]; 상단 =새로운 HashTableEntry*[T_S]; for (int i =0; i d =v; 엔->k =k; 엔->n =NULL; 엔->p =NULL; ht[해시_v] =엔; 상단[해시_v] =엔; } else { 동안 (en !=NULL) en =en->n; ko =새로운 HashTableEntry; 엔->d =v; 엔->k =k; 엔->n =NULL; ko->p =상단[해시_v]; 상단[hash_v]->n =엔; 상단[해시_v] =엔; }} 무효 제거(int k) { int hash_v =HashFunc(k); HashTableEntry *en =ht[hash_v]; if (en->k !=k || en ==NULL) { cout<<"키에 요소가 없습니다:"<n ==NULL) { if (en->p ==NULL) { ht[hash_v] =NULL; 상단[해시_v] =NULL; 삭제 ko; 부서지다; } else { 상단[해시_v] =en->p; 상단[해시_v]->n =NULL; 삭제 ko; ko =상단[해시_v]; } } 엔 =엔->n; }} 무효 SearchKey(int k) { int hash_v =HashFunc(k); 부울 플래그 =거짓; HashTableEntry* en =ht[hash_v]; if (en !=NULL) { while (en !=NULL) { if (en->k ==k) { 플래그 =true; } if (flag) { cout<<"키 "<d<n; } } if (!flag) cout<<"키에 요소가 없습니다. "<>c; switch(c) { case 1:cout<<"삽입할 요소를 입력하세요:"; 신>>v; cout<<"삽입할 요소를 입력하십시오:"; cin>>k; 해시.삽입(k, v); 부서지다; case 2:cout<<"검색할 요소의 키를 입력하세요:"; cin>>k; 해시.검색키(k); 부서지다; case 3:cout<<"삭제할 요소의 키를 입력하세요:"; cin>>k; 해시.제거(k); 부서지다; 사례 4:exit(1); 기본값:cout<<"\n올바른 옵션을 입력하세요\n"; } } 반환 0;}

출력

1.테이블에 요소 삽입2.키에서 요소 검색3.키에서 요소 삭제4.종료 선택:1삽입할 요소 입력:1삽입할 요소에 키 입력:11.테이블에 요소 삽입2. key3.Delete element at a key4.ExitEnter your choice:1Enter element to insert:2Enter key at which element to insert:31.Insert element into the table2.Search element from the key3.Delete element at a key4 .Exit선택 사항을 입력하십시오:1삽입할 요소를 입력하십시오:7삽입할 요소에 키를 입력하십시오:61.테이블에 요소를 삽입하십시오2.키에서 요소를 검색하십시오.3.키에서 요소를 삭제하십시오. 4삽입할 요소의 키를 입력하십시오. key3.Delete 요소에서 table2.Search 요소에 요소 삽입 키에서 엔터