雜湊表 在VOIP使用者資訊儲存中的應用

2021-08-27 09:06:45 字數 2247 閱讀 1199

標頭檔案:

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