知識點 : 鍊錶與鄰接表 . 棧與佇列 . 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中所有出現的下標預處理 : 找到模板串p中,某一段字首和字尾相同,找最長的.例如 aba 在 ababa中的下標為 0 2.
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...