資料結構 day 12

2021-10-05 03:09:41 字數 2066 閱讀 2037

雙鏈表

問題

實現乙個雙鏈表,雙鏈表初始為空,支援5種操作:

(1) 在最左側插入乙個數;

(2) 在最右側插入乙個數;

(3) 將第k個插入的數刪除;

(4) 在第k個插入的數左側插入乙個數;

(5) 在第k個插入的數右側插入乙個數

現在要對該鍊錶進行m次操作,進行完所有操作後,從左到右輸出整個鍊錶。

注意:題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的時間順序,這n個數依次為:第1個插入的數,第2個插入的數,…第n個插入的數。

輸入格式

第一行包含整數m,表示操作次數。

接下來m行,每行包含乙個操作命令,操作命令可能為以下幾種:

(1) 「l x」,表示在鍊錶的最左端插入數x。

(2) 「r x」,表示在鍊錶的最右端插入數x。

(3) 「d k」,表示將第k個插入的數刪除。

(4) 「il k x」,表示在第k個插入的數左側插入乙個數。

(5) 「ir k x」,表示在第k個插入的數右側插入乙個數。

輸出格式

共一行,將整個鍊錶從左到右輸出。

資料範圍

1≤m≤100000

所有操作保證合法。

輸入樣例

10

r 7d 1

l 3il 2

10d 3

il 2

7l 8

r 9il 4

7ir 2

2

輸出樣例

877

329

雙鏈表的一些操作

#include

using

namespace std;

const

int n =

100010

;int m;

int e[n]

, l[n]

, r[n]

, idx;

//初始化

void

init()

//在下標是k的點的右邊,插入x

void

add(

int k,

int x)

//刪除第k個點

void

remove

(int k)

完整**實現

//雙鏈表鍊表_c++_day_12_4.15

//鍊錶與鄰接表

//棧和佇列

//kmp

#include

#include

using

namespace std;

const

int n =

100010

;int e[n]

, l[n]

, r[n]

, idx;

void

init()

void

add(

int k,

int x)

void

remove

(int k)

intmain()

else

if(op ==

"r")

else

if(op ==

"d")

else

if(op ==

"il"

)else

}for

(int i = r[0]

; i !=

1; i = r[i]

) cout << e[i]

<<

' ';

cout << endl;

return0;

}

資料結構Day12

首先需要明確的是二叉樹和二叉查詢樹的區別 二叉樹就是我們正常所理解的這種樹形結構,每乙個節點都包含乙個項和兩個指向其他節點 稱為子節點 的指標,分為左節點和右節點。樹的頂部,稱為根 當乙個節點沒有子節點時,稱為葉節點。而二叉查詢樹是在二叉樹的基礎上有如下規定 左節點的項在父節點的項前面,右節點的項在...

day12 上下分頁

modelandview.addobject houses pageinfo.getlists pageinfo pageinfo ihouseservice.searchhouseviewbytype currentpage,housetype modelandview.addobject pag...

實習日記 Day12

昨天穿少了,今天穿厚了。即使脫下外套,坐在辦公室的我也覺得好熱啊 今天是糾結的一天呢 1.實習生的小小感傷仍在延續 今天在和外國同事郵件聯絡的時候,無意中發現自己的skype內建備註是unpaid intern,無薪實習生 雖然我每天是有一些薪水的,但這點錢跟正式員工比,其實跟無薪差不多了吧 又想起...