adt 串(string)
data
串中元素僅由乙個字元組成,相鄰元素具有前驅和後繼關係。
operation
strassign
(t,*chars)
: 生成乙個其值等於字串常量chars的串t。
strcopy
(t,s)
: 串s存在,由串s複製得串t。
clearstring
(s): 串s存在,將串清空。
stringempty
(s): 若串s為空,返回true,否則返回false
strlength
(s): 返回串s的元素個數,即串的長度。
strcompare
(s,t)
: 若s>t,返回值》
0,若s=t,返回0
,若s0。 concat
(t,s1,s2)
: 用t返回由s1和s2連線而成的新串。
substring
(sub,s,pos,len)
: 串s存在,1
<=pos<=
strlength
(s),且0
<=len<=
strlength
(s)-pos+1,
用sub返回串s的第pos個字元其長度為len的子串。
index
(s,t,pos)
:串s和t存在,t是非空串,1
<=pos<=
strlength
(s)。
若珠串s中存在和串t值相同的元素則返回它在珠串s中
第pos個字元之後第一次出現的位置,否則返回0。
replace
(s,t,v)
: 串s、t和v存在,t是非空串。用v替換主串s**現的
所有與t相等的不重疊子串。
strinsert
(s,pos,t)
: 串s和t存在,1
<=pos<=
strlength
(s)+
1,在串s的第pos個字元之前插入串t。
strdelete
(s,pos,len)
: 串s存在,1
<=pos<=
strlength
(s)-len+
1。 從串s中刪除第pos個字元起長度為len的子串。
endadt
/*t為非空串。若主串s中第pos個字元之後存在與t相等的子串*/
/*則返回第乙個這樣的子串在s中的位置,否則返回0*/
intindex
(string s, string t,
int pos)
}return0;
}
串的鏈式儲存結構:與線性表類似,但如果乙個結點放乙個字元會存在很大浪費,因此乙個結點可放多個字元,最後乙個結點若是未被沾滿,可用"#"或其他非串值字元補全。
/*樸素的模式匹配,時間複雜度o((n-m+1)*m)。
返回子串t在主串s中第pos個字元之後的位置。若不存在,則返回0
t非空,1<=pos<=strlength(s)
假設主串s和要匹配的子串t的長度存在s[0]與t[0]中
實現:從主串 s 的第 pos 個字元起和模式 t 的第乙個字元比較之,
若相同,則兩者順次的去比較後續的每乙個字元,
否則從主串 s 的下乙個字元起再重新和模式 t 的字元比較之。
*/int
index
(string s, string t,
int pos)
else
if(j>t[0]
)/*若匹配完,肯定是子串先比完*/
return i-t[0]
;else
return0;
}}
/*計算next陣列*/
void
get_next
(string t,
int*next)
else
j=next[j]
;/*若字元不相同,則j值回溯*/}}
intindex_kmp
(string s, string t,
int pos)
else}if
(j>t[0]
)return i-t[0]
;else
return0;
}//get_next時間複雜度o(m),index_kmp時間複雜度o(n),整個演算法時間複雜度o(m+n)。
void
get_nextval
(string t,
int*nextval)
}}
資料結構筆記 第五章
一.樹的邏輯結構 樹是乙個有限的集合,集合中的元素稱為結點。1 結點的個數為0 稱為空樹。2 結點的個數為1 此節點稱為根節點。3 節點的個數大於1 則除了根結點以外的結點又可分為多個集合,每乙個集合本身其實質上也是一棵樹,並且是根節點的子樹。二.二叉樹的邏輯結構 1 二叉樹的定義 二叉樹首先必須是...
資料結構筆記 第五章
雙親表示法 基本思想 用一維陣列來儲存樹的各個結點 一般 按層序儲存 陣列中的乙個元素對應樹中的乙個 結點,包括結點的資料資訊以及該結點的雙親在數 組中的下標 森林轉換為二叉樹 將森林中的每棵樹轉換成二叉樹 從第二棵二叉樹開始,依次把後一棵二叉樹的根 結點作為前一棵二叉樹根結點的右孩子,當所有二 叉...
資料結構筆記 第五章
樹的定義是採用遞迴方法 孩子 雙親 樹中某結點子樹的根結點稱為這個結點的孩子結點,這個結點稱為它孩子結點的雙親結點 兄弟 具有同乙個雙親的孩子結點互稱為兄弟。路徑 如果樹的結點序列n1,n2,nk有如下關係 結點ni是ni 1的雙親 1 idestroytree 前置條件 樹已存在 輸入 無 功能 ...