串中元素邏輯關係與線性表的相同,串可以採用與線性表相同的儲存結構。
#define maxsize 100
typedef struct
sqstring;
串抽象資料型別=邏輯結構+基本運算(運算描述)
串的基本運算如下:
strassign(&s,cstr):將字串常量cstr賦給串s,即生成其值等於cstr的串s。
strcopy(&s,t):串複製。將串t賦給串s。
strequal(s,t):判串相等。若兩個串s與t相等則返回真;否則返回假。
strlength(s):求串長。返回串s中字元個數。
concat(s,t):串連線:返回由兩個串s和t連線在一起形成的新串。
substr(s,i,j):求子串。返回串s中從第i(1≤i≤n)個字元開始的、由連續j個字元組成的子串。
insstr(s1,i,s2):插入。將串s2插入到串s1的第i(1≤i≤n+1)個字元中,即將s2的第乙個字元作為s1的第i個字元,並返回產生的新串。
delstr(s,i,j):刪除。從串s中刪去從第i(1≤i≤n)個字元開始的長度為j的子串,並返回產生的新串。
repstr(s,i,j,t):替換。在串s中,將第i(1≤i≤n)個字元開始的j個字元構成的子串用串t替換,並返回產生的新串。
dispstr(s):串輸出。輸出串s的所有元素值。
串的順序儲存/定長儲存結構
兩種方法:1,每個單元(如4個位元組)只存乙個字元,稱為非緊縮格式(其儲存密度小)。
2,每個單元存放多個字元,稱為緊縮格式(其儲存密度大)。
順序串中實現串的基本運算與順序表的基本運算類似。
串的堆儲存/變長儲存結構
鏈串的組織形式與一般的鍊錶類似。
*鏈串中的乙個結點可以儲存多個字元
。 *通常將鏈串中每個結點所儲存的字元個數稱為結點大小。
typedef struct snode
linkstrnode;
鏈串只能採用單鏈表嗎?不一定。需要根據需要情況而定。 如果需要從某個結點出發前後查詢
,可以採用雙鏈表。
如果需要快速查詢尾結點
,可以採用迴圈雙鏈表。
成功是指在目標串s中找到乙個模式串t----------t是s的子串,返回t在s中的位置。
不成功則指目標串s中不存在模式串t------------t不是s的子串,返回-1。
簡單匹配演算法:brute-force簡稱為bf演算法,亦稱簡單匹配演算法。採用窮舉的思路。bf是指暴力的意思!
演算法的思路是從s的每乙個字元開始依次與t的字元進行匹配。
int index(sqstring s,sqstring t)
最好情況下的時間複雜度為o(m)。最壞情況下的時間複雜度為o(n×m)。平均的時間複雜度為o(n×m)。
kmp演算法是d.e.knuth、j.h.morris和v.r.pratt共同提出的,簡稱kmp演算法。
該演算法較bf演算法有較大改進,主要是消除了主串指標的回溯,從而使演算法效率有了某種程度的提高。
void getnext(sqstring t,int next) //由模式串t求next值的演算法:
演算法分析:設串s的長度為n,串t長度為m。
在kmp演算法中求next陣列的時間複雜度為o(m),在後面的匹配中因主串s的下標不減即不回溯,比較次數可記為n,所以kmp演算法平均時間複雜度為o(n+m)。 最壞的時間複雜度為o(n × m)。
補充1:串的模式匹配中next陣列的求解
步驟(1)初始化next[1]=0 next[2]=1;
步驟(2)求next[j],令k=next[j-1]
步驟(3)s[j-1] s[k] 比較大小
= ,next[j]=k+1
!= ,k=next[k], k!=0, 返回(3);
= 0,next[j]=1
掌握字串的兩種儲存結構,即定長儲存結構和堆儲存結構,能夠在兩中儲存結構上實現字串的各種運算,
掌握字串的模式匹配運算及相應的改進演算法。
資料結構 3 串
串 string 是由零個或者多個字元組成的有限序列,又名叫字串。adt 串 string data 串中元素僅由乙個字元組成,相鄰元素具有前驅和後繼關係。operation strassign t,chars 生成乙個其值等於字串常量chars的串t。strcopy t,s 把串s複製到串t。cl...
資料結構筆記 串
1.1 串概念 1.2 bf 演算法 1.3 kmp 演算法 kmp 演算法 演算法的核心 next 陣列元素的確定 該演算法與目標串 s 無關,只與匹配串 t 的失配位置的前字尾數量有關 t 9 a b a b a a a b a 下標 0 1 2 3 4 5 6 7 8 9 next 0 1 1...
資料結構筆記 串
好好學習,天天向上本文已收錄至我的github倉庫daydayup 串 string 是由零個或多個字元組成的有限序列。include using namespace std define maxlen 255 typedef struct sstring 求子串。用sub返回串s的第pos個字元起...