學習筆記(3)——串

計算機上非數值處理的對象基本爲字符串數據,一般簡稱爲。串是由零個或多個字符組成的有限序列,串中字符的數量稱爲串的長度,零個字符的串爲“空串”。串中任意個連續的字符組成的子序列稱爲“子串”。包含子串的串相應地稱爲“主串”。字符在序列中的序號稱爲該字符在串中的“位置”。子串在主串中的位置以子串的第一個字符在主串中的位置來表示。當且僅當兩個串的長度以及對應位置的字符都相等時,稱兩個串相等

串的最小操作子集:串賦值;串比較;求串長;串聯接;求子串。其他串操作均可以在這個最小子集上實現。

串的表示:

(1)定長順序存儲表示:以連續的存儲單元存儲串值字符序列。

分配一個固定長度的存儲區,可用定長數組表示。串的實際長度在預定義長度範圍內是隨意的,超過預定義長度的部分被捨去,稱爲“截斷”。這種類似線性表的順序存儲結構的串有兩種表示串長的方式:①以下標爲0的數組分量存放串的實際長度;②串後加一個不計入串長的結束標記字符,如C語言中的字符串以“\0”結束。

(2)堆分配存儲表示:仍以一組連續的存儲單元存儲串值字符序列,但是他們的存儲空間是在程序執行過程中動態分配得到的。C語言中用mallloc()和free()來管理。以結構體的形式來表示,結構體中包含指向串首的指針和串的實際長度。

(3)塊鏈存儲表示:採用鏈表的方式存儲串值。每個節點可以儲存一個字符,也可以存儲多個字符,存儲字符的多少稱爲“節點大小”。串長不一定是節點大小的整數倍,則最後一個節點中不滿的存儲空間用非串值得字符代替,如#等。


存儲密度=串值所佔的存儲位/實際分配的存儲位。


串的模式匹配算法

子串的定位操作通常稱作串的模式匹配,其中子串稱爲模式串。

算法1:採用順序存儲結構,可以不依賴其他串操作的匹配算法

基本思想:從主串中的第1個字符(或人爲規定)起,和模式串的第一個字符比較,若相等,則繼續比較後邊一個字符;否則從主串的下一個字符開始重新開始匹配。

該種算法在某些情況下效率比較低,如子串爲“00000000001”,主串爲“0000000000000000000000000000000000001”。

算法2:KMP算法

基本思想:每當一次匹配中出現字符不相等的情況,利用已經得到的“部分匹配”的結果將模式串向右“滑動”儘可能遠的一段距離後繼續進行比較。


發佈了17 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章