資料結構 字串和多維陣列

2021-06-27 13:04:44 字數 3599 閱讀 7530

4 章 

字串和多維陣列

本章的基本內容是:

字串。在程式語言中大都有串變數的概念,而且實現了基本的串操作,本章重點討論串的儲存結構及模式匹配演算法。

陣列。在程式語言中大都提供了陣列作為構造資料型別,本章重點討論陣列以及特殊矩陣的儲存與定址。

4.1

字串

主要內容

4.11  字串的定義

4.12  字串的儲存結構

4.13  模式匹配

線性表——

具有相同型別的資料元素的有限序列。 棧

——僅在表的一端進行插入和刪除操作。

佇列——

在一端進行插入操作,而另一端進行刪除操作。 串

——零個或多個字元組成的有限序列。

線性表——具有相同型別的資料元素的有限序列。

(多維)陣列

——線性表中的資料元素可以是線性表。

串的邏輯結構:

p串:零個或多個字元組成的有限序列。

p串長度:串中所包含的字元個數。

p空串:長度為0的串,記為:" "。

p非空串通常記為:

s=" s1 s2 …… sn "

其中:s是串名,雙引號是定界符,雙引號引起來的部分是串值 ,

si(1≤i≤n)是乙個任意字元。

p 子串:串中任意個連續的字元組成的子串行。

p 主串:包含子串的串。

p 子串的位置:子串的第乙個字元在主串中的序號。

s1="

ab12

cd "  s

2="ab

12"  s

3="ab

13"

s4="

ab12φ"

s5=" " s

6="φφφ

"

p串的資料物件約束為某個字符集。

p 微機上常用的字符集是標準ascii碼,由 7 位二進位制數表示乙個字元,總共可以表示 128 個字元。

p 擴充套件ascii碼由 8 位二進位制數表示乙個字元,總共可以表示 256 個字元,足夠表示英語和一些特殊符號,但無法滿足國際需要。

unicode由 16 位二進位制數表示乙個字元,總共可以表示 216個字元,能夠表示世界上所有語言的所有字元,包括亞洲國家的表意字元。為了保持相容性,unicode字符集中的前256個字元與擴充套件ascii碼完全相同。  

串的比較:通過組成串的字元之間的比較來進行的。

給定兩個串:x="

x1x2

…xn"

和y="y

1y2…

ym",則:

1. 當n

=m且x

1=y1

,…,x

n=ym

時,稱x=y

; 2. 當下列條件之一成立時,稱x<

y: ⑴

n<m且

xi=y

i(1≤ i≤

n); ⑵

存在k≤min(m

,n),使得xi

=yi(

1≤i≤k

-1)且

xk<y

k。

模式匹配:給定主串s="s1s2…sn"和模式t="t1t2…tm",在s中尋找t 的過程稱為模式匹配。如果匹配成功,返回t 在s中的位置;如果匹配失敗,返回0。

模式匹配問題有什麼特點

?⑴演算法的一次執行時間不容忽視:問題規模通常很大,常常需要在大量資訊中進行匹配;

⑵演算法改進所取得的積累效益不容忽視:模式匹配操作經常被呼叫,執行頻率高。

模式匹配

——bf

(back-forward?)

演算法 

1. 在串s和串

t中設比較的起始下標i和

j;2. 迴圈直到s或

t的所有字元均比較完

2.1 如果s[i

]=t[j],

繼續比較s和

t的下乙個字元;

2.2 否則,將i和

j回溯,準備下一趟比較;

3. 如果

t中所有字元均比較完,則匹配成功,返回匹配的起始比較下標;

否則,匹配失敗,返回0;

int bf(char s[ ], char t[ ])  

else    }

if (t[j]=='\0') return (i-j+1);  

else return 0; }

int bf(char s[ ], char t[ ])  

else    }

if (t[j]=='\0') return start;

else return 0; }

kmp演算法的偽**描述

1. 在串s

和串t中分別設比較的起始下標i和

j;2.

迴圈直到s或

t的所有字元均比較完

2.1 如果s[i

]=t[j],

繼續比較s和

t的下乙個字元;否則

2.2 將

j向右滑動到

next[j]

位置,即

j=next[j];

2.3

如果j=-1,則將i

和j分別加1,準備下一趟比較;

3. 如果

t中所有字元均比較完畢,則返回匹配的起始下標;否則返回0;

4.2 

多維陣列

主要內容

4.21  陣列的定義

4.22  陣列的儲存結構與定址

陣列是由一組型別相同的資料元素構成的有序集合,每個資料元素稱為乙個陣列元素(簡稱為元素),每個元素受n(n≥1)個線性關係的約束,每個元素在n個線性關係中的序號i1、i2、…、in稱為該元素的下標,並稱該陣列為 n 維陣列。 

陣列的特點

元素本身可以具有某種結構,屬於同一資料型別;

陣列是乙個具有固定格式和數量的資料集合。

陣列的基本操作

⑴ 訪問:給定一組下標,讀出對應的陣列元素;

⑵ 修改:給定一組下標,儲存或修改與其相對應的陣列元素。

訪問和修改操作本質上只對應一種操作——

定址4.3  

矩陣的壓縮儲存

主要內容

4.31  對稱矩陣的壓縮儲存

4.32  三角矩陣的壓縮儲存

4.33  對稱矩陣的壓縮儲存

4.34  稀疏矩陣的壓縮儲存

特殊矩陣和稀疏矩陣

p特殊矩陣:矩陣中很多值相同的元素並且它們的分布有一定的規律。

p稀疏矩陣:矩陣中有很多零元素。

p壓縮儲存的基本思想是:

⑴ 為多個值相同的元素只分配乙個儲存空間;

⑵ 對零元素不分配儲存空間。

本章總結

資料結構 字串和多維陣列

本章節主要內容 字串儲存 模式匹配 陣列的邏輯結構特徵 陣列的儲存方式及定址方法 特殊矩陣和稀疏矩陣的壓縮儲存方法 一 字串 1 串 零個或多個字元組成的有限序列。串長度 串中所包含的字元個數。空串 長度為0的串,記為 非空串表示 s s1,s2 sn s為串名,為定界符,其中為串值,si為任意字元...

資料結構 字串和多維陣列

本章節主要內容 字串儲存 模式匹配 陣列的邏輯結構特徵 陣列的儲存方式及定址方法 特殊矩陣和稀疏矩陣的壓縮儲存方法 一 字串 1 串 零個或多個字元組成的有限序列。串長度 串中所包含的字元個數。空串 長度為0的串,記為 非空串表示 s s1,s2 sn s為串名,為定界符,其中為串值,si為任意字元...

字串和多維陣列

一 字串 1 字串的定義 是零個或多個字串組成的有限序列,只包含空格的串稱為空格串。2 字串中任意個連續的字元組成的子串行稱為該穿的子串,包含子串的串稱為主串,子串的第乙個字元咋主串中的序號稱為子串在主串中的位置。3 模式匹配 給定兩個字串s和t,在主串s中尋找子串t的過程稱為模式匹配,t為模式。如...