欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言程序设计--算法与数据结构之 哈希表的查找(输出查找次数和查找情况)

程序员文章站 2024-03-01 20:12:52
...

此代码可以正常运行,下附有运行区

#include<stdio.h>
#include<stdlib.h>
//算法7.10 哈希表的查找
//- - - - -开放地址法哈希表的存储表示- - - - -
#define m 13                        			//哈希表的表长
#define NULLKEY 0                 			//单元为空的标记

struct HashTable
{
   int  key;		         	 			//关键字项
// InfoType  otherinfo;					//其他数据项
};

//	算法7.10为哈希表查找的算法,采用线性探测法处理冲突。
//	【算法实现】

int H(int key)
{
	int result;
	result=key%13;
	return result;
} 

int SearchHash(HashTable HT[],int key)
{
  //在哈希表HT中查找关键字为key的元素,若查找成功,返回哈希表的单元标号,否则返回-1 
  int H0=H(key);     	                   			//根据哈希函数H(key)计算哈希地址
  int Hi,i;
  if (HT[H0].key==NULLKEY) return -1;		//若单元H0为空,则所查元素不存在
  else if (HT[H0].key==key) 
  {
	  printf("%d的查找次数为:1\n",key);
	  return H0;		//若单元H0中元素的关键字为key,则查找成功,返回哈希地址
  }
  else
  {             
     for(int i=1;i<m;++i)
	 {                
		 Hi=(H0+i)%m;     		//按照线性探测法计算下一个哈希地址Hi
        if (HT[Hi].key==NULLKEY) return -1;	//若单元Hi为空,则所查元素不存在
        else if (HT[Hi].key==key)
		{
			printf("%d的查找次数为:%d\n",key,i+1);
			return Hi; 	//若单元Hi中元素的关键字为key,则查找成功
		}
     }//for
     return -1;
  }//else
}//SearchHash

void main()
{	
	int result;
	int j=1;
	int a[13]={-1,14,1,68,27,55,19,20,84,79,23,11,10};//第一个-1缓冲!
	HashTable HT[m];
	for(int i=0;i<13;i++)
	{
		HT[i].key=a[i];
	}
	for(j=1;j<13;j++)
	{
		result=SearchHash(HT,a[j]);
	    if(result!=-1)
		{
		printf("%d 在第%d个位置找到\n",a[j],result);
		}
	    else
		{ 
		printf("%d未找到\n",a[j]);
		}
		printf("\n");
	}
}

C语言程序设计--算法与数据结构之 哈希表的查找(输出查找次数和查找情况)