實現乙個單鏈表,鍊錶初始為空,支援三種操作:
(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 題目鏈結 參考鏈結 題目大意 給定乙個...