해시 작업 의 기본 루틴 (1)
#define Num 100
#define MinTableSize 5
typedef struct Hashtbl *HashTable;
typedef struct ListNode * List;
struct ListNode
{
int Element;
List Next;
};
struct Hashtbl
{
int TableSize;
List* TheLists;
};
(2) 시계 초기 화 에 주의 하 십시오. 주요 구 조 는 포인터 배열 입 니 다. 모든 지침 은 야생 지침 이 므 로 모든 지침 에 해당 하 는 메모리 공간 을 지정 해 야 합 니 다.
HashTable Initialize(int TableSize)
{
HashTable H ;
if (TableSize < MinTableSize)
{
puts("the tablesize is too small");
return NULL;
}
H = (HashTable)malloc(sizeof(Hashtbl));
H->TableSize = TableSize;
H->TheLists = (List*)malloc(sizeof(List)*TableSize);
for(int i = 0;i<=TableSize-1;i++)
{
H->TheLists[i] = (List)malloc(sizeof(ListNode));
if(H->TheLists[i] == NULL)
{
puts("out of space");
return NULL;
}
else
H->TheLists[i]->Next=NULL;
}
return H;
}
(3) 가장 간단 한 hash 값 함수: 나머지 를 취하 고 기본 적 인 검색 방식 을 사용 합 니 다. hash 값 에 대응 하 는 요 소 는 찾 으 려 는 요소 가 아니 라 찾 을 때 까지 앞으로 옮 겨 다 닙 니 다.
int Hash(int key,int TableSize)
{
return key%TableSize;
}
List Find(int key,HashTable H)
{
List P;
P = H->TheLists[Hash(key,H->TableSize)];
P = P->Next;//
while(P!=NULL&&P->Element!=key)
P = P->Next;
return P;
}
(4) 삽입 루틴: Find 를 이용 하여 사용 가능 한 공간 을 찾 습 니 다.
void Insert(int key,HashTable H)
{
List L, P,NewCell;
P = Find(key,H);
if(P==NULL)
{
NewCell = (List)malloc(sizeof(ListNode));
L = H->TheLists[Hash(key,H->TableSize)];
NewCell->Next = L->Next;
L->Next = NewCell;
NewCell->Element = key;
}
}
(5) 삭제 루틴
void Delete(int key,HashTable H)
{
List P,L,temp;
P = Find(key,H);
if(P!=NULL)
{
L = H->TheLists[Hash(key,H->TableSize)];
// P temp
temp = L;
while(temp->Next!=P)
temp = temp->Next;
temp->Next = P->Next;
free(P);
}
}
(6) 전체 hash 표 인쇄
void PrintHashTable(HashTable H)
{
List P;
for(int i = 0;i<= H->TableSize-1;i++)
{
P = H->TheLists[i];
P = P->Next;
while(P!=NULL)
{
printf("%d: ",P->Element);
P = P->Next;
}
putchar('
');
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.