class Program
{
static int hashLength = 7;
static int[] hashTable = new int[hashLength];
static List<int> list = new List<int>() { 13, 29, 27, 28, 26, 30, 38 };
static void Main(string[] args)
{
//创建哈希表
for (int i = 0; i < list.Count; i++)
{
Insert(hashTable, list[i]);
}
Console.WriteLine("展示哈希表中的数据:{0}", String.Join(",", hashTable));
while (true)
{
//哈希表查找
Console.Write("请输入要查找的数据:");
int data = int.Parse(Console.ReadLine());
var result = Search(hashTable, data);
if (result == -1) Console.WriteLine("对不起,没有找到!");
else Console.WriteLine("数据的位置是:{0}", result + 1);
}
//Console.ReadKey();
}
/// <summary>
/// 插入操作
/// </summary>
/// <param name="hashTable"></param>
/// <param name="data"></param>
private static void Insert(int[] hashTable, int data)
{
int hashAddress = Hash(hashTable, data);
while (hashTable [hashAddress ] != 0)
{
hashAddress = (++hashAddress) % hashTable.Length;
}
hashTable[hashAddress] = data;
}
/// <summary>
/// 查找
/// </summary>
/// <param name="hashTable"></param>
/// <param name="data"></param>
/// <returns></returns>
private static int Search(int[] hashTable, int data)
{
int hashAddress = Hash(hashTable, data);
while (hashTable [hashAddress ] != data )
{
hashAddress = (++hashAddress) % hashTable.Length;
if (hashTable[hashAddress] == 0 || hashAddress == Hash(hashTable, data)) return -1;
}
return hashAddress;
}
/// <summary>
/// 哈希函数(除留余数法)
/// </summary>
/// <param name="hashTable"></param>
/// <param name="data"></param>
/// <returns>返回数据的位置</returns>
private static int Hash(int[] hashTable, int data)
{
return data % hashTable.Length;
}
}
原文 : 点击打开链接