❶ 常見的哈希演算法有哪些
1.linear hash 線性
2.quadratic hash 每次以1,4,9,16這樣的幅度向下找
3.double hash 用兩個函數一起決定HASH的index
❷ 哈希查找演算法程序
查找演算法
問題描述:
設計一個實現順序查找、二分查找(折半查找)、二叉排序樹、哈希查找演算法的程序,並具有人機交互界面。
基本要求:
(1)設計一個菜單將實現的查找演算法的名字顯示出來,並提示用戶對查找演算法進行選擇;
(2)分別實現順序查找、二分查找(折半查找)、二叉排序樹、哈希查找;
(3)哈希函數採用除留余數發,解決沖突的方法大家任選擇一種;
(4)二叉排序樹必須實現構建、查找、插入、刪除四個基本操作;
(5)輸出各種排序的結果並進行比較。*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define MAX 20
typedef struct /*順序結構數據類型*/
h.length++;
h.r[ }
else
if(k<l.r[mid].key) high=mid-1;
else low=mid +1;
}
if(i!=0)
{
printf("l.r[%d].key=%d\n",i,k);
printf("查找成功\n");
}
return ht;
}
void HashSearch(RecordHash ht) /*哈希查找*/
{
int k,i;
page_title("哈希查找");
printf("請輸入要查找的關鍵字:");
scanf("%d",&k);
i=k%13;
if(ht.HashTable[i].key==k)
{
printf("ht.HashTable[%d].key=%d\n",i,k);
printf("查找成功\n");
}
else
{
i=i+1;
for(;i<MAX;i++)
if(ht.HashTable[i].key==k)
{
printf("ht.HashTable[%d].key=%d\n",i,k);
printf("查找成功\n");
break;
}
if(i==MAX) printf("查找失敗\n");
}
return_confirm();
}
void main()
{
RecordList L1,L2;
BSTNode *pt;
RecordHash ht;
int k,i;
printf("\n創建順序查找線性表,輸入0則結束輸入(可不按順序輸入)\n");
L1=creat1();
printf("\n創建二分查找線性表,輸入0則結束輸入(按遞增順序輸入)\n");
L2=creat1();
printf("\n創建二叉排序樹,輸入0則結束輸入\n");
pt=creat2();
printf("\n創建哈希表\n");
ht=creat3();
menu:page_title("請選擇查找方式,輸入0則結束輸入");
printf("順序查找請按1\n二分查找請按2\n二叉排序樹查找請按3\n哈希查找請按4\n推出請按0\n");
switch(getch())
{
case '1':
SeqSearch(L1);
break;
case '2':
Binsrch(L2);
break;
case '3':
page_title("二叉排序樹查找");
printf("請輸入要查找的關鍵字:");
scanf("%d",&k);
SearchBST(pt,k);
break;
case '4':
HashSearch(ht);
break;
case '0':
exit(0);
default :
printf("輸入錯誤,按任意鍵返回");
getch();
}
goto menu;