首页 > 代码库 > 散列表

散列表

#include<stdio.h>

//链表
typedef struct listNode
{
	int val;
	listNode *next;
	listNode(int key):val(key),next(NULL){}
	listNode():val(0),next(NULL){}
}*position;

typedef position list;

//散列表
typedef struct hashTbl
{
	int tableSize;
	list *theLists;
}*hashTable;

int hash(int key,int tableSize)
{
	return key%tableSize;
}



//散列表初始化
hashTable init(int tableSize)
{
	//局部
	hashTable H;
	int i;

	//分配表
	H=new hashTbl();
	H->tableSize=tableSize;
	
	//分配链表数组
	H->theLists=new list[H->tableSize];

	//分配链表头
	for(int i=0;i<H->tableSize;i++)
	{
		H->theLists[i]=new listNode();
		H->theLists[i]->next=NULL;
	}
	
	return H;
}

position find(int key,hashTable H)
{
	position p;
	list l;

	l=H->theLists[hash(key,H->tableSize)];
	p=l->next;

	while(p!=NULL && p->val!=key)
		p=p->next;

	return p;

}


//插入
void insert(int key,hashTable H)
{
	//局部
	position pos,newCell;
	list l;

	//是否已存
	pos=find(key,H);

	//未存
	if(pos==NULL)
	{
		newCell=new listNode(key);
		l=H->theLists[hash(key,H->tableSize)];
		newCell->next=l->next;
		l->next=newCell;
	}
}

int main()
{
	hashTable H=init(5);
	insert(1,H);
	insert(2,H);
	insert(3,H);
	insert(6,H);

	return 0;
}

散列表