第二章 資料結構 一

2021-10-23 23:16:28 字數 2506 閱讀 7779

知識點 : 鍊錶與鄰接表 . 棧與佇列 . kmp

*****

//head表示煉表頭,e表示節點,ne表示next指標,idx表示當前點 

int head,e[n]

,ne[n]

,idx;

void

init()

//在頭節點插入乙個數

void

insert

(int a)

//刪除頭節點

void

remove()

//將x插到k節點的後面

void

add(

int k,

int x)

//將k結點後面的數字刪除

void

remove

(int k)

//遍歷:

for(

int i = head;i !=-1

;i = ne[i]

)cout << e[i]

<<

" ";

//該點的值,該點的左點,該點的右點,當前的下標 

int e[n]

,l[n]

,r[n]

,idx;

void

init()

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

//在k的左邊插入等於在l[k]的右邊插入

void

add(

int k,

int x)

//刪除第k個點

void

remove

(int k)

//模擬棧,tt表示棧頂 

int stk[n]

,tt;

//棧頂插入

stk[

++tt]

= x;

//棧頂彈出

tt--

;//判斷棧是否為空

if(tt >0)

//在隊尾插入元素,在隊頭彈出元素

int q[n]

,hh,tt =-1

;//隊尾插入

q[++tt]

= x;

//隊頭彈出

hh++

;//是否為空

if(hh <= tt)

//取出隊頭

q[hh]

找到乙個序列中每個數左邊離他最近的比他大/小的數 .

優化

//找到每個數左邊離他最近的,比他小的數 

int n,stk[n]

,tt;

intmain()

return0;

}

滑動視窗,輸出乙個視窗中最大值和最小值

優化 : 如果求最小值,列舉到i時,如果佇列的尾部比a[i]大,去掉尾部,再把a[i]放進去,頭部維護最小值的下標

//單調佇列

int a[n]

,q[n]

,n,k;

//q記錄對應下標

intmain()

int hh =

0,tt =-1

;for

(int i=

0;i)puts(""

);hh =

0,tt =-1

;for

(int i=

0;i)return0;

}

求模板串p在s中所有出現的下標

例如 aba 在 ababa中的下標為 0 2.

預處理 : 找到模板串p中,某一段字首和字尾相同,找最長的.

next[i] = j 表示 p[1 ~ j] == p[ i - j + 1 ~ i] , 以i為終點前面這一段最少的移動距離,直接呼叫

例如 : p = 「abababab」,ne[1] = 0,ne[2] =0 ,ne[3] = 1, ne[6] = 4,表示在ababab中.1 ~4 等於3 ~ 6.

const

int n =

10010

,m =

100010

;int n,m;

char p[n]

,s[m]

;int ne[n]

;int

main()

for(

int i=

1,j=

0;i<=m;i++)if

(s[i]

== p[j+1]

)j++;if

(j == n)

}return0;

}

第二章 資料結構 二

知識點 trie樹 並查集,堆的操作 高效地儲存和查詢字串集合的資料結構 const int n 100010 int son n 26 cnt n idx 插入 void insert char str cnt p 以這個點結尾的字元數 查詢 intquery char str return cn...

資料結構 第二章總結

線性表是由n 0 個資料元素組成的有限序列。我們學習了線性表上定義的基本運算 有構造空表 initlist l 求表長 listlength l 取結點 getnode l i 查詢 locatenode l x 插入 insertlist l x,i 刪除 delete l i 還學習了順序表 單...

資料結構第二章總結

線性表簡稱表,是n個具有相同型別的資料元素的有限序列。線性表中資料元素的個數稱為線性表的長度。長度為零時稱為空表。線性表中資料元素的型別是同一的。線性表的順序儲存結構稱為順序表。儲存結構是資料及其邏輯結構在計算機中的表示 訪問結構是在乙個資料結構上對查詢操作的時間效能的一種描述。順序表的類的宣告 c...