線性表(3) 雜湊鍊錶

2021-09-13 18:51:24 字數 3403 閱讀 8306

#pragma once

#ifndef key_value_pair_h

#define key_value_pair_h

template class key_value_pair

//有參構造

key_value_pair(key_type m_key, value_type m_value)

:key(m_key), value(m_value)

{} //拷貝構造

key_value_pair(const key_value_pair& m_kv_pair)

:key(m_kv_pair.key), value(m_kv_pair.value)

{} //過載賦值運算子

void operator= (const key_value_pair& m_kv_pair) };

#endif // !key_value_pair_h

#pragma once

#ifndef single_link_list_node

#define single_link_list_node

template class single_link_list_node

//預設建構函式

//為頭指標,尾指標,當前指標的定義提供不用沒有值的構造方法

single_link_list_node(next_pointer m_next = nullptr)

{} //過載new運算子

void* operator new(size_t)

//過載delete運算子

void operator delete(void* free_node)

bool operator==(const_node_reference node) };

//類的靜態變數的初始化

template single_link_list_node* single_link_list_node::node_pool = nullptr;

#endif

#pragma once

#include "single_link_list_node.h"

#include #include template class single_link_list

void removeall() }

//滿足某種異常條件,丟擲異常,列印錯誤資訊

void judge_outofrange(bool condition, const std::string& printinfo)

}catch (bool)

}public:

single_link_list()

~single_link_list() //這裡析構函式其實還是虛函式,因為它的父類是

void clear()

//single_link_list(const single_link_list& list)

// //預設刪除和插入操作都是對當前結點的下乙個結點操作,這樣寫方便操作

void insert(const_value_reference value)

value_type remove()

void prev()

void next()

int length() const

const_value_reference getvalue()

int currpos()const

return i;

} void movetoposition(int position)

current_type getcurr()

};

#pragma once           

#ifndef hash_table_h

#define hash_table_h

#include #include "single_link_list_node.h"

#include "single_link_list.h"

#include "key_value_pair.h"

#define default_size 10

templateclass hashtable

public:

//建立雜湊鍊錶

hashtable(int size=default_size)

//插入

void insert(key key,value value)

else

}//刪除

value remove(key key)

else

}//查詢

int find(key key)

}return 0;

} value getvalue()

//遍歷列印

void print()

}} int length() };

#endif

#include "hash_link_table.h"

#include #includeusing namespace std;

typedef int postion;

int main();

hashtablehashtable;

cout << "測試insert,find,getvalue" << endl;

hashtable.insert(0,names[0]);

hashtable.insert(1,names[1]);

hashtable.insert(2,names[2]);

hashtable.insert(3,names[3]);

for (int i = 0; i < 6; i++)

cout << "\n測試length" << endl;

cout << "雜湊表中元素的個數為:" << endl;

cout << hashtable.length() << endl;

cout << "\n遍歷雜湊表列印每乙個元素" << endl;

hashtable.print();

cout << "\n測試remove" << endl;

hashtable.remove(2);

cout << "\n雜湊表中元素的個數為:" << endl;

cout << hashtable.length() << endl;

cout << "\n遍歷雜湊表列印每乙個元素" << endl;

線性表(3) 靜態鍊錶

靜態鍊錶 1.利用連續的靜態儲存空間模擬實現鍊錶的操作 2.建立資料鏈表,利用游標作為指標,指向下一元素儲存位置,l max 1 cur為頭指標,指向第乙個資料元素 3.建立空閒結點鍊錶,利用游標作為指標,指向下一空閒結點位置,l 0 cur為頭指標,指向第乙個空閒結點所在位置 4.l 0 data...

線性表 3靜態鍊錶

通過上面的學習我們知道,靜態鍊錶儲存資料元素也需要自定義資料型別,至少需要包含以下 2 部分資訊 include define maxsize 7 typedef struct component 將結構體陣列中所有分量鏈結到備用鍊錶中 void reservearr component array...

線性表 鍊錶

線性表的adt list.h 線性表的c 抽象類宣告 templateclass list 單鏈表節點的定義 link.h 單鏈表節點類的定義 template class link link link nextval null 鍊錶的實現宣告 成員函式的是實現 鍊錶的實現宣告 include st...