본문으로 바로가기

바다야크

  1. Home
  2. 컴퓨터/프로그래밍
  3. C언어 해시 테이블 생성 함수 hcreate()

C언어 해시 테이블 생성 함수 hcreate()

· 댓글개 · 바다야크

C함수 해시 테이블 생성 hcreate()

해시 테이블(hash table)을 생성합니다.

  • 헤더: search.h
  • 형태: int hcreate(size_t nel)
  • 인수: size_t nel 검색 테이블에 추가될 요소의 최대 개수
  • 반환: int 테이블 생성에 실패하면 0을, 정상적으로 생성했다면 0 이 아닌 값을 반환

해시 테이블(hash table)이란

단순한 구조의 데이터 테이블에서는 자료를 입력할 때에는 추가 순서에 따라서 데이터를 추가했다가 필요에 따라 정렬을 다시 하거나 모든 데이터를 비교하는 식으로 검색하게 됩니다.

그러나 해시 테이블은 자료를 테이블에 입력할 때부터 특정 조건에 따라 분류하여 추가하게 함으로써 이후 검색할 때 모든 데이터를 조회할 필요 없이 분류된 자료만 검색하면 되므로 검색이 빠릅니다.

아래는 해시 테이블 관리에 설명된 내용을 간략히 정리하여 올립니다.

C언어 hcreate() 함수 예제

#include <stdio.h>
#include <search.h>

int main( void)
{
   ENTRY    item;
   ENTRY    *result;

   hcreate( 2);

   item.key    = "1st";
   item.data   = "badayak.com";
   hsearch( item, ENTER);


   item.key    = "2nd";
   item.data   = "badayak.com";
   hsearch( item, ENTER);

   item.key    = "3rd";
   item.data   = "jwmx badayak";
   hsearch( item, ENTER);


   item.key    = "4th";
   item.data   = "Embedded Linux Programming";
   hsearch( item, ENTER);

   item.key    = "5th";
   item.data   = "GCC Compiler";
   hsearch( item, ENTER);

   // 여기서부터는 자료 찾기

   item.key    = "1st";
   if ( NULL != (result = hsearch( item, FIND)) )
      printf( "%s key data is %s\n", result->key, (char *)result->data);

   item.key    = "2nd";
   if ( NULL != (result = hsearch( item, FIND)) )
      printf( "%s key data is %s\n", result->key, (char *)result->data);

   item.key    = "3rd";
   if ( NULL != (result = hsearch( item, FIND)) )
      printf( "%s key data is %s\n", result->key, (char *)result->data);

   item.key    = "4th";
   if ( NULL != (result = hsearch( item, FIND)) )
      printf( "%s key data is %s\n", result->key, (char *)result->data);

   item.key    = "5th";
   if ( NULL != (result = hsearch( item, FIND)) )
      printf( "%s key data is %s\n", result->key, (char *)result->data);

   item.key    = "6th";
   if ( NULL != (result = hsearch( item, FIND)) )
      printf( "%s key data is %s\n", result->key, (char *)result->data);

   item.key    = "7th";
   if ( NULL != (result = hsearch( item, FIND)) )
      printf( "%s key data is %s\n", result->key, (char *)result->data);

   hdestroy();
   return 0;
}

C언어 hcreate() 함수 실행 결과

$ ./a.out
1st key data is jwmx.tistory.com
2nd key data is badayak.com
3rd key data is jwmx badayak
]$
SNS 공유하기
💬 댓글 개
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.