資料結構3 查詢與雜湊表

2021-10-03 20:47:54 字數 1743 閱讀 6989

雜湊集是集合的實現之一,它是一種儲存不重複值的資料結構。標頭檔案為,基本用法如下:

unordered_set<

int> hashset;

// 2. insert a new key

hashset.

insert(3

);// 3. delete a key

hashset.

erase(2

);// 4. check if the key is in the hash set

if(hashset.

count(2

)<=0)

// 5. get the size of the hash set

cout <<

"the size of hash set is: "

<< hashset.

size()

<< endl;

// 6. iterate the hash set

for(

auto it = hashset.

begin()

; it != hashset.

end();

++it)

cout <<

"are in the hash set."

<< endl;

// 7. clear the hash set

hashset.

clear()

;

乙個「快樂數」定義為:對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是無限迴圈但始終變不到 1。如果可以變為 1,那麼這個數就是快樂數。

示例:輸入: 19

輸出: true

解釋:1^2 + 9^2 = 82

8^2 + 2^2 = 68

6^2 + 8^2 = 100

1^2 + 0^2 + 0^2 = 1

題解:

思路:快樂數由於會不斷進行拆分產生下乙個數,因此必然採用while迴圈,關鍵在於跳出while迴圈的條件;此時,根據定義快樂數只有當其能夠迭代後產生的數變成10^n時才成立,即採用該條件作為退出while迴圈的條件,否則一直迭代。

難受,,,我太菜了我…非得用clion調,調了10分鐘才弄好

注意:n/10 > 1是錯誤的,n>10才對 ;得好好複習一下運算符號的優先順序

(

int n)

// 尋找過去是否出現該值

if(setnum.

count

(n)==0)

else

return false;

//如果迭代過程中n值處於迴圈,則必然不為快樂數

}return true;

}// 拆分整數

vector<

int>

splitnumber

(int num)

res.

push_back

(num%10)

;return res;

}// 判斷該數是否為10的整數次方,即判斷 不斷的模10最後一位是否為1

bool istenpower

(int n)

if(n%

10!=0)

return false;

return true;

}2020/3/13

資料結構 雜湊表查詢(雜湊表)

對於查詢,有順序表直接遍歷,有折半查詢直到查詢成功。但是這都需要不斷的比較,每一次查詢都需要重新遍歷,所以當資料龐大時是非常耗時的。雜湊表是一種可以避免多次比較,直接通過關鍵字就可以得到要查詢的記錄記憶體儲存位置。例如就像是乙個函式,每乙個自變數都對應著乙個函式值,即 這屬於雜湊技術,不需要比較就可...

資料結構 雜湊表(雜湊表)查詢

0 前言 順序表 乙個乙個挨個查詢 有序查詢 二分查詢方法 雜湊表查詢 記錄的儲存位置 f 關鍵字 雜湊技術是在記錄的儲存位置和他的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 查詢時,根據這個確定的對應關係找到固定值key的對映f key 若查詢集合中存在這個...

大話資料結構 雜湊表查詢(雜湊表)

雜湊技術 在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key f 雜湊函式 雜湊函式 採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續儲存空間稱為雜湊表或雜湊表。關鍵字對應的記錄儲存位置稱為雜湊位址。雜湊技術既是一種儲存方法,也是一種查詢方...