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

2021-08-04 04:21:54 字數 1485 閱讀 4411

l  串是由零個或多個字元組成的有限序列,又名叫字串;

l  字元數目稱為串的長度;

l  串中任意個數的連續字元組成的子串行稱為該串的子串;

l  子串在主串中的位置就是子串的第乙個字元在主串中的序號;

l  判斷c語言中兩個串是否相等:必須長度和各個位置對應的字元都相等,才算是相等;

clearstring(s);//清空

concat(t, s1, s2);//用t返回s1和s2組成的新串;

l  用一組位址連續的儲存單元來儲存串中的字串行;為每個定義的串變數分配乙個固定長度

的儲存區;一般是用定長陣列來定義;

l  在下標為0或最後的位置儲存串的長度值;

l  或者在串值後面加乙個不計入串長度的結束標記字元,同個遍歷獲得長度;

l  這種儲存結構有缺點;操作時可能超出陣列的長度;

與線性表相似;乙個結點可以存放多個字元;

子串定位操作:串的匹配模式;

對主串s做大迴圈,對每個字元開頭做子串t長度的小迴圈;直到匹配成功或全部遍歷完成;

有很多重複比較操作,低效!

l  經過第一次比較,如果發現主串s和子串t的前n位是相等的,而子串的這前n位又互不相等,那麼可以避免n-1次不必要的比較;

l  對於子串中有與首字元相等的字元,也是可以省略一部分不必要的判斷步驟;

l  在樸素模式匹配演算法中,主串的i值是不斷地回溯來完成的,而在kmp模式匹配演算法中是不需要回溯的;即i值不可以變小;所以變化的是j值;

l  j值的多少取決於當前字元之前的串的前字尾的相似度;

l  t串各個位置的j值變化定義為乙個陣列:next,next的長度就是t串的長度;

l  next[j]取值:

n  j=1時,next[j] = 0;

n  j由j到j-1串前字尾無相等字元,next[j] = 1;

n  前字尾1個字元相等,next[j]= 2;兩個字元相等,next[j]=3;以此類推。。。

²  next陣列的作用是:當出現失配情況s[i] != t[j]時,next[j]就指示使用t中以next[j]為下標的字元與s[i]進行比較;

對next函式進行改良:nextval

for instance:  t = 「ababaaaba」;

先推算出next陣列的值;011234223;

j = 1時,nextval[1] = 0;

j = 2 時,next[2]=1;對應t串的第1位的值是a, b!=a,所以nextval[2]= next[2]=1;

j = 4 時,next[4]=2;對應t串的第2位的值是b, b=b, 所以nextval[4]=nextval[2]=1;

j = 7 時,next[7]=2;對應t串的第2位的值是b,a!=b, 所以nextval[7]=next[7]=2;

²  如果a位字元與他next值指向的b位字元相等,則該a位的nextval指向b位的nextval值;如果不等,則該a位的nextval值就是他自己a位的next的值;

《大話資料結構》 學習筆記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 線性表的順序儲存結構,說白了,就是 在記憶體中找了塊地兒,通過佔位的形式,把一定的記憶體空間給佔了,然後把相同資料型別的資料元素一次存放...