1. 程式人生 > >java 陣列實現雜湊表的構建,查詢,插入,刪除

java 陣列實現雜湊表的構建,查詢,插入,刪除

以下程式碼以陣列儲存方式實現了雜湊表的建立,查詢,插入,刪除等操作,雜湊函式採用除留餘數法,使用開放定址法中的線性探查法處理衝突

public class HashSearch {
    /*使用陣列實現hashtable的建立,查詢,插入,刪除*/

    class Node{    //結點內部類表示hashtable中儲存的元素
        int key;   //資料域
        boolean delflag;  //在刪除時使用,作為刪除標誌
        int times;  //比較次數
        public Node(int data){
            key=data;
            delflag=false
; times=0; } } public int Collision(int d,int hashsize){ /*線性探查法處理衝突,hashsize表示HashTable的大小*/ return (d+1)%hashsize; } public int HashFunc(int key,int hashsize){ /*採用除留餘數法構造雜湊函式*/ return key%hashsize; } /*hashtable的查詢*/ public
int Hashsearch(Node[]HashTable,int x){ /*HashTable為雜湊表陣列,x為待查詢的元素*/ /*找到,則返回雜湊地址;沒找到返回負的雜湊地址*/ int addr; int hashsize=HashTable.length; addr=HashFunc(x,hashsize); //獲得雜湊地址 while(HashTable[addr]!=null && HashTable[addr].key!=x){ addr=Collision(addr,hashsize); //沒找到,處理衝突
} if(HashTable[addr]!=null && HashTable[addr].key==x) //查詢成功 return addr; else return -addr; //查詢失敗 } /*雜湊表的插入*/ public int HashInsert(Node[]HashTable,int x){ int addr; addr=Hashsearch(HashTable,x); //在雜湊表中查詢 if(addr>0) return 0; //找到則不必插入 HashTable[-addr]=new Node(x); //沒找到,則插入 HashTable[-addr].times=1; //設定比較次數 return 1; //插入成功 } /*雜湊表的建立*/ public void CreateHash(Node[]HashTable,int items[]){ /*利用所給關鍵字的序列items,建立雜湊表,n為關鍵字的個數*/ int hashsize=HashTable.length; int n=items.length; int i; for(i=0;i<hashsize;i++){ //初始化雜湊表 HashTable[i]=null; } for(i=0;i<n;i++){ HashInsert(HashTable,items[i]); //依次向雜湊表中插入元素 } } /*雜湊表的刪除*/ public int HashDelete(Node[]HashTable,int x){ int addr; addr=Hashsearch(HashTable, x); //查詢資料元素 if(addr>0){ HashTable[addr].delflag=true; //找到,則設定刪除標記為true return 1; } return 0; } /*雜湊表的顯示*/ public void Displayhash(Node[]HashTable){ int i,hashsize=HashTable.length; System.out.print("雜湊表\n雜湊地址:"); for(i=0;i<hashsize;i++){ System.out.print(i+" "); } System.out.print("\n關鍵字: "); for(i=0;i<hashsize;i++){ if(HashTable[i]!=null && HashTable[i].delflag==false){ if(HashTable[i].key<10) System.out.print(HashTable[i].key+" "); else System.out.print(HashTable[i].key+" "); } else System.out.print(","+" "); } } public static void main(String[] args) { int []items=new int[]{15,59,22,34,7,78}; Node[] HashTable=new Node[7]; HashSearch hs=new HashSearch(); hs.CreateHash(HashTable, items); hs.Displayhash(HashTable); int addr; addr=hs.Hashsearch(HashTable, 59); System.out.println("\n"+addr); hs.HashDelete(HashTable, 34); hs.Displayhash(HashTable); } }