데이터 구조의 HashTable (나머지 법 제외 - 체인 주소 법)

1685 단어 데이터 구조
#include
using namespace std;
#define MAXSIZE 17
enum { No, Yes};
typedef struct node
{ //       
	int data;    //     
	struct node *pNext;  //         
}Node;
typedef struct Table
{
	Node *table;  //         
	int count;    //           
}HashTable;

void InitHashTable(HashTable &H) //        
{
	H.count = MAXSIZE; //           
	H.table = new Node[H.count]; //       
	for (int i = 0; i < H.count; ++i) //           
	{
		H.table[i].data = No;
		H.table[i].pNext = NULL;
	}
}

int Hash(int key)
{
	return key%MAXSIZE;
}


void InsertHashTable(HashTable &H, int key) //    key      
{
	int addr = Hash(key);
	if (H.table[addr].data == No)
		H.table[addr].data = Yes;
	Node *pNew = new Node;
	pNew->data = key;
	pNew->pNext = H.table[addr].pNext;
	H.table[addr].pNext = pNew;
	pNew = NULL;
}

bool SearchHashTable(HashTable &H, int key) //     key  
{

	int addr = Hash(key);
	if (H.table[addr].data == Yes)
	{
		Node *p = H.table[addr].pNext;
		while (p) //       
		{
			if (p->data == key)
				return true;
			else
				p = p->pNext;
		}
	}
	return false;
}

void PrintHashTable(HashTable H)
{
	int i;
	Node* p = NULL;
	for (i = 0; i < MAXSIZE; ++i)
	{
		if (H.table[i].data==Yes)
		{
			cout << i << ":";
			p = H.table[i].pNext;
			while (p)
			{
				cout << p->data << "→";
				p = p->pNext;
			}
			cout <0; --i)
		InsertHashTable(H, i);
	PrintHashTable(H);
	printf("         :
"); int key; cin >> key; if (SearchHashTable(H, key)) printf(" :%d
", key); else printf(" :%d
", key); }

좋은 웹페이지 즐겨찾기