第四章串 陣列 廣義表(4 1 4 3 2)

2022-09-20 17:51:08 字數 2552 閱讀 7970

目錄4.3串的型別定義、儲存結構及其運算

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

一般記為s=「a1a2……an」(n>=0)

其中s是串的名稱,用雙引號括起來括起來的字串行是串的值,引號不屬於串的內容。ai(1=< i <=i)可以是字母,數字或者其他字元,i就是該字元在串中的位置。串中的字元數目n稱為串的長度,定義中談到有限是指長度n是乙個有限的數值。零個字元的串稱為空串(null string),它的長度為零,可以直接使用雙引號表示,所謂的序列,說明串的相鄰字元之間具有前驅和後繼的關係。

注意:空格串:是只包含空格的串。注意它與空串的區別,空格串的內容是有長度的,而且可以不止是乙個空格。

子串與主串,串中任意個數的連續字元組成的子串行稱為該串的子串,相應的,包含子串的串稱為主串。

1.案例分析

因為患者的 dna 和病毒 dna 均是由一些字母組成的字串序列, 要檢測某種病毒 dna 序列是否在患者的 dna 序列**現過 , 實際上就是字串的模式匹配問題。可以利用 bf 演算法,也可以利用更高效的kmp演算法。但與一般的模式匹配問題不同的是,此案例中病毒的 dna 序列是環狀的, 這樣需要對傳統的 bf 演算法或kmp演算法進行改進。

下面給出利用 bf 演算法實現檢測的方案。

2.案例實現

對於每乙個待檢測的任務, 假設病毒 dna 序列的長度是 m, 因為病毒 dna 序列是環狀的 ,為了線性取到每個可行的長度為 m 的模式串,可將儲存病毒dna序列的字串長度擴大為 2m,將病毒dna序列連續儲存兩次。然後迴圈m次,依次取得每個長度為m的環狀字串,將此字串作為模式串,將人的dna序列作為主串,呼叫bf演算法進行模式匹配。 只要匹配成功,即可中止迴圈,表明該人感染了對應的病毒;否則,迴圈m次結束迴圈時, 可通過bf演算法的返回值判斷該人是否感染了對應的病毒。

3.演算法步驟

1.從檔案中讀取待檢測的任務數 num。

2.根據 num個數依次檢測每對病毒dna和人的dna是否匹配,迴圈 num次,執行以下操作:

• 從檔案中分別讀取一對病毒dna序列和人的dna序列;

• 設定乙個標誌性變數flag, 用來標識是否匹配成功,初始為0, 表示未匹配;

• 病毒dna序列的長度是 m, 將儲存病毒dna序列的字串長度擴大為 2m, 將病毒dna序列連續儲存兩次;

• 迴圈m次,重複執行以下操作:

► 依次取得每個長度為m的病毒dna環狀字串;

► 將此字串作為模式串,將人的dna序列作為主串, 呼叫bf演算法進行模式匹配,將匹配結果返回賦值給flag;

► 若flag非0, 表示匹配成功, 中止迴圈,表明該人感染了對應的病毒。

• 退出迴圈時, 判斷flag的值,若flag非0, 輸出 「yes」 , 否則,輸出 「no」。

4.演算法描述

void virus detection () 

資料關係:r1=

基本操作:

strassign(&t,chars)    

// 生成乙個其值等於chars的串t(chars是字串常量)

strcopy(&t,s)    

// 由串s複製得t

strempty(s)    

// 若s為空串,返回true,否則返回false

strcompare(s,t)    

// 若s>t,則返回值》0;若s=t,則返回值=0;若s串中元素邏輯關係與線性表的相同,串可以採用與線性表相同的儲存結構。

1.串的順序儲存

串的定長順序儲存結構,可以簡單地理解為採用 「固定長度的順序儲存結構」 來儲存字串,因此限定了其底層實現只能使用靜態陣列。使用定長順序儲存結構儲存字串時,需結合目標字串的長度,預先申請足夠大的記憶體空間。

//------串的定長順序儲存結構-------

#define maxlen 255 //串的最大長度

typedef structsstring;

2.串的鏈式儲存

串的塊鏈儲存,指的是使用鍊錶結構儲存字串。

優點:操作方便

缺點:儲存密度較低

為克服缺點,可以將多個字元存放在乙個結點裡

//-------串的鏈式儲存結構---------

#define chunksize 80 //可由使用者定義的塊大小

typedef struct chunkchunk;

typedef structlstring; //字串的塊鏈結構

第四章 串 陣列和廣義表

一 串 1.順序儲存 順序儲存 struct hstring 2.鏈式儲存 鏈式儲存 define chuncksize 80 使用者定義塊的大小,每一塊 3.串的模式匹配演算法 bf演算法 經典 和kmp演算法 速度快 bf演算法 index s,t,pos 將主串s的第pos個字元和模式t的第乙...

第四章串 陣列 廣義表(4 4 4 5)

目錄4.4.2陣列的順序儲存 4.4.3特殊矩陣的壓縮儲存 2.三角矩陣 3.對角矩陣 4.5廣義表 n維陣列中含有 i 1 n b i prod n b i i 1nbi個資料元素,每個資料元素都受著n個關係的約束 在每個關係中,元素 a j 1 j 2 j n 0 j i b i 2 a 0 l...

第四章 串 陣列和廣義表 順序串的基本操作

include define true 1 define false 0 define ok 1 define error 0 define overflow 2 define maxstrlen 255 typedef int status typedef int elemtype typedef...