資料結構 單鏈表(C 版)

2021-10-08 07:24:58 字數 1829 閱讀 5880

模擬鍊錶

用兩個陣列模擬動態鍊錶,因為c++中動態記憶體申請太慢,所以用靜態的陣列模擬動態鍊錶,提高演算法效率。

基本思路

與動態鍊錶的操作原理和步驟大致相同,只不過是用陣列代替節點,用變數代替指標

模板

// head儲存煉表頭,e儲存節點的值(即資料域),ne儲存節點的next指標(即指標域),idx表示當前用到了哪個節點

int head, e[n]

, ne[n]

, idx;

// 初始化

void

init()

// 在煉表頭插入乙個數a

void

insert

(int a)

// 將頭結點刪除,需要保證頭結點存在

void

remove()

例題

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

(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

所有操作保證合法。

輸入樣例:

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

using

namespace std;

const

int n =

100010

;int m;

int n[n]

, ne[n]

, idx, head;

//初始化

void

init()

//插入頭結點

void

add_to_head

(int x)

//在第k個節點後插入乙個節點

void

add(

int k,

int x)

//刪除第k個節點後的乙個節點

void

remove_1

(int k)

intmain()

else

if(op ==

'd')

else

}for

(int i = head; i !=-1

; i = ne[i]

) cout << n[i]

<<

' ';

return0;

}

資料結構之單鏈表 C 版

include include using namespace std typedef string elemtype typedef struct lnodelnode,slink void initlist slink l void locateelem slink l void listins...

資料結構C 版筆記 單鏈表 LinkList

而鍊錶結構正好相反,先來看下結構 每個元素至少具有二個屬性 data和next。data用來存放資料,而next用來指出它後面的元素是誰 有點 指標 的意思 鍊錶中的元素,通常也稱為節點node,下面是泛型版本的node.cs namespace 線性表 public node nodep publ...

C 資料結構 單鏈表

c 實現 首先,構造乙個單鏈表的節點類 class link 然後是以這個節點類為基礎,建立單鏈錶類 這裡簡單實現了單鏈表的兩個功能新增和輸出 class linklist if head.next null else if head.next null 列印全部資料 public void pri...