开放性地址处理法与冲突法处理哈希表的查找和插入

 

 

/*用开放性地址处理冲突法定义的哈希表*/
#define  M  997
typedef   struct{
    KeyType   key;
	DataType  data;	
}NodeType;
typedef  NodeType   HashTable[M];
-----------------------------------------------------------------
/*用除余法设计哈希函数*/ 
int  h(KeyType  K, int m){
    return   K%m;	
}
---------------------------------------------------------------------- 
/*线性表查探法查找关键字*/
int   HashSearch1(HashTa)ble  HT, int  K, int m){
    int   d,temp;
	d = h(K,m);
	temp = d;
	while(HT[d].key != -32768){
	   if(HT[d].key == K)
	       return d;
	   else
	       d = (d+1)%m;
	   if(d == temp)
	       return -1;	
	}	
	
	return  d;
}
------------------------------------------------------------------- 
/*在哈希表上插入一个节点*/
int  HashInsert1(HashTable  HT, NodeType  s, int m){
    int d;
	d = HashSearch1(s.key, m);
	if(d = -1)    return -1;                         //哈希表已满;	
	else{
	    if(s.key == HT[d].key)
		    return 0;
		else{
		    HT[d] = s;
			return 1;	
		}	
	}
}




--------------------------------------------------------------------
/*用拉链法定义哈希表*/
#define  M  997
typedef  struct  node{
	KeyType  key;
	DataType data;
	struct node *next;
}HTNode;
typedef  HTNode  *HT[M];
----------------------------------------------------------------------

/*查找关键字k*/
HTNode*   HashSearch2(HT  T, KeyType  K, int m){
   HTNode  *p = T[h(K,m)];
   while(p != NULL  && p->key  != K)
       p = p->next;
   return  p;	
}

/*插入结点s*/
int    HashInsert2(HT  T, HTNode  *s, int m){
    int  d;
	HTNode  *p = HashSearch2(T,s->key, m);
	if(p == NULL)    return 0;
	else{
		d = h(s->key, m);
	    s->next = T[d];	
	    T[d] = s;
	    return 1;
	}	
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值