acwing 840 模擬散鍊錶 雜湊

2021-10-19 08:54:25 字數 1452 閱讀 5924

輸入樣例

5

i 1i 2

i 3q 2

q 5

輸出樣例
yes

拉鍊法 : 開乙個大於n的陣列,模n求出的 k 就是每個數雜湊之後的位置,如果多個值在同乙個位置,就拉出一條單鏈表,每個陣列的開頭就是單鏈表的頭節點

對於刪除操作,我們可以不需要真正刪除,直接新開乙個bool陣列標記一下即可

#include

#include

#include

#include

#include

using

namespace std;

const

int n =

100003

;//取大於1e5的第乙個質數

int h[n]

;//開乙個槽,每個槽拉出乙個鏈,槽作為鍊錶的頭節點

int e[n]

, ne[n]

, idx;

//陣列模擬鍊錶 頭插入(之前鍊錶有寫過)

void

insert

(int x)

bool

find

(int x)

}return

false;}

intmain()

else

else}}

return0;

}

開放定址法 : 一般開乙個2-3倍的n,然後通過模n算出對應的k ,將其放入陣列中,如果遇到相同的k,那麼就往後放,直到找到空位置即可

#include

#include

#include

#include

#include

using

namespace std;

const

int n =

200003

;//取大於1e5的第乙個質數

const

int null =

0x3f3f3f3f

;//初始化空值

int h[n]

;//開乙個2-3倍的n的陣列

intfind

(int x)

return k;

}int

main()

else

else}}

return0;

}

AcWing 840 模擬雜湊表

題目描述 維護乙個集合,支援如下幾種操作 i x 插入乙個數x q x 詢問數x是否在集合 現過 現在要進行n次操作,對於每個詢問操作輸出對應的結果。輸入格式 第一行包含整數n,表示運算元量。接下來n行,每行包含乙個操作指令,操作指令為 i x q x 中的一種。輸出格式 對於每個詢問指令 q x ...

Acwing 840 模擬雜湊表 鍊錶法模擬

解析 關於mod 一般要取質數 要離2的整次冪盡可能遠,降低衝突概率,這裡取1e5 3 對乙個數取模後,如何處理衝突?這裡就用到了鍊錶,煉表裡只有乙個頭節點,而這裡有很多頭節點,h 每個結點,對應著一組鍊錶,衝突數就存在裡面。插入時,按鏈從頭節點的插入模板即可。include include inc...

AcWing 模擬棧 棧 模擬

時 空限制 1s 64mb 實現乙個棧,棧初始為空,支援四種操作 1 push x 向棧頂插入乙個數x 2 pop 從棧頂彈出乙個數 3 empty 判斷棧是否為空 4 query 查詢棧頂元素。現在要對棧進行m個操作,其中的每個操作3和操作4都要輸出相應的結果。第一行包含整數m,表示操作次數。接下...