4.0串也成為字串,是一種特殊的線性表,是由零個或多個字串組成的有限序列,一般記為 s = 『a1a2…an』。
4.1兩個串的長度相等並且對應的值相等,那麼這兩個串相等。
4.2空串和空格串的區別
空串: s=''
空格串: 由乙個或多個空格組成的
4.3串的抽象資料型別
adt string // 元素
資料關係:r1 = // 序偶關係
基本操作:
strassign(&t, chars)
初始條件:chars是字串常量。
操作結果:生乙個其值等於chars的串
strcopy(&t, s)
初始條件:s存在
操作結果 :由串s複製得串t
…
}adt string
4.4串的實現
(1) 陣列(靜態儲存):利用連續的儲存單元進行儲存,缺點:陣列的長度固定,不易進行擴充套件。如果在某些操作之後,超過陣列的長度(插入,置換,連線等),約定用截尾法處理。
(2)堆分配儲存:也是才用一組連續的儲存單元進行儲存,但是儲存空間是在程式執行過程中動態分配的。
(3) 塊鏈儲存:既然串是一種特殊的線性表,那麼也可以用鏈式儲存方法實現。那麼儲存中節點的大小就是不確定的,儲存元素不夠節點的大小,就採用』#『 填充。
4.5串的模式匹配(子串的定位演算法)
(1)bf演算法
演算法思想:
●將主串的第pos個字元和模式串的第乙個字元比較,
.若相等,繼續逐個比較後續字元;
.若不等,從主串的下一字元起,重新與模式串的第乙個字元比較。
●直到主串的乙個連續子串字串行與模式串相等。返回值
為s中與t匹配的子串行第乙個字元的序號,即匹配成功。
●否則,匹配失敗,返回值0
// **(c語言)
// 從第乙個字元開始查詢
int index_bf(char s, char t)else
}if(j >= t.length - 1)else
}
// 公升級版 從指定位置開始查詢
int index_bf(char s, char t, int pos)else
} if(j >= t.length - 1)else
}時間複雜度:
假設主串長度為n,子串長度為m,
最好的情況下匹配了 m次
最壞的情況為 (n-m)*m+m
主串前面n-m個位置都部分匹配到子串的最後一-位,即這n-m位各比較了m次,最後m位也各比較了1次
所以 演算法複雜度為 o(n*m)
(2)kmp演算法
bf演算法所耗時間較長。kmp演算法在bf演算法上進行了改進,主串的指標不必回溯以及子串的指標不必回到第乙個元素,演算法複雜度可提速到o(m+n)
資料結構(四) 串
串 string 是由零個或多個字元構成的有限序列,又叫字串 空格串 只包含空格的串 空串 零個字元的串 串的大小比較 對於數字來說,1與2 誰大誰小不用討論,但是 兩個字串怎麼比較大小呢?計算機的常用字元是使用標準的ascii編碼。所以我們字串的比較就是逐個的比較ascii值的大小 串的一些操作函...
漫談資料結構 四 串
串又稱字串,是比較常見的乙個資料結構,它由0或多個字元構成,一般定義為s abcdegf 字元的個數稱為串的長度。長度為0的串為空串,記為s 由空格組成的串為空格串,空格也是字元,記為s 目前,隨著科學技術的發展,非數值處理的情況越來越多,學好字串的處理變得尤為重要,本文將介紹字串處理的幾個基本方法...
資料結構實驗四 串
一 實驗目的 通過訓練,加深理解並把握串的基本運算的特點。二 實驗內容 問題描述 本題目中的串編輯要求對串實現以下兩種功能 本題目中的串編輯要求對串實現以下兩種功能 插入 把乙個字串插入到給定串的指定位置 刪除 將串中某指定位置開始的若干字元從串中刪除 參考程式 include include in...