해시 표 분리 링크 법 - 두 가지 초기 화 방법 및 대비

2843 단어 데이터 구조
교재 에는 대부분 첫 번 째 방법 이다.실제 변경 가능, h - > tablesize 회 malloc () 작업 감소
다음은 성명, 방법 1, 방법 2.
typedef int ElementType;
/* hashSep.h */
#ifndef HashSep_H
#define HashSep_H
typedef unsigned int Index;						//Hash()         
struct listnode;
typedef struct listnode *position;
typedef struct listnode *list;
struct hashta1;
typedef struct hashta1 *hashtable;

list MakeEmpty(void);
hashtable InitTable_1(int tableSize);			//           
hashtable InitTable_2(int tableSize);			//           
void DestoryTable(hashtable h);
position Find(ElementType key, hashtable h);
void Insert(ElementType key, hashtable h);
ElementType Retrieve(position p);

#endif
/* ENDING */

/* hashSep.c */
	/* The list using headers */
#include
#include
#define MinTableSize (5)
struct listnode
{
	ElementType element;
	position next;
};
struct hashta1
{
	int  tableSize;
	list *theLists;			//	       
};

hashtable InitTable_1(int tableSize)
{
	hashtable h;
	int i;

	if (tableSize < MinTableSize)
	{
		printf("Table size too small!!
"); return NULL; } /* allocate tabel */ h = malloc(sizeof(struct hashta1)); if (h == NULL) { printf("Out of space!!
"); exit(1); } h->tableSize =NextPrime(tableSize); /* allocate array of lists */ h->theLists = malloc(sizeof(list)*h->tableSize); // , headers , listnode , h->tableSize malloc if(h->theLists==NULL) { printf("Out of space!!
"); exit(1); } /* allocate list header */ for (i = 0;i < h->tableSize;++i) { h->theLists[i] = malloc(sizeof(struct listnode)); if (h->theLists[i] == NULL) { printf("Out of space!!
"); exit(1); } else h->theLists[i]->next= NULL; } return h; }
hashtable InitTable_2(int tableSize)
{
	hashtable h;
	int i;

	if (tableSize < MinTableSize)
	{
		printf("Table size too small!
"); return NULL; } /* allocate table */ h = malloc(sizeof(struct hashta1)); if (h == NULL) { printf("Out of space!!
"); exit(1); } h->tableSize = NextPrime(tableSize); /* allocate array of list */ h->theLists = malloc(sizeof(struct listnode)*h->tableSize); // h->tableSize malloc() h->theLists[i] , if (h->theLists == NULL) { printf("Out of space!!
"); exit(1); } /* allocate list header */ for (i = 0;i < h->tableSize;++i) { h->theLists[i]->next= MakeEmpty(); } }


 
  
 
  
 
  
 
 

좋은 웹페이지 즐겨찾기