C語言 使用陣列與鍊錶實現無儲存上限的雜湊表

2021-10-07 10:53:38 字數 1474 閱讀 1654

#include

#include

#define hashsize 12

//set hash p

#define nullkey -1000000

//set a impossible key

//如果雜湊表中有相同值,該演算法找不到第二個該值,需要優化find函式

typedef

struct ltableltable;

typedef

struct

hashtable;

hashtable inithash

(int

* test,

int size)

; ltable *head[hashsize]

,*node[hashsize]

,*end[hashsize]

;//init hashtable

for(i=

0;i)//將陣列裡的值放入雜湊表

for(i=

0;i)else

}return h;

}int

findhash

(int f,hashtable h)

while

(head[re]

) head[re]

= head[re]

->next;

}return-1

;}void

printhashtable

(hashtable h)

for(k=

0;k<

12;k++

)printf

("\n");

}}intmain

(int argc,

char

*ar**)

; h =

inithash

(test,17)

; re =

findhash(37

,h);

printf

("array:");

for(i=

0;i<

17;i++

)printf

("\ntarget:37,find result id:%d\n"

,re)

;//列印到控制台

printhashtable

(h);

}

該**存在的問題:

(1)只支援正整數儲存;

(2)當有相同的數存入雜湊表,使用findhash函式查詢該數時,只能查詢煉表裡第乙個數;

(3)對於每個索引內的鍊錶,採取遍歷的方式查詢。

解決方案:

(1)對所有的數先取絕對值,再取餘,負數與正數一樣存在鍊錶內;

(2)findhash函式返回值從int型別變為int*型別,查詢時把索引下的鍊錶遍歷,將所有相同值的id存為陣列返回;

(3)優化findhash查詢演算法;

存在的問題有緣人來做吧

C語言 陣列與鍊錶的使用

一 陣列與鍊錶的特點 1 陣列占用的記憶體空間是連續有序的,鍊錶占用的記憶體空間是分散無序的 二 陣列與鍊錶的訪問 陣列和鍊錶都是按位址訪問的,但是陣列的位址是連續的,在已知陣列起始位址和大小的情況下,陣列可以直接按 位址 n 直接訪問當前位址的後第n個數或前n個數。鍊錶不能再當前位址 n,應為他的...

線性表 陣列實現 鍊錶實現 C語言

1 初始化 建立空的順序表 typedef int position typedef struct lnode list struct lnode list makeempty 2 查詢 define error 1 position find elementtype x,list ptrl 3 插...

使用鍊錶實現棧(C語言)

下邊的實現,預設在鏈棧中設定乙個頭結點,用於指向棧的第乙個元素 typedef char datatype typedef struct nodelstacknode,linkstack void initstack linkstack top 將頭結點的指標域置為空 top next null 判...