資料結構 字典

2021-07-09 21:45:45 字數 2832 閱讀 7144

宣告:本文為學習資料結構與演算法分析(第三版) clifford a.shaffer 著的學習筆記,**有參考該書的示例**。

碎碎語:其實我一直對這個資料結構不是很了解。

字典 (dictionary) 作為資料庫的乙個簡單介面,提供在資料庫中儲存、查詢和刪除記錄的可能。

字典中有定義關鍵碼 (search key)的概念。而關鍵碼則必須是可比的

字典的adt如下:

template

class dictionary

dictionary& operator= (const dictionary&) {}

public:

dictionary() {}

virtual ~dictionary() {}

virtual

void clear() = 0;

virtual

void insert(const key&, const e&) = 0;

virtual e remove(const key&) = 0;

virtual e removeany() = 0;

virtual e find(const key&) const = 0;

virtual

int length() const = 0;

};

insert 函式和 find 函式是這個類的核心。find 函式接受乙個任意的關鍵碼,從字典中找出這個關鍵碼,並且將相關的記錄返回。如果有多條記錄匹配,則返回任意一條。

removeany 函式提供了使用者隨意選擇一條記錄,並進行操作。

假如實現了乙個工資記錄的字典。payroll 類有很多域,每個域都可以作為搜尋關鍵碼。

下面展示了對payroll 的儲存,乙個是對id進行檢索,乙個對name進行檢索。

class payroll

~payroll() {}

int getid()

string getname()

string getaddr()

};int main()

kvpair(key key, e value):k(key), e(value) {}

kvpair(const kvpair& pair)

kvpair& operator= (const kvpair& pair)

key key() const

e value() const

void setkey(key ink)

void

set(key ink, e ine)

bool

operator>(const kvpair& o) const

bool

operator

< (const kvpair& o) const

slist() {}

~slist() {}

void insert (const e& it)

movetostar();

int left = 0, right = length()-1;

int mid;

auto get = [&](int pos) -> const e&

;auto f = [&]() -> bool

mid = left + (right-left)/2;

const e& temp = get(mid);

if(it1;

return

true;

}else

};while( f() ) ;

llist::insert(it);

}using llist::movetostar;

using llist::prev;

using llist::next;

using llist::length;

using llist::movetopos;

using llist::getvalue;

using llist::currpos;

using llist::clear;

using llist::movetoend;

using llist::remove;

};

其中,涉及到關鍵碼的比較,但是我將整個鍵值對封裝為e的模板了,所以鍵值對中是需要定義實現過載大於、小於號的。

同時,在鍵值對的類中,應該使用指標指向相應的記錄,再將指標與關鍵碼關聯起來

實現有序字典的話,二分查詢幾乎是需要的使用技能了。

在實現的過程中,我先按照自己的想法,實現如下:

/*

因為 find 函式被修飾成 const 了,並不能呼叫類中其他非 const 的

函式,即使類中有slist 成員,也不能呼叫 slist 成員的非const 函式。

這時候就需要用到指標,使用 slist 指標,就可以成功在 find 函式中調

用 slist 的非const成員函式了

*/e find(const key& k) const

if(get(left).key()==k)

return

get(left).value();

else

return nullptr;

}

e find(const key& k) const

return nullptr;

}

簡潔明瞭,同時避免了需要增加判斷字典為空時的狀態

所有實現**均可以在本人github上找到:

xiaosa233

–end–

資料結構 字典

字典是一種以 鍵 值 對形式儲存結構的資料結構,就像 號碼薄裡的名字和 號碼一樣.要找乙個 時,先找名字,名字找到了,緊挨著它的 號碼也就找到了.這裡的 鍵 是指你用來查詢的東西,值 是查詢得到的結果.js的object類就是以字典形式設計的.本章將使用object類本身的特性,實現乙個dictio...

資料結構 字典

字典使用雜湊表作為底層實現,乙個雜湊表裡面可以有多個雜湊表節點,而每個雜湊表節點就儲存了字典中的乙個鍵值對 雜湊表由dict.h dictht結構定義 typedef struct dictht dictht table 是乙個陣列,裡面每個元素都是乙個指向dict.h dictentry結構的指標...

資料結構 字典dict

字典內的元素是由鍵值對組成,每個鍵必須是唯一的。字典具有無序性,故在字典中需要通過鍵來訪問成員。dict1 字典中,鍵是不可變得,與鍵對應的值是可以改變的,可以包含任何其他型別。字典操作 描述dict.copy 複製字典 dict.items 獲取由鍵和值組成的列表list dict.keys 獲取...