C 언어 데이터 구조 해시 표 에 대한 작업 (삽입 (생 성), 찾기)

/ * 해시 표 (산 목록) 만 들 기 (삽입 (생 성), 찾기) * 해시 표 데 이 터 를 초기 화하 여 모든 위치 에 요소 가 존재 하 는 지 판단 할 수 있 도록 * 데이터 삽입 (해시 함 수 를 이용 하여 위 치 를 먼저 확인 하고 위 에 요소 가 존재 하면 위 치 를 계속 계산 합 니 다) * 찾 은 사상 과 삽 입 된 유사 성(위치 에 따라 검색 에 실패 한 판단 조건 이 다 릅 니 다) * 검색 요소 가 데이터 의 양 끝 에서 검색 에 실패 한 조건 (hashtable - > elem [hashaddress] 는 NULLKEY 와 같 습 니 다) * 검색 요소 가 데이터 필드 의 중간 영역 에 있 는 검색 에 실패 한 조건 은 hashaddress 는 Hash fun (data) * 해시 표 의 해시 함 수 는 data% m (m 의 값 은 소수 여야 합 니 다) 입 니 다.* 해시 함 수 를 이용 하여 계 산 된 삽입 요소 의 위치 에 요소 가 있 을 때
  • % m 를 이용 하여 얻 은 위치 가 빈 위치 가 될 때 까지 (+ hashaddress)% m 를 이용 하여 이 위치 에 삽입 합 니 다. * 요 소 를 찾 을 때 hash 함수 의 값 을 먼저 계산 합 니 다. 찾 을 요소 가 아 닐 때 계속 이용 합 니 다. * (+ hashaddress)% m 계산 위치 * /
  • */
    #include
    #include
    #define HASHSIZE 7  //                (   )
    #define NULLKEY -32768//        
    #define OK 1
    #define ERROR 0
    typedef int  Statu;//        
    typedef struct hashtable
    {
        int *elem;//       (       )
        int count;//            
    }HashTable;//       
    void test();//    
    void insert_hashtable(HashTable**hashtable,int data);//           (    )
    Statu search_hashtable(HashTable*hashtable,int data);//             
    void Display_hashtable(HashTable*hashtable);//        
    void Init(HashTable**hashtable);//         
    int Hash_fun(int data);//     
    void main()
    {
        test();//    
    
    }
    int Hash_fun(int data)//     
    {
        return (data%HASHSIZE);//  hash           
    
    }
    
    void Init(HashTable**hashtable)//         
    {
        int m=HASHSIZE;
        int i;
        (*hashtable)->elem=(int *)malloc(sizeof(int )*m);//        
        (*hashtable)->count=m;//           
        for(i=0;ielem[i]=NULLKEY;//             
    
        }
    }
    void insert_hashtable(HashTable**hashtable,int data)
    {
        int hashaddress;//       
        hashaddress=Hash_fun(data);
          while((*hashtable)->elem[hashaddress]!=NULLKEY)
          {
              hashaddress=(++hashaddress)%HASHSIZE;
        }
             (*hashtable)->elem[hashaddress]=data;//       
    }
    Statu search_hashtable(HashTable*hashtable,int data)
    {
        int hashaddress=Hash_fun(data);
      while(hashtable->elem[hashaddress]!=data)
      {
          hashaddress=(++hashaddress)%HASHSIZE;
            if(hashtable->elem[hashaddress]==NULLKEY||hashaddress==Hash_fun(data))
                return -1;//      
                //hashaddress==Hash_fun(data)                
                //                                   
                //hashtable->elem[hashaddress]==NULLKEY                   
                 //                            
    }
      return hashaddress;//         
    }
    void Display_hashtable(HashTable*hashtable)
    {
        //           
        int i;
        for(i=0;icount;i++)
        {
            printf("%d\t",hashtable->elem[i]);
        }
    }
    void test()//    
    {
        HashTable*hashtable;
        int i;
        int data;//      
        hashtable=(HashTable*)malloc(sizeof(HashTable));//                 
         Init(&hashtable);//          
         int hash_array[HASHSIZE];
         printf("         :
    "); for(i=0;i

    좋은 웹페이지 즐겨찾기