第四章字串和多維陣列

2021-09-29 06:58:17 字數 3955 閱讀 3585

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

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

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

非空串通常記為:

s=」 s1 s2 …… sn "

其中:s是串名,雙引號是定界符,雙引號引起來的部分是串值 ,si(1≤i≤n)是乙個任意字元。

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

主串:包含子串的串。

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

順序串:用陣列來儲存串中的字串行。

鏈結串:用鏈結儲存結構來儲存串。

模式匹配:

給定主串s="s1s2…sn"和模式t=「t1t2…tm」,

在s中尋找t 的過程稱為模式匹配。

bf(brute-force)演算法 :

基本思想:

從主串s的第0個字元開始和模式t 的第0個字元進行比較,

若相等,則繼續比較兩者的後續字元;

否則,從主串s的第1個字元開始和模式t 的第0個字元進行比較,

重複上述過程,直到t 中的字元全部比較完畢,則說明本趟匹配成功;或s中字元全部比較完,則說明匹配失敗。

說明:模式匹配過程要進行多趟的匹配,每趟匹配要進行若干次的比較

演算法:在串s和串t中設比較的起始下標i和j;

迴圈直到s或t的所有字元均比較完;

2.1 如果s[i]==t[j],繼續比較s和t的下乙個字元;

2.2 否則,將i和j回溯(i=i-j+1,j=0),準備下一趟比較;

如果t中所有字元均比較完,則匹配成功,返回匹配的起始比較下標(i-j);否則,匹配失敗,返回-1;

intbf(

char s,

char t)

else}if

(j>=t.

length()

)return

(i-j)

;else

return-1

;}

演算法:

在串s和串t中分別設比較的起始下標i和j;

2. 迴圈直到s中所剩字元長度小於t的長度或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中所有字元均比較完畢,則返回匹配的起始下標;否則返回-1;

int

kmp_findpat

(char

*s,char

*t,int

*next)

else

j=next[j];}

if(t[j]

=='\0'

)return i-j;

else

return-1

;}

(多維)陣列——線性表中的資料元素可以是線性表,但所有元素的型別相同。

陣列定義:

陣列是由一組型別相同的資料元素構成的有序集合,每個元素受n(n≥1)個線性關係的約束,並稱該陣列為 n 維陣列。

陣列特點:

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

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

二維陣列是資料元素為線性表的線性表。

二維陣列的儲存結構與定址:

常用的兩種對映方法:

按行優先:先行後列,先儲存行號較小的元素,行號相同者先儲存列號較小的元素。

按列優先:先列後行,先儲存列號較小的元素,列號相同者先儲存行號較小的元素。

按行優先儲存的定址:

aij前面的元素個數=整行數×每行元素個數+本行中aij前面的元素個數=(i -l1)×(h2 -l2+1)+(j -l2)

則,loc(aij)=loc(al1l2)+((i-l1)×(h2-l2+1)+(j-l2))×c

按列優先儲存的定址:

loc ( i, j ) = a + ( j *n +i ) * l

n維陣列:

各維元素個數為 m1, m2, m3, …, mn

m3…*mn + i2*m3

m4…*mn+

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

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

壓縮儲存的基本思想是:

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

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

特點:aij=aji

從零開始:

aij在一維陣列中的序號= i×(i+1)/2+ j+1

∵一維陣列下標從0開始

∴aij在一維陣列中的下標 k= i×(i+1)/2+ j

從一開始:

aij在一維陣列中的序號 = i×(i-1)/2+ j

∵一維陣列下標從0開始

∴aij在一維陣列中的下標 k= i×(i-1)/2+ j-1

對於下三角中的元素aij(i≥j), 在一維陣列中的下標k與i、j的關係為:

k=i×(i-1)/2+j-1 。

上三角中的元素aij(i<j),因為aij=aji,則訪問和它對應的元素aji即可,即:

k=j×(j-1)/2+i -1。

template

<

class

t>

struct element

;

三元組表:將稀疏矩陣的非零元素對應的三元組所構成的集合,按行優先的順序排列成乙個線性表。

儲存結構定義:

const

int maxterm=

100;

template

<

class

t>

struct sparsematrix

;

十字鍊錶:

採用鏈結儲存結構儲存三元組表,每個非零元素對應的三元組儲存為乙個鍊錶結點,結構為:

col:儲存非零元素的列號

item:儲存非零元素的值

right:指標域,指向同一行中的下乙個三元組

down:指標域,指向同一列中的下乙個三元組

定義:

template

<

class

t>

class

olnode;}

;

廣義表(列表): n ( >= 0 )個表元素組成的有限序列,記作:

ls = (a0, a1, a2, …, an-1)

ls是表名,ai是表元素,它可以是表 (稱為子表),可以是資料元素(稱為原子)。

n為表的長度。n = 0 的廣義表為空表。

長度:廣義表ls中的直接元素的個數;

深度:廣義表ls中括號的最大巢狀層數。

表頭:廣義表ls非空時,稱第乙個元素為ls的表頭;

表尾:廣義表ls中除表頭外其餘元素組成的廣義表。

廣義表的儲存結構——頭尾表示法

結點結構:

hp:指向表頭結點的指標;

tp:指向表尾結點的指標;

data:資料域,存放單元素。

定義結點結構:

enum elemtag 

;template

<

class

t>

struct glnode ptr;};

};

廣義表特點:

有次序性:乙個直接前驅和乙個直接後繼

有長度:等於表中元素個數

有深度:等於表中括號的重數

可遞迴:自己可以作為自己的子表

可共享:可以為其他廣義表所共享

第四章 字串和多維陣列

4.1字串的定義 1.串 零個或多個字元組成的有限序列 串 零個或多個字元組成的有限序列。串長度 串中所包含的字元個數。空串 長度為0的串,記為 非空串通常記為 s s1 s2 sn 其中 s是串名,雙引號是定界符,雙引號引起來的部分是串值 si 1 i n 是乙個任意字元。1.1串的邏輯結構 子串...

第四章 字串 和多維陣列

4.1 字串 4.1.1 字串的定義 1 字串的定義 字串 是零個或者多個字元陣列的有限序列。空格傳 只包含空格的串。串中所包含的字元個數稱為串的長度,長度為0的串稱為空串。子串 字串中任意個連續的字元組成的子串行。2 字串的比較 通過組成串的字元之間的比較實現。4.1.2 字串的儲存結構 字串是資...

第四章字串和多維陣列

4.1字串的定義 1.串 零個或多個字元組成的有限序列 串 零個或多個字元組成的有限序列。串長度 串中所包含的字元個數。空串 長度為0的串,記為 非空串通常記為 s s1 s2 sn 其中 s是串名,雙引號是定界符,雙引號引起來的部分是串值 si 1 i n 是乙個任意字元。1.1串的邏輯結構 子串...