自主程式設計實現雜湊表

2021-08-04 08:14:14 字數 2511 閱讀 9695

雜湊表是種資料結構,它可以提供快速的插入操作和查詢操作。雜湊表也有一些缺點它是基於陣列的,陣列建立

後難於擴充套件,某些雜湊表被基本填滿時,效能下降得非常嚴重。這個問題是雜湊表不可避免的,即衝突現象:對不同

的關鍵字可能得到同一雜湊位址。

第一次接觸雜湊表時,它的優點多得讓人難以置信。不論雜湊表中有多少資料,插入和刪除(有時包括側除)只需

要接近常量的時間即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...