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

2021-10-23 13:12:57 字數 1774 閱讀 9891

用陣列模擬鍊錶,速度快

相當於靜態鍊錶

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

(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

using

namespace std;

const

int n=

1000010

;//head表示頭結點的下標

//e[i]表示節點i的值

//ne[i]表示節點i的next指標是多少(類似於第乙個插入的下標)

//idex 作為指標,儲存當前插入的是第幾個點

int head,e[n]

,ne[n]

,idx;

//初始化

void

init()

//插入方法:將點c需要插入到ab之間 首先,c指標b,刪除a指向b,a指向c

//將x插入到頭結點

void

add_to_head

(int x)

//將x插入到座標是k的點後面

void

add(

int k,

int x)

//將下標是k的點後面的點刪掉(跳過中間的點,指向後面的點)

部分實現過程

陣列insert 陣列實現單鏈表

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

單鏈表的陣列實現

解決圖 和樹的存 儲問題。解決圖和樹的儲存問題。解決圖和樹的 儲存問題 題目 實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插...

單鏈表快速排序演算法實現

單鏈表結構 typedef int elemtype typedef struct listnode list struct listnode 實現 如下 void quicksort list head,list tail p next mid q next tail quicksort head...