重複發明輪子 自己實現雜湊表。

2021-04-23 16:15:25 字數 2055 閱讀 6455

首先想用彙編寫的。但寫到最後暈頭轉向。沒辦法。先用c++驗證一遍自己的思路吧。**如下。

chashmap::chashmap()

chashmap::~chashmap()

free(m_nodes);

}bool chashmap::set(dword key,dword value)

}//刪除舊的.

free(m_nodes);

m_nodes = new_nodes;

m_size = new_size;

}pcnode node;

if(node= _getaddress_x(m_nodes,m_size,key))

return false;

}dword chashmap::get(dword key)

return null;

}bool chashmap::exists(dword key)

return false;

}bool chashmap::del(dword key)

else

if(keykey)else

}if(!node) return false; //沒有找到 返回了

if(!par_node) //根節點的情況

cur_node->left = left_node;

}}else

if(cur_node->left)

else

return true;

}/* 不是根節點的情況 需要 釋放 cur_node*/

if(cur_node->right)

node->left=cur_node->left;

}}else

if(cur_node->left)else

free(cur_node);

return true;

}// 這是乙個靜態方法,複製新的節點,並刪除舊的節點。

void chashmap::_setanddel_x(pcnode arg_nodes,dword arg_size,pcnode arg_node)

void chashmap::_del_x(pcnode arg_node)

/*如果相同鍵值的資料存在,會返回空。

這個方法是靜態的。

如果存在,它會給我乙個空間。如果不存在。它會分配好乙個新的位址。

*/pcnode chashmap::_getaddress_x(pcnode arg_node,dword arg_size,dword key)

while (node)

node = (pcnode)malloc(sizeof(cnode));

node->key=key;node->left=node->right = null;

if(key>t_node->key)

t_node->right = node;

else

t_node->left = node;

return node;

}標頭檔案:

class chashmap  

//取容量尺寸

dword count()  //取資料數目

dword get(dword key);           //取資料

bool  del(dword key);           //刪除資料

bool exists(dword key);         //資料是否存在

virtual ~chashmap();

private:

static pcnode _getaddress_x(pcnode arg_node,dword arg_size,dword key);

static

void _setanddel_x(pcnode arg_nodes,dword arg_size,pcnode arg_node);

void _del_x(pcnode arg_node);

protected:

dword m_size;

dword m_count;

pcnode m_nodes;};

重複發明輪子又何妨?

不要重 明輪子 軟體工程大師如此告誡。然而在我看來,很多情況下重 明輪子是非常必要的,按現在流行的話就是 必須的 當然,重 明輪子是需要特別慎重的,有意義並且值得做方可,而且這個要發明的輪子要具備足夠的創新。前些日子,乙個師弟要來我們公司實習,由於沒什麼相關經驗沒能如願。然後他就問,如何積累原始經驗...

發明輪子和學會發明輪子

一直以來,我都覺得現在中國的技術氣氛很浮躁.研究的都是別人的東西怎麼用,卻沒有辦法研究自己的技術.或許一直以來困擾我們的就是 不要重 明輪子 這句話.一直以來我們都認為自己不需要去研究底層的東西,因為那些輪子已經 發明 好了,不需要我們再去發明一次了.但是不需要重 明,不等於我們可以不會發明 輪子 ...

HTTPWebRequest請求 重複傳送

使用httpwebrequest請求別人的介面,請求了一次,但是對方卻收到了兩次同樣的請求,而且間隔時間為一分鐘,並且只有處理資料比較多的時候才會出現。因為我自己的 裡是有設定超時時間的,且時間設定的是5分鐘,webrequest.timeout 300000 排查了很久,最後發現是因為對方使用的 ...