串
串是由零個或多個字符組成的有限序列,又名叫字符串
1 串的比較
給定兩個串,,當滿足以下條件之一時,。
- ,且。例如,,就有。
- 存在某個,使得,。例如,,因爲兩串前4個字母均相同,而兩串第5個字母(值), 的ASCII碼是101,而 的ASCII碼是121,顯然 ,所以。
2 串的抽象數據類型
串的邏輯結構與線性表相似,不同之處在於串針對的是字符集,每個元素都是字符。此外,串的基本操作與線性表有很大差別。線性表關注的是單個元素的操作,串中更多則是查找子串位置、得到指定位置子串、替換子串等操作。
3串的存儲結構
3.1 串的順序存儲結構
用一組地址連續的存儲單元來存儲串中的字符序列。一般用定長數組爲每個定義的串變量分配一個固定長度的存儲區。這樣的存儲方式存在問題,因爲定長,在字符串操作時候,比如連接、插入新串、替換等操作時,都可能使串序列的長度超過了數組的長度MaxSize。
3.2 串的鏈式存儲結構
與線性表相似,但因爲串中每個元素都是一個字符,如果用鏈表存儲串值,一個結點對應一個字符,就會存在很大的空間浪費。因此,一個結點可以存放一個字符,可以考慮存放多個字符,最後一個結點若是未被佔滿,可用“#”或其他非串值字符補全,如圖。
當然,一個結點存多少個字符才合適顯得很重要,這會影響串處理的效率,要根據實際情況取捨。總的來說,串的鏈式存儲結構除了在連接串與串操作時有一定方便之外,不如順序存儲靈活,性能也不如順序存儲結構好。
4 樸素的模式匹配算法
5 KMP模式匹配算法
6 KMP改進
以下內容移步本博客其他文章