1.串——
零個或多個字元組成的有限序列
串:零個或多個字元組成的有限序列。
串長度:串中所包含的字元個數。
空串:長度為
0的串,記為:""。
非空串通常記為:
s=" s1 s2 …… sn "
其中:s
是串名,雙引號是定界符,雙引號引起來的部分是串值,si
(1≤i≤n
)是乙個任意字元。
1.1串的邏輯結構
子串:串中任意個連續的字元組成的子串行。
主串:包含子串的串。
子串的位置:子串的第乙個字元在主串中的序號。
串的資料物件約束為某個字符集。
微機上常用的字符集是標準
ascii
碼,由7
位二進位制數表示乙個字元,總共可以表示
128
個字元。
擴充套件ascii
碼由8
位二進位制數表示乙個字元,總共可以表示
256
個字元,足夠表示英語和一些特殊符號,但無法滿足國際需要。
unicode
由16
位二進位制數表示乙個字元,總共可以表示
216個字元,能夠表示世界上所有語言的所有字元,包括亞洲國家的表意字元。為了保持相容性,
unicode
字符集中的前
256個字元與擴充套件
ascii
碼完全相同。
1.2
字串的比較
串的比較:通過組成串的字元之間的比較來進行的。
給定兩個串:
x="x1x2…xn"
和y="y1y2…ym"
,則:1.
當n=m
且x1=y1,…
,xn=ym
時,稱x=y
;2.
當下列條件之一成立時,稱x<
y:⑴n
<m且xi=yi
(1≤ i≤n);⑵
存在k≤min(m,n)
,使得xi=yi(1≤i≤k-1)且xk
<yk。4.1.2
字串的儲存結構 方案
1:用乙個變數來表示串的實際長度。方案2
:在串尾儲存乙個不會在串中出現的特殊字元作為串的終結符,表示串的結尾。方案3
:用陣列的
0號單元存放串的長度,從
1號單元開始存放串值。
4.1.3
模式匹配 1.
模式匹配:給定主串
s="s1s2…sn"
和模式t="t1t2…tm",在s
中尋找t
的過程稱為模式匹配。如果匹配成功,返回t 在
s中的位置;如果匹配失敗,返回0。
模式匹配問題的特點
⑴演算法的一次執行時間不容忽視:問題規模通常很大,常常需要在大量資訊中進行匹配;
⑵演算法改進所取得的積累效益不容忽視:模式匹配操作經常被呼叫,執行頻率高。
2.bf
演算法基本思想:從主串
s的第乙個字元開始和模式
t 的第乙個字元進行比較,若相等,則繼續比較兩者的後續字元;否則,從主串
s的第二個字元開始和模式
t 的第乙個字元進行比較,重複上述過程,直到
t 中的字元全部比較完畢,則說明本趟匹配成功;或
s中字元全部比較完,則說明匹配失敗。在串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;
}4.2
多維陣列
4.2.1
多維陣列的定義 1.
陣列是由一組型別相同的資料元素構成的有序集合,每個資料元素稱為乙個陣列元素(簡稱為元素),每個元素受
n(n≥1)
個線性關係的約束,每個元素在
n個線性關係中的序號i1、
i2、…、
in稱為該元素的下標,並稱該陣列為
n 維陣列。
2.多維陣列的特點
元素本身可以具有某種結構,屬於同一資料型別;
陣列是乙個具有固定格式和數量的資料集合。
4.2.2
陣列的儲存結構及定址
一維陣列
設一維陣列的下標的範圍為閉區間[l,
h],每個陣列元素占用
c 個儲存單元,則其任一元素
ailoc(ai)
=loc(al)+(i
-l)×c
二維陣列
常用的對映方法有兩種:
按行優先:先行後列,先儲存行號較小的元素,行號相同者先儲存列號較小的元素。
按列優先:先列後行,先儲存列號較小的元素,列號相同者先儲存行號較小的元素。
n維陣列n(
n>2)維陣列一般也採用按行優先和按列優先兩種儲存方法。請自行推導任一元素儲存位址的計算方法。
4.3
矩陣的壓縮儲存 1.
特殊矩陣:矩陣中很多值相同的元素並且它們的分布有一定的規律。
稀疏矩陣:矩陣中有很多零元素。
壓縮儲存的基本思想是:
⑴為多個值相同的元素只分配乙個儲存空間;
⑵對零元素不分配儲存空間。
2.特殊矩陣的壓縮儲存
——對角矩陣
對角矩陣:所有非零元素都集中在以主對角線為中心的帶狀區域中,除了主對角線和它的上下方若干條對角線的元素外,所有其他元素都為零。
3.對角矩陣的壓縮儲存
元素aij
在一維陣列中的序號
=2 + 3(i
-2)+( j
-i + 2)
=2i+ j -2
∵一維陣列下標從0開始
∴元素aij在一維陣列中的下標
= 2i+ j -3
4.稀疏矩陣的壓縮儲存
將稀疏矩陣中的每個非零元素表示為:
(行號,列號,非零元素值
)——三元組
emplate
struct element
;三元組表:將稀疏矩陣的非零元素對應的三元組所構成的集合,按行優先的順序排列成乙個線性表。
5.稀疏矩陣的壓縮儲存
——三元組順序表
儲存結構定義:
const int maxterm=100;
template
struct sparsematrix;6.
稀疏矩陣的壓縮儲存
——十字鍊錶
採用鏈結儲存結構儲存三元組表,每個非零元素對應的三元組儲存為乙個鍊錶結點,結構為:
row:儲存非零元素的行號
col:儲存非零元素的列號
item
:儲存非零元素的值
right
down
字串和多維陣列
一 字串 1 字串的定義 是零個或多個字串組成的有限序列,只包含空格的串稱為空格串。2 字串中任意個連續的字元組成的子串行稱為該穿的子串,包含子串的串稱為主串,子串的第乙個字元咋主串中的序號稱為子串在主串中的位置。3 模式匹配 給定兩個字串s和t,在主串s中尋找子串t的過程稱為模式匹配,t為模式。如...
字串和多維陣列
intbf char s,char t else if t j 0 return start 1 else return0 int kmp char s,char p else if j plen return i j else return 1 陣列是乙個具有固定格式和數量的資料集合,在其上一般不...
字串和多維陣列
第四章 字串和多維陣列 4.1 字串 4.1.1 字串的定義 1.字串的定義 字串是零個或多個組成的有限序列,只包含空格的串成為空格串。串中所包含的字元個數成為串的長度,長度為0的串為空串,記作 乙個非空串通常該記作 s s1,s2 sn 字串中任意個連續的字元組成的子串行稱為該串的子串,相應地,包...