模板 基礎資料結構

2021-10-08 11:28:06 字數 2303 閱讀 4082

整理的演算法模板合集:acm模板

// head儲存煉表頭,e儲存節點的值,ne儲存節點的next指標,idx表示當前用到了哪個節點

int head, e[n]

, ne[n]

, idx;

// 初始化

void

init()

// 在煉表頭插入乙個數a

void

insert

(int a)

// 將頭結點刪除,需要保證頭結點存在

void

remove()

// e表示節點的值,l表示節點的左指標,r表示節點的右指標,idx表示當前用到了哪個節點

int e[n]

, l[n]

, r[n]

, idx;

// 初始化

void

init()

// 在節點a的右邊插入乙個數x

void

insert

(int a,

int x)

// 刪除節點a

void

remove

(int a)

// tt表示棧頂

int stk[n]

, tt =0;

// 向棧頂插入乙個數

stk[

++ tt]

= x;

// 從棧頂彈出乙個數

tt --

;// 棧頂的值

stk[tt]

;// 判斷棧是否為空

if(tt >0)

// hh 表示隊頭,tt表示隊尾的後乙個位置

int q[n]

, hh =

0, tt =0;

// 向隊尾插入乙個數

q[tt ++

]= x;

if(tt == n) tt =0;

// 從隊頭彈出乙個數

hh ++;if

(hh == n) hh =0;

// 隊頭的值

q[hh]

;// 判斷佇列是否為空

if(hh != tt)

/*常見模型:找出每個數左邊離它最近的比它大/小的數*/

int tt =0;

for(

int i =

1; i <= n; i ++

)

/*常見模型:找出滑動視窗中的最大值/最小值*/

int hh =

0, tt =-1

;for

(int i =

0; i < n; i ++

)

// h[n]儲存堆中的值, h[1]是堆頂,x的左兒子是2x, 右兒子是2x + 1

// ph[k]儲存第k個插入的點在堆中的位置

// hp[k]儲存堆中下標是k的點是第幾個插入的

int h[n]

, ph[n]

, hp[n]

, size;

// 交換兩個點,及其對映關係

void

heap_swap

(int a,

int b)

void

down

(int u)

}voidup(

int u)

}// o(n)建堆

for(

int i = n /

2; i; i --

)down

(i);

(1) 拉鍊法

int h[n]

, e[n]

, ne[n]

, idx;

// 向雜湊表中插入乙個數

void

insert

(int x)

// 在雜湊表中查詢某個數是否存在

bool

find

(int x)

(2) 開放定址法

int h[n]

;// 如果x在雜湊表中,返回x的下標;如果x不在雜湊表中,返回x應該插入的位置

intfind

(int x)

return t;

}

以上模板來自yxc

資料結構(二)模板

一 學後感 模板節省了空間,以前乙個函式只能用乙個資料型別來實現,但是現在應用模板後,可以用乙個函式實現多種資料在函式中的應用,節省了時間和空間。把好幾種資料型別合二為一,可以在主函式中使用合適的資料型別,非常方便 模板是對具有相同特性的函式或類的再抽象,模板是一種引數化的多型 是一種 共享機制。用...

模板 資料結構 Treap

還有人把treap叫做樹堆的,但是常用名還是叫做treap的比較多。不進行任何封裝的,帶求和操作的,乙個節點存放多個元素的最普通的treap。includeusing namespace std typedef long long ll define ls ch id 0 define rs ch ...

資料結構 演算法模板

public double quickmul double x,long n return res const int max n 1e5 5 int par max n 2 int rank max n 2 void init int n int find int x else void unit...