資料結構筆記8串(《大話資料結構》學習筆記)

2021-09-18 07:42:53 字數 2234 閱讀 7631

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

一般記為 s= " a1a2… … .an " ( n>0), 其中, s 是串的名稱,用雙引號(有些書中也用單引號)括起來的字串行是串的值,注意單引號不屬於串的內容 。 ai可以是字母 、 數字或其他字元 ,i 就是該字元在串中的位置。串中的字元數目 n 稱為串的長度, 定義中談到"有限"是指長度 n 是乙個有限的數值 。零個字元的審稱為空串 ( null string) , 宮的長度為零,可以直接用兩雙引號 "…』 表示

事實上 , 串的比較是通過組成串的字元之間的編碼來進行的 , 而字元的編碼指的是字元在對應字符集中的序號。

如果我們要在 c 語言中比較兩個串是否相等,必須是它們串的長度以及它們各個對應位置的字特都相等時,才算是相等。即給定兩個串

s= 「a1a2 … a n」 ,t=「b 1 b2 … … bm」 ,當且僅當 n=m ,且 al=bl , a2=切 ,…, an=bm 時 ,我們認為 s=t 。

4.1串的順序儲存結構

串的順序儲存結構是用 一組位址連續的儲存單元來儲存串中的字串行的。按照預定義的大小,為每個定義的感變數分配乙個固定長度的儲存區。一般是用定長陣列來定義。既然是定長陣列,就存在乙個預定義的最大串長度, 一般可以將實際的串長度值儲存在陣列的0下標位置,有的書中也會定義儲存在陣列的最後乙個下標位置。

對於串的順序儲存,有一些變化,串值的儲存空間可在程式執行過程中動態分配而得。比如在計算機中存在乙個自由儲存區,叫做"堆"。這個堆可由 c 語言的動態分配函式 malloc()和 free ()來管理。

4.2串的鏈式儲存結構

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

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

1.主串 s 第一位開始, s 與 t 前三個字母都匹配成功,但 s 第四個字母是 d 而 t的是 g 。第一位匹配失敗。

主串 s 第二位開始,主審 s 首字母是 0 ,要匹配的 t 首字母是 g ,匹配失敗。

3.主串 s 第 三位開始,主串 s 首字母是 0 ,要匹配的 t 首字母是 g ,匹配失敗。

4 . 主串 s 第四位開始,主串 s 首字母是 d ,要匹配的 t 首字母是 g ,匹配失敗。

主串 s 第五位開始, s 與 t , 6 個字母全匹配,匹配成功.

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

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