雜湊表是種資料結構,它可以提供快速的插入操作和查詢操作。雜湊表也有一些缺點它是基於陣列的,陣列建立
後難於擴充套件,某些雜湊表被基本填滿時,效能下降得非常嚴重。這個問題是雜湊表不可避免的,即衝突現象:對不同
的關鍵字可能得到同一雜湊位址。
第一次接觸雜湊表時,它的優點多得讓人難以置信。不論雜湊表中有多少資料,插入和刪除(有時包括側除)只需
要接近常量的時間即0(1)的時間級。實際上,這只需要幾條機器指令。
對雜湊表的使用者一一人來說,這是一瞬間的事。雜湊表運算得非常快,在電腦程式中,如果需要在一秒種內查
找上千條記錄通常使用雜湊表(例如拼寫檢查器)雜湊表的速度明顯比
樹快,樹的操作通常需要o(n)的時間級。雜湊
表不僅速度快,程式設計實現也相對容易。
雜湊表也有一些缺點它是基於陣列的,陣列建立後難於擴充套件某些雜湊表被基本填滿時,效能下降得非常嚴重,所以程式雖必須要清楚表中將要儲存多少資料(或者準備好定期地把資料轉移到更大的雜湊表中,這是個費時的過程)。
而且,也沒有一種簡便的方法可以以任何一種順序〔例如從小到大〕遍歷表中
資料項。如果需要這種能力,就只能選擇其他資料結構。
然而如果不需要有序遍歷資料,並且可以提前**資料量的大小。那麼雜湊表在速度和易用性方面是
無與倫比的。
說了這麼多,都是概念,只有結合**去理解,才能真正懂得雜湊表是如何儲存資料的:
#include #include #include #define false 0
#define true 1
typedef struct _node
node ;
typedef struct _hash_table
hash_table;
//建立hash表
hash_table *create_hash_table()
//在hash表中尋找資料
node* find_data(hash_table* phash ,int ndata)
if(null == (pnode = phash->value[ndata%10])) //若雜湊表中陣列沒有該成員,進入if條件句
while(pnode) //當該結構體指標不為空時
pnode = pnode->next ; }
return null ;
}//在hash表中新增資料
bool insert_data(hash_table * phash ,int ndata)
if(null ==phash->value[ndata%10]) //判斷指標陣列中有沒有該成員,若沒有則進入if條件句中
if(null != find_data(phash,ndata)) //查詢到該資料
pnode = phash->value[ndata%10] ; //指向該元素所在的鍊錶
while(null != pnode->next)
pnode->next = (node*)malloc(sizeof(node)) ;
memset(pnode->next,0,sizeof(node)) ;
pnode->next->ndata = ndata ;
return true ; }
//在hash表中刪除資料
bool delete_data(hash_table* phash , int ndata)
if(null == (pnode = find_data(phash,ndata))) //並未找到該資料
if(pnode == phash->value[ndata%10]) //若找到該資料結點並且是陣列成員首個結構體
phead = phash->value[ndata%10] ;
while(pnode != phead->next) // 遍歷找出所要刪除的資料位置
phead->next = pnode->next ;
free(pnode) ;
return true ;
}//列印雜湊表
void show_hash_table(hash_table* phash)
printf("\n") ;
} } int main();
//新增資料
bool bltemp ;
for(int i = 0;i<10;i++) }
//查詢資料
node* pnode ;
pnode = find_data(my_hash_table,81) ;
if(pnode == null)
else
//刪除資料
bltemp = delete_data(my_hash_table,12);
if(bltemp == false)
else
//列印雜湊表
show_hash_table(my_hash_table) ;
return 0 ;
}
自主程式設計實現單鏈表
單鏈表是一種鏈式訪問的資料結構,用一組位址任意的 儲存單元 存放線性表中的 資料元素 鍊錶中的資料是以結 點來表示的,每個結點的構成 元素 資料元素 的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單 元,指標就是連線每個結點的位址資料。下面是實現單鏈表的程式設計 include incl...
自主程式設計實現二分法查詢
今天出去筆試,遇到一道題目讓我們用二分法查詢一已排好序的陣列中的資料,並返回該資料的位置,這 是我第一 次碰到使用二分法的程式設計題,一開始還是有點小慌得,畢竟之前沒有寫過,怕有些注意點沒法試卷中 檢測出來,不過二分法的概念還是很好理解的,主要思想是 設查詢的陣列區間為a front,end 1 確...
java語言自主程式設計模擬資料檔案
資料格式樣本為 2018 08 242 19 08 320,15219835179,重慶,小公尺,fri aug 31 09 01 43 cst 2018 但在資料中時間格式為2018 08 242 19 08 320 所以我們要更改時間的輸出格式 這需要使用 dateformat 類的format...