資料結構 串

2021-10-01 05:08:22 字數 1401 閱讀 4659

串的模式匹配

定義:是由零個或多個字元組成的有限序列。

串中所含字元的個數稱為該串的長度,含零個字元的串稱為空串。

串相等:當且僅當兩個串的長度相等並且各個對應位置上的字元都相同。所有空串都相等。

子串:乙個串中任意個連續字元組成的子串行(含空串)稱為該串的子串。

真子串:不包含自身的所有子串。

兩種方法:

1、每個單元只存乙個字元,稱為非緊縮格式(其儲存密度小)。

2、每個單元存放多個字元,稱為緊縮格式(其儲存密度大)。

非緊縮格式字串型別定義:

#define maxsize 100

typedef

struct

sqstring;

例題:設計順序串上實現串比較運算strcmp(s,t)的演算法。

思路:(1)比較s和t兩串共同長度範圍內對應字元:

若s的字元》t的字元,返回1;若s的字元t返回1,sint

strcmp

(sqstring s,sqstring t)

鏈串中的乙個節點可以儲存多個字元。通常將鏈串中每個節點所儲存的字元個數稱為節點大小。

節點型別定義:

typedef

struct snode

listring;

//串操作通常帶有頭節點

簡單匹配演算法,窮舉思路

int

index

(sqstring s,sqstring t)

//主串和子串依次匹配下乙個字元

else}if

(j>=t.length)

return

(i-t.length)

;else

return(-

1);}

最好情況下時間複雜度為o(m),最壞情況下時間複雜度為o(nm),平均時間複雜度為o(nm)

由模式串t求next值的演算法:

void

getnext

(sqstring t,

int next)

else k=next[k]

;//t=k}}

kmp演算法:

intkmpindex

(sqstring s,sqstring t)

else j=next[j];}

if(j>=t.length)

return

(i-t.length)

;else

return(-

1);}

設串s的長度為n,串t長度為m。

在kmp演算法中求next陣列的時間複雜度為o(m),在後面的匹配中因主串s的下標不減即不回溯,比較次數記為n,平均時間複雜度為o(n*m)。

資料結構 串

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。結果請按字母順序輸出。我們求整個字串的排列,可以看成兩步 首先求所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有的字元交換。第...

資料結構 串

串名 串值 串長 空串 空格串。字串的比較 字串模式匹配演算法 1.簡單字串模式匹配演算法 最簡單實現是用字串p的字元依次與字串t中的字元進行比較。實現思想是,首先將子串p從第0個字元起與主串t的第pos個字元起依次比較對應字元,如全部對應相等,則表明已找到匹配,成功終止。否則將子串p從第0個子串起...

資料結構 串

串 又稱字串 是一種特殊的線性表,它的每個結點僅由乙個字元組成。在早期的程式語言中,串僅在輸入或輸出中以直接量的形式出現,並不參與運算。隨著計算機的發展,串在文字編輯 詞法掃瞄 符號處理以及定理證明等許多領域得到越來越廣泛的應用。在高階語言中開始引入了串變數的概念,如同整型 實型變數一樣,串變數也可...