Page 455 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 455

21  {
                         22    n->data = *x;       /* 데이터 */
                         23    n->stat = stat;    /* 요소의 상태 */
                         24  }
                         25
                         26  /*--- 해시 테이블 초기화 ---*/
                         27  int Initialize(ClosedHash *h, int size)
                         28  {
                         29    int i;
                         30    if((h->table = calloc(size, sizeof(Bucket))) == NULL) {
                         31      h->size = 0;
                         32      return 0;
                         33    }
                         34    h->size = size;
                         35    for(i = 0; i < size; i++)       /* 모든 버킷을 */
                         36      h->table[i].stat = Empty;     /* 공백으로 만듭니다.*/
                         37    return 1;
                         38  }
                         39
                         40  /*--- 검색 ---*/
                         41  Bucket *Search(const ClosedHash *h, const Member *x)
                         42  {
                         43    int i;
                         44    int key = hash(x->no, h->size);       /* 검색할 데이터의 해시 값 */
                         45    Bucket *p = &h->table[key];          /* 현재 선택한 노드 */
                         46    for(i = 0; p->stat != Empty && i < h->size; i++) {
                         47      if(p->stat == Occupied && p->data.no == x->no)
                         48        return p;
                         49      key = rehash(key, h->size);        /* 재해시 */
                         50      p = &h->table[key];
                         51    }
                         52    return NULL;
                         53  }
                         54
                         55  /*--- 데이터 추가 ---*/
                         56  int Add(ClosedHash *h, const Member *x)
                         57  {
                         58    int i;
                         59    int key = hash(x->no, h->size);      /* 추가할   데이터의 해시 값 */
                         60    Bucket *p = &h->table[key];        /* 현재 선택한 노드 */
                         61




                                                                                          11•해시  455
   450   451   452   453   454   455   456   457   458   459   460