#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 判...