acwing演算法基礎課 資料結構 單鏈表

2021-10-19 22:52:17 字數 1537 閱讀 1680

實現乙個單鏈表,鍊錶初始為空,支援三種操作:

(1) 向煉表頭插入乙個數;

(2) 刪除第k個插入的數後面的數;

(3) 在第k個插入的數後插入乙個數

現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。

注意:題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的時間順序,這n個數依次為:第1個插入的數,第2個插入的數,…第n個插入的數。

輸入格式

第一行包含整數m,表示操作次數。

接下來m行,每行包含乙個操作命令,操作命令可能為以下幾種:

(1) 「h x」,表示向煉表頭插入乙個數x。

(2) 「d k」,表示刪除第k個插入的數後面的數(當k為0時,表示刪除頭結點)。

(3) 「i k x」,表示在第k個插入的數後面插入乙個數x(此操作中k均大於0)。

輸出格式

共一行,將整個鍊錶從頭到尾輸出。

資料範圍

1≤m≤100000

所有操作保證合法。

輸入樣例:

10

h 9i 1

1d 1

d 0h 6

i 36

i 45

i 45

i 34

d 6

輸出樣例:

646

5

實現乙個靜態鍊錶

使用結構體的鍊錶每個node包含value和next指標

在這裡的指標指的都是陣列的下標

我們使用head變數充當頭指標,指示鍊錶的頭結點

e陣列和ne陣列組合實現結構體的功能,即e[i]儲存i號元素的value屬性,ne[i]儲存i號元素的next指標

idx指的是當前可分配的空間,例如idx初始等於0 就表示下標為的0的空間可用,新的元素到來可以放在e[0]和ne[0]中

至於鍊錶的頭插尾插 還有刪除 沒有任何區別,就是形式不一樣了,內涵還是一致的

還有就是**中很多k都是當作k-1是因為題目的元素下表是從1開始的,而我們的習慣是從0開始的

#include

using

namespace std;

const

int n=

100000+10

;int head=-1

,e[n]

,ne[n]

,idx;

intmain()

else

if(op==

'i')

else

}for

(int i=head;i!=-1

;i=ne[i]

) cout<<<

' ';

cout

}

AcWing 演算法基礎課 動態規劃

1 揹包問題 1 01揹包 每件物品僅用一次 可以做空間優化 dp j max dp j dp j v i w i 0,1揹包狀態均是從前一迴圈的狀態轉移 2 完全揹包 每件物品可以用無限次 完全揹包的狀態可以從當前迴圈的狀態轉移,進行優化 3 多重揹包 每件物品有不同的數量限制 可以對物品的數量限...

Acwing演算法基礎課知識點

知識點 基礎演算法 模板鏈結常用 模板1 基礎演算法 排序 二分高精度 字首和與差分 雙指標演算法 位運算離散化 區間合併 資料結構 模板鏈結常用 模板2 資料結構 鍊錶與鄰接表 樹與圖的儲存 棧與佇列 單調佇列 單調棧 kmptrie 並查集堆 hash表 c stl使用技巧 搜尋與圖論 模板鏈結...

Acwing 基礎課 基礎演算法 歸併排序

參考鏈結 include const int n 100005 int a n int t n voidms int l,int r while i mid t k a i while j r t k a j for int i l i r i intmain 題目鏈結 參考鏈結 題目大意 給定乙個...