資料結構總結筆記3 串

2021-09-25 20:39:47 字數 2200 閱讀 8917

串中元素邏輯關係與線性表的相同,串可以採用與線性表相同的儲存結構。

#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個字元起...