C 資料結構 Dictionary

2021-10-01 21:07:59 字數 1514 閱讀 7014

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 語句定義了乙個包含多個成...