用陣列模擬鍊錶,速度快
相當於靜態鍊錶
實現乙個單鏈表,鍊錶初始為空,支援三種操作:
(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...