一維陣列模擬單鏈表 鄰接表和雙鏈表 模板

2021-09-28 23:48:57 字數 2508 閱讀 9134

單鏈表 —— 模板題 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...