Acwing資料結構 鍊錶,棧,佇列模板

2021-10-10 09:13:50 字數 1530 閱讀 2063

單鏈表 —— 模板題 acwing 826. 單鏈表

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

int head, e[n], ne[n], idx;

// 初始化

void init()

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

void insert(int a)

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

void remove()

雙鏈表 —— 模板題 acwing 827. 雙鏈表

// 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)

棧 —— 模板題 acwing 828. 模擬棧

// tt表示棧頂

int stk[n], tt = 0;

// 向棧頂插入乙個數

stk[ ++ tt] = x;

// 從棧頂彈出乙個數

tt -- ;

// 棧頂的值

stk[tt];

// 判斷棧是否為空

if (tt > 0)

佇列 —— 模板題 acwing 829. 模擬佇列

1. 普通佇列:

// hh 表示隊頭,tt表示隊尾

int q[n], hh = 0, tt = -1;

// 向隊尾插入乙個數

q[ ++ tt] = x;

// 從隊頭彈出乙個數

hh ++ ;

// 隊頭的值

q[hh];

// 判斷佇列是否為空

if (hh <= tt)

2. 迴圈佇列

// 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)

單調棧 —— 模板題 acwing 830. 單調棧

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

int tt = 0;

for (int i = 1; i <= n; i ++ )

單調佇列 —— 模板題 acwing 154. 滑動視窗

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

int hh = 0, tt = -1;

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

資料結構 棧 佇列 鍊錶

棧 1,棧只能從表的一端訪問資料,另一端是封閉的。2,在棧中,無論是存資料還是取資料,都必須遵循 先進後出 的原則,即最先進棧的元素最後出棧。基於 棧結構的特點,在實際應用中,通常只會對棧執行以下兩種操作 向棧中新增元素,此過程被稱為 進棧 入棧或壓棧 從棧中提取出指定元素,此過程被稱為 出棧 或彈...

資料結構 棧 佇列 鍊錶

棧 1,棧只能從表的一端訪問資料,另一端是封閉的。2,在棧中,無論是存資料還是取資料,都必須遵循 先進後出 的原則,即最先進棧的元素最後出棧。基於 棧結構的特點,在實際應用中,通常只會對棧執行以下兩種操作 向棧中新增元素,此過程被稱為 進棧 入棧或壓棧 從棧中提取出指定元素,此過程被稱為 出棧 或彈...

實現棧 佇列 鍊錶資料結構(java)

1.陣列實現棧 public class mystack 壓入元素 public void push int element 把新增的元素放入新的陣列中 newarr elements.length element 使用新陣列替換舊陣列 elements newarr public int pop ...