《大話資料結構》學習筆記四

2021-10-03 07:21:14 字數 1483 閱讀 1464

串(string)是由零個或多個字元組成的有限序列,又名叫字串。

串(string)是由零個或多個字元組成的有限序列,又名叫字串。

給定兩個串:s= 「a1a2……an」, t= 「b1b2……bm」, 當滿足以下條件之一時,sni=bi(i=1, 2, ……, n)。

存在某個ki=bi(i=1,2,……,k-1)ak

k

adt 串(string)

data

串中元素僅由乙個字元組成,相鄰元素具有前驅和後繼關係。

operation

strassign(t,*chars):生成乙個其值等於字串常量chars的串t。

strcopy(t,s):串s存在,由串複製得串t。

clearstring(s):串s存在,將串清空。

stringempty(s):若串為空,返回true,否則返回false。

strlength(s):返回串s的元素個數,即串的長度。

strcompare(s,t):若s>t,返回值》0,若s=t,返回0,若sindex 的實現演算法

/* t為非空串。若主串s中第pos個字元之後存在與t相等的子串,則返回第乙個這樣的子串在s中的位置,否則返回0 */

intindex

(string s, string t,

int pos)

}return0;

/* 若無子串與t相等,返回0 */

}

當中用到了 strlength、substring、strcompare 等基本操作來實現。

串的順序儲存結構是用一組位址連續的儲存單元來儲存串中的字串行的。按照預定義的大小,為每個定義的串變數分配乙個固定長度的儲存區。一般使用定長陣列來定義。

對於串的鏈式儲存結構,與線性表是相似的,但由於串結構的特殊性,結構中的每個元素資料是乙個字元,如果也簡單的應用鍊錶儲存串值,乙個結點對應乙個字元,就會存在很大的空間浪費。因此,乙個結點可以存放乙個字元,也可以考慮存放多個字元,最後乙個結點若是未被佔滿時,可以用「#」或其他非串值字元補全。

串的鏈式儲存結構除了在鏈結串與串操作時有一定方便外,總的來說不如順序儲存靈活,效能也不如順序儲存結構好。

子串的定位操作通常稱做串的模式匹配。

假設我們要從下面的主串s=「goodgoogle」中,找到t=「google這個子串的位置」。

簡單的來說,就是對主串的每乙個字元作為子串開頭,與要匹配的字串進行匹配。對主串做大迴圈,每個字元開頭做t的長度的小迴圈,直到匹配成功或全部遍歷完成為止。

最好的情況,時間複雜度為o(1)。

稍差一些的情況,時間複雜度為o(n+m),其中n為主串長度,m為要匹配的子串長度。

根據等概率原則,平均是(n+m)/2次查詢,時間複雜度為o(n+m)。

d.e.knuth、j.h.morris 和 v.r.pratt 發表乙個模式匹配演算法,可以大大避免重複遍歷的情況,我們把它稱之為克努特-莫里斯-普拉特演算法,簡稱 kmp 演算法。

《大話資料結構》 學習筆記1

第一章 資料結構緒論 經典 if you give someone a program you will frustrate them for a day if you teach tem how to program,you will frustrate them for a lifetim.如果...

《大話資料結構》 學習筆記2

第二章 演算法 2.2 資料結構 與 演算法的關係 簡單的說 資料結構 與 演算法 的關係 即 梁山伯 與 祝英台 的關係 把其中一方隔離出來唱獨角戲.沒意義!2.3 兩種演算法的比較 現寫乙個求1 2 3 100結果的程式,你應該怎麼寫呢?大多數人馬上寫出下面的c語言 int i,sum 0,n ...

《大話資料結構》 學習筆記5

線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。線性表 a1,a2,a3,an 的順序儲存示意圖如下 a1a2 ai 1 ai.an 線性表的順序儲存結構,說白了,就是 在記憶體中找了塊地兒,通過佔位的形式,把一定的記憶體空間給佔了,然後把相同資料型別的資料元素一次存放...