package 散列表; import java.util.Scanner; public class HashSearch { public static int data[] = {69,65,90,37,92,6,28,54}; public static int hash[] = new int[13]; //將關鍵字插入到散列表中 public static void insertHash(int hash[],int m,int data){ int i = 0; i = data%13;//計算散列位置 while (hash[i] >0) {//位置已經被占用 i = (++i)%m;//先行探索解決沖突 } hash[i] = data; } //創建散列表 public static void createHash(int hash[],int m,int data[],int n){ for (int i = 0;i<hash.length;i++) { hash[i] = 0; } for (int i = 0;i<n;i++) { insertHash(hash, m, data[i]); } } //散列表的查找函數的編寫 public static int hashSearch(int [] hash,int m,int key){ int i = 0; i = key%13; while (hash[i] > 0 && hash[i] != key) {//判斷是不是沖突 i = (++i)%m; } if (hash[i] == 0) { return -1; }else{ return i; } } public static void main(String[] args) { Scanner input = new Scanner(System.in); //調用函數創建散列表 createHash(hash, 13, data, 8); System.out.println("散列表各元素的值:"); for(int i = 0;i<13;i++){ System.out.print(hash[i]+" "); } System.out.println(); System.out.println("輸入查找的關鍵字"); int key = input.nextInt(); int pos = hashSearch(hash, 13, key); if (pos > 0) { System.out.printf("查找成功,該關鍵字位於數組的第%d個位置\n",pos); }else{ System.out.println("查找失敗!"); } } }