private int buckets;//hashcode 桶,始終指向當前桶的最後乙個元素(entry next 為-1)
private entry entries;//所有存入的資料
其中entry結構如下:
private struct entry
entries儲存了所有新增進入的key:value元素
public dictionary(int capacity, iequalitycomparercomparer)
private void initialize(int capacity)
private void insert(tkey key, tvalue value, bool add)
//如果桶陣列為空,構造桶陣列
if (buckets == null) initialize(0);
int hashcode = comparer.gethashcode(key) & 0x7fffffff;
//獲取目標桶
int targetbucket = hashcode % buckets.length;
//將桶指向
for (int i = buckets[targetbucket]; i >= 0; i = entries[i].next)
//更新資料
entries[i].value = value;
version++;
return;} }
int index;
if (freecount > 0)
else
index = count;
count++;
}entries[index].hashcode = hashcode;
entries[index].next = buckets[targetbucket];//next 設定為-1
entries[index].key = key;
entries[index].value = value;
buckets[targetbucket] = index;//桶指向最新元素
public bool remove(tkey key)
if (buckets != null)
else
//重置但不刪除
entries[i].hashcode = -1;
entries[i].next = freelist;
entries[i].key = default(tkey);
entries[i].value = default(tvalue);
freelist = i;
freecount++;
version++;
return true;}}
}return false;
}
C 資料結構
c 中實現通用資料結構 在程式設計當中經常會出現使用同種資料結構的不同例項的情況。例如 在乙個 程式中可以使用多個佇列 樹 圖等結構來組織資料。同種結構的不同例項,也 許只在資料元素的型別或數量上略有差異,如果對每個例項都重新定義,則非常麻 煩且容易出錯。那麼能否對同種型別資料結構僅定義一次呢?答案...
資料結構 C
本文將根據自己對資料結構的理解,介紹資料結構的基本型別 鍊錶。寫的不好的地方歡迎指正。首先是單鏈表。結點資料結構定義 struct node return false 3 刪除元素 bool delete node first,int x 現在介紹雙鏈表 首先也是結點結構定義 struct node...
C 資料結構
c c 陣列允許定義可儲存相同型別資料項的變數,但是結構是 c 中另一種使用者自定義的可用的資料型別,它允許您儲存不同型別的資料項。結構用於表示一條記錄,假設您想要跟蹤圖書館中書本的動態,您可能需要跟蹤每本書的下列屬性 為了定義結構,您必須使用struct語句。struct 語句定義了乙個包含多個成...