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

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

<시간/>

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

이것은 목록 헤드를 사용하여 해시 테이블 체인을 구현하는 C++ 프로그램입니다.

알고리즘

삽입용:

Begin Declare function Insert(int k, int v) int hash_v =HashFunc(k) if (ht[hash_v] ==NULL) ht[hash_v] =new ListHead(k, v) else ListHead *en =ht[ hash_v] while (en->n !=NULL) en =en->n if (en->k ==k) en->v =v else en->n=new ListHead(k, v)End. 

Seach 키 값:

Decla 시작 함수 SearchKey(int k) int hash_v =HashFunc(k) if (ht[hash_v] ==NULL) return -1 else ListHead *en =ht[hash_v] while (en !=NULL and en-> k !=k) en=en->n if (en==NULL) return -1 else return en->vEnd

삭제:

Begin Declare Function Remove(int k) int hash_v =HashFunc(k) if (ht[hash_v] !=NULL) ListHead *en =ht[hash_v]; 목록 헤드 *p=NULL; while (en->n !=NULL 및 en->k !=k) p =en en =en->n if (en->k==k) if (p ==NULL) ListHead *n=en->n 삭제 en; ht[hash_v] =n else ListHead *n=en->n delete en p->n =nEnd.


예시 코드

#include 네임스페이스 사용 std;const int T_S =20;class ListHead { public:int k, v; 목록 헤드 *n; ListHead(int k, int v) { this->k =k; 이것->v =v; 이것->n =NULL; }};클래스 HashMapTable { 비공개:ListHead **ht; 공개:HashMapTable() { ht =새로운 ListHead*[T_S]; for (int i =0; i n !=NULL) en =en->n; if (en->k ==k) en->v =v; 그렇지 않으면 en->n=새로운 ListHead(k, v); } } int 검색 키(int k) { int hash_v =HashFunc(k); if (ht[hash_v] ==NULL) return -1; else { ListHead *en =ht[hash_v]; 동안 (en !=NULL &&en->k !=k) en=en->n; if (en ==NULL) 반환 -1; 그렇지 않으면 en->v를 반환합니다. } } 무효 제거(int k) { int hash_v =HashFunc(k); if (ht[hash_v] !=NULL) { ListHead *en =ht[hash_v]; 목록 헤드 *p =NULL; 동안 (en->n !=NULL &&en->k !=k) { p =en; 엔 =엔->n; } if (en->k ==k) { if (p ==NULL) { ListHead *n=en->n; 삭제 ko; ht[해시_v] =n; } else { ListHead *n =en->n; 삭제 ko; p->n =n; } } } } ~HashMapTable() { 삭제[] ht; } }};int main() { HashMapTable 해시; 정수 k, v; 정수 c; while(1) { cout<<"1.테이블에 요소 삽입"<>c; switch(c) { case 1:cout<<"삽입할 요소를 입력하세요:"; 신>>v; cout<<"삽입할 요소를 입력하십시오:"; cin>>k; 해시.삽입(k, v); 부서지다; case 2:cout<<"검색할 요소의 키를 입력하세요:"; cin>>k; if (hash.SearchKey(k) ==-1) cout<<"키에 요소가 없습니다. "<>k; if (hash.SearchKey(k) ==-1) cout<<"키 "< 



출력

1.테이블에 요소 삽입2.키에서 요소 검색3.키에서 요소 삭제4.종료선택:1삽입할 요소 입력:1삽입할 요소에 키 입력:21.테이블에 요소 삽입2. 키에서 요소 검색3. 키에서 요소 삭제4. 나가기 선택 항목을 입력하십시오. 1삽입할 요소를 입력하십시오:10삽입할 요소를 입력하십시오:11.테이블에 요소를 삽입하십시오.2.키에서 요소를 검색하십시오.3.키에서 요소를 삭제하십시오.4 .Exit선택 사항을 입력하십시오:1삽입할 요소를 입력하십시오:7삽입할 요소에 키를 입력하십시오:61.테이블에 요소를 삽입하십시오2.키에서 요소를 검색하십시오.3.키에서 요소를 삭제하십시오. 12요소를 삽입할 위치에 키를 입력하십시오. 키의 요소4.Exit선택 사항을 입력하십시오. 1Enter 삽입할 요소:30삽입할 요소의 키 입력:51.테이블에 요소 삽입2.키에서 요소 검색3.키에서 요소 삭제4.종료 선택 항목을 입력:2검색할 요소의 키를 입력:6키의 요소 6:71.테이블에 요소 삽입2.키에서 요소 검색3.키에서 요소 삭제4.종료 선택:3삭제할 요소의 키를 입력하십시오. 1삭제할 요소의 키를 입력하세요. 키에서 요소 삭제4.Exit선택 항목을 입력하십시오. 2검색할 요소의 키를 입력하십시오. /사전>