標頭檔案:
#ifndef _hash_h
#define _hash_h
#define ok 1
#define error 0
#define hash_size 256
typedef struct _hashnode /*採用雙向鍊錶儲存*/
thashnode;
thashnode * vsipuserlocation[ hash_size ];/*槽*/
#endif
雜湊表演算法(字串處理)
int hashstring (const char *str)
return h % hash_size;
}雜湊槽的初始化
int hashinit(thashnode **plist, unsigned int size)
插入節點
int hashaddnode ( thashnode ** plist, thashnode * pnode, char *hash, func pcmpfunc )
/* 遍歷是否有相同的節點 函式pcmpfunc()是比較指標是否指向相同的記憶體位址*/
if( pcmpfunc )
if ( ret == 0 )
return ok ;
}/*為找到相同的節點,插入到第乙個節點位置 */
tempnode = plist [ index ] ;
plist [ index ] = pnode ;
pnode->next = tempnode;
pnode->prev = null;
tempnode->prev = pnode;
return ok ;
}
關於插入節點中的引數應用,在**中呼叫函式如下:typedef struct _callee callee
callee *p ;
hashaddnode(vsipuserlocation, (thashnode *)p, p->name, issamecallee)
下面是和別人溝通: a:
這個問題我也遇到了,因為tsipcallee*p,這個p指向的是儲存tsipcalle結構的記憶體位址,這個位址指向的記憶體是一塊連續的空間,比如大小是n,那麼我們可以很隨意的取這n個位元組中的一段內容,也就是說sizeof(thashnode)<=sizeof(callee),把n中的前m(<=n)個位元組當成thashnode的內容,也就是說可以把這m個位元組當成乙個thashnode結構體
但是如果sizeof(thashnode)>sizeof(callee),那就不行了,會造成訪問越界的情況 b:
定義這個結構體的時候已經包含這個
thasgnodepnode;
太抽象了~
a:對哈,我給你畫個圖你就明白了
b:看來你看得挺多了,剛開始我迷糊在(thashnode*)p,強制型別轉換,不就把p中前2個位元組內容覆蓋掉了! a:
你看看這個結構,tsipcallee在記憶體中的存放方法,強制轉換的意思就是「我」只想使用前一段位元組:sizeof(thashnode),後面是什麼我不管。
通過data查詢節點
thashnode * hashgetnode(thashnode ** plist, char *hash, func pcmpfunc, void * cmparg)
tempnode = tempnode->next;
}return tempnode;
}
獲得當前列內容:
thashnode * hashgetslot(thashnode ** plist, const char *hash )
刪除節點
int hashremovenode(thashnode ** plist, thashnode * pnode, char *hash)
else if ( !pnode->next ) else
return ok;
}
雜湊表是處理大量資料中因處理速度比較快,應用非常廣泛。但是也不難理解,只有認真閱讀**, 儲存使用者資訊在cookie
使用localstorage儲存資訊有漏洞,因為如果手機端的使用者開啟無痕瀏覽 localstorage就不起作用了,而cookie就不會有這樣的問題 當然,使用者不能禁用cookie的情況下,當然,很少有使用者禁用cookie的 jq 使用cookie的方法 2 方法 var uid cookie...
在C 中應用雜湊表 Hashtable
一 雜湊表 hashtable 簡述 在.net framework中,hashtable是system.collections命名空間提供的乙個容器,用於處理和表現類似key value的鍵值對,其中key通常可用來快速查詢,同時key是區分大小寫 value用於儲存對應於key的值。hashta...
在C 中應用雜湊表 Hashtable
一,雜湊表 hashtable 簡述 在.net framework中,hashtable是system.collections命名空間提供的乙個容器,用於處理和表現類似key value的鍵值對,其中key通常可用來快速查詢,同時key是區分大小寫 value用於儲存對應於key的值。hashta...