單鏈表的陣列實現

2021-10-03 08:29:50 字數 2393 閱讀 5046

解決圖

和樹的存

儲問題。

解決圖和樹的儲存問題。

解決圖和樹的

儲存問題

題目:

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

(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

1≤m≤100000

1≤m≤10

0000

所有操作保證合法。

輸入樣例:

10

h 9i 1 1

d 1d 0

h 6i 3 6

i 4 5

i 4 5

i 3 4

d 6

輸出樣例:

6 4 6 5
注意點:插入、

刪除操作

都是對第

k個數後

面的數進

行操作的

,因為指

針域儲存

的是下一

個節點。

插入、刪除操作都是對第k個數後面的數進行操作的,因為指標域儲存的是下乙個節點。

插入、刪除操

作都是對

第k個數

後面的數

進行操作

的,因為

指標域存

儲的是下

乙個節點。刪除

時,首先

要考慮是

否刪除的

是頭節點

。刪除時,首先要考慮是否刪除的是頭節點。

刪除時,首先

要考慮是

否刪除的

是頭節點。輸出

時從頭結

點開始,

末尾是空

,指向−

1。

輸出時從頭結點開始,末尾是空,指向-1。

輸出時從頭結

點開始,

末尾是空

,指向−

1。s ca

nf在讀

入字元時

不會跳過

空格,還

是用ci

n。

scanf在讀入字元時不會跳過空格,還是用cin。

scanf在

讀入字元

時不會跳

過空格,

還是用c

in。**:

#include

#include

#include

#include

using

namespace std;

const

int n=

1e5+10;

int head,idx;

///head頭節點,idx為當前插入節點的編號

int e[n]

,ne[n]

;///e數值域,ne指標域

void

init()

///在頭節點後增加乙個值為x的節點

void

add_head

(int x)

///在k後插入節點x

void

add(

int k,

int x)

///將下標為k的後面的節點刪除,因為指標域儲存的是下乙個節點

void

del(

int k)

intmain()

}for

(int i=head;i!=-1

;i=ne[i]

)printf

("%d "

,e[i]);

return0;

}

陣列insert 陣列實現單鏈表

單鏈表常見的實現方法有兩種,一種方式是定義乙個結構體表示鍊錶節點。比如 struct node 然後就是通過next指標將鍊錶的所有節點連線起來。如果涉及到鍊錶節點的插入和刪除操作,則只需要修改鍊錶節點的指標即可。這種方式有個明顯的缺點,就是不能隨機訪問。如果要在某個節點之後插入或者刪除節點,複雜度...

演算法( 單鏈表(以陣列實現))

用陣列模擬鍊錶,速度快 相當於靜態鍊錶 實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如...

單鏈表的實現

include includetypedef struct node 定義鍊錶 snode snode creat 建立鍊錶的函式 q next null return head int length snode head 測鍊錶的結點數 return i void display snode he...