單鏈表 —— 模板題 acwing 826. 單鏈表
實現乙個單鏈表,鍊錶初始為空,支援三種操作:
(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
所有操作保證合法。
輸入樣例:
10h 9
i 1 1
d 1d 0
h 6i 3 6
i 4 5
i 4 5
i 3 4
d 6輸出樣例:
6 4 6 5
#include#define n 100000+10
using namespace std;
int head=-1,e[n],ne[n],idx=0;
void add_head(int x)
void insert(int k,int x)
void del(int k)
int main()
if (c=='d')
if (c=='i')
}for (int i=head;i!=-1;i=ne[i])
cout《單鏈表說明
// head儲存煉表頭
//e儲存節點的值
//ne儲存節點的next指標
//idx表示當前用到了哪個節點
int head, e[n], ne[n], idx;
// 初始化
void init()
// 在煉表頭插入乙個數x
void insert(int x)
//把x插入到下標是k的點後面
void add(int k,int x)
//將下標是k的點的後面乙個點刪除
void del(int k)
// 將頭結點刪除,需要保證頭結點存在
void del_herad()
鄰接表(多個單鏈表,用來在儲存圖和樹)
方法1:
結構體模擬鄰接表:為每個點開個單鏈表,分別儲存該點的所有鄰邊
void insert(int u, int v)
**解釋
u所連的邊構成了一條鍊錶,p[u]是頭節點,表示的是邊的標號
e[i].v表示第 i 條邊所到達的點,
e[i].next是鍊錶中的下乙個節點,表示的也是邊的標號
int h[n], e[m], v[m], ne[m], idx; // 陣列模擬鄰接表
#include using namespace std;
const int n = 100010, m = 2000010;
int n, m;
int price[n];
int h[n], rh[n], e[m], ne[m], idx;
int dmin[n], dmax[n];
bool st[n];
void add(int a, int b)
void spfa(int *d, int start, int *h, bool flag)}}
}}int main()
spfa(dmin, 1, h, true);
spfa(dmax, n, rh, false);
int res = 0;
for (int i = 1; i <= n; i ++ ) res = max(res, dmax[i] - dmin[i]);
printf("%d\n", res);
return 0;
}
雙鏈表 —— 模板題 acwing 827. 雙鏈表
// e表示節點的值,l表示節點的左指標,r表示節點的右指標,idx表示當前用到了哪個節點
int e[n], l[n], r[n], idx;
// 初始化
void init()
// 在節點a的右邊插入乙個數x
void insert(int k, int x)
// 刪除節點k
void remove(int k)
資料結構之陣列 單鏈表和雙鏈表的介紹
線性表是一種線性結構,它是具有相同型別的n n 0 個資料元素組成的有限序列。本章先介紹線性表的幾個基本組成部分 陣列 單向鍊錶 雙向鍊錶 陣列有上界和下界,陣列的元素在上下界內是連續的。陣列的特點是 資料是連續的 隨機訪問速度快。陣列中的難點是多維陣列和動態陣列。多維陣列本質上也是通過一維陣列實現...
一表讀懂順序表和單鏈表
順序表單鍊錶 定義具有相同特性的資料元素的有限序列 線性表的鏈式儲存結構,每個節點都有唯一的前驅節點和唯一的後繼節點,用一組任意的儲存單元儲存線性表的資料元素 優點 儲存密度大,無需為線性表之間的邏輯關係而增加額外的儲存空間 具有隨機訪問特性 採用節點的動態分配方式,具有良好的適應性 缺點 插入和刪...
鍊錶問題 在單鏈表和雙鏈表中刪除倒數第K個節點
題目 在單鏈表和雙鏈表中刪除倒數第k個節點。要求時間複雜度o n 空間複雜度o 1 基本思路 方法一。從煉表頭開始走到尾,每移動一步,k減1。移動完之後,如果k 0,說明鍊錶長度不夠k,根本就沒有倒數第k個值,返回頭節點 head 如果k 0,說明鍊錶的長度等於k,頭節點就是倒數第k個節點,返回 h...