字串的定義:
字串是零個或多個組成的有限序列,只包含空格的串成為空格串。串中所包含的字元個數成為串的長度,長度為0的串為空串,記作「」,字串中任意個連續的字元組成的子串行稱為該串的子串,相應地,包含子串的串稱為主串,子串的第乙個字元在主串的序號成為子串在主串的位置。
字串的比較
當下列條件之一成立時,稱x>y。
(1)n模式匹配
給定兩個字元s=「s1,s2…sn」和t=「t1,t2…tn」,在主串s中尋找子串t的過程稱為模式匹配,t成為模式。如何匹配成功,返回t在s中的位置;如果匹配失敗,返回0.
樸素的模式匹配演算法
樸素的模式匹配演算法bf
intbf(char s,char t)
else
}if(t[j]』\0』)return (i-j+1);
else return 0;
}2. kmp演算法
bf演算法簡單但效率較低,一種對bf演算法做了很大改進的模式匹配演算法是kmp演算法,其基本思想是主串不進行回溯。
由t[0]t[k-1]=s[i-k]s[i-1]和t[j-k]t[j-1]=s[i-k]s[i-1]。
可得: t[0]t[k-1]=t[j-k]t[j-1]
用next[j]表示t[j]對應的k值(0≤j多維陣列
陣列的定義
陣列是由型別相同的資料元素構成的有序集合,每個資料元素稱為乙個陣列元素,每個元素受n(n≥1)個線性關係的約束,每個元素在n個線性關係中的序號i1,i2,…,in稱為該元素的下標,並稱該陣列為n維陣列。
陣列是乙個具有固定格式和數量的資料集合,在陣列中一般不能執行插入或刪除某個陣列元素的操作。因此,除了初始化和銷毀之外,在陣列中通常只有兩種操作。即讀寫操作。
陣列的儲存結構與存址
由於陣列一般不執行插入和刪除操作,也就是說,一旦建立了陣列,其元素個數和元素之間的關係就不再發生變動,而且,陣列是一種特殊的資料結構,一般要求能夠隨機訪問,因此,資料採用順序儲存結構。由於記憶體單元是一維結構,而多維陣列是多維結構,所以,採用順序儲存結構儲存陣列首先需要將多維結構對映到一維結構。
二維陣列的每個元素含有兩個下標,需將二維關係對映為一維關係。常用的對映方法有兩種:以行序為主序和以列序為主序。
按行優先儲存的基本思想是:先行後列,先儲存行號較小的元素,行號相同者先儲存列號較小的元素。
按列優先儲存的基本思想是:先列後行,先儲存列號較小的元素,列號相同者先儲存行號較小的元素。任一元素儲存位址的計算與按行優先儲存類似。
按行優先儲存的基本思想是:最右邊的下標先變化,即最右下表從小到大,迴圈一遍後,右邊第二個下標再變,……最後是最左下標。
按列優先儲存的基本思想恰好相反:最左邊的下標先變化,即最左下標從小到大,迴圈一遍後,左邊第二個下標再變,……最後是最右下標。
壓縮儲存的基本思想是: 為多個值相同的元素只分配乙個儲存空間;對零元素不分配儲存空間。
對稱矩陣的壓縮儲存
對稱矩陣關於主對角線對稱,因此只需儲存下三角部分即可。這樣,原來需要nn個儲存單元,現在只需n(n+1)/2個儲存單元,節約了大約一半的儲存單元。當n較大時,這是客觀的一部分儲存單元。
三角矩陣的壓縮儲存
下三角矩陣的壓縮儲存與對稱矩陣類似,不同之處僅在於儲存下三角中的元素以外,還要儲存對角線上方的常數。因為是同乙個常數,所以只儲存乙個即可。這樣,共儲存n*(n+1)/2+1個元素,將其按行優先存入陣列sa[n*(n+1)/2+1]中。
下三角矩陣中任一元素a(ij)在sa中的下標k與i、j的對應關係為:
當i>=j時,k=i*(i-1)/2+j-1;
當i(2n-i+2)/2+j-i;
當i>j時,k=n(n+1)/2
對角矩陣的壓縮儲存
在對角矩陣中,所有非零元素都集中在以主對角線為中心的帶狀區域,除了主對角線和他的上下若干條主對角線的元素外,所有其他元素都為零。因此,對角矩陣也稱為帶狀矩陣。
對於乙個m*n的w對角矩陣(w是占有非零元素的對角線的個數,也稱頻寬),一種壓縮方法是將其壓縮到乙個m行w列的二維陣列b中,則a(ij)對映為b(ts),其對映關係為:
(1) t=i
(2) s=j-i+2
稀疏矩陣的壓縮儲存
將稀疏矩陣的非零元素對應的三元組成所構成的集合,按行優先的順序排列成乙個線性表,稱為三元組表,則稀疏矩陣的壓縮儲存轉化為三元組表的儲存。
三元組順序表
採用順序儲存結構儲存的三元組表稱為三元組順序表。顯然,要唯一表示乙個稀疏矩陣,還需要在儲存三元表的同時儲存該矩陣的行數、列數和非零元素的個數,其儲存結構定義如下:
const int maxterm=100;
struct sparsematrix
;2. 十字鍊錶
稀疏矩陣的鏈結儲存結構稱為十字鍊錶。它具備儲存結構的特點,因此,在非零元素的個數及位置都會發生變化的情況下,通常採用十字鍊錶儲存稀疏矩陣。
十字鍊錶儲存稀疏矩陣的基本思想是:將每個非零元素對應的三元組儲存為乙個鏈結表結點,節點由5個域組成。
其中,element為資料域,儲存非零元素對應的三元組;
right為指標域,指向同一行中的下乙個三元組;
down為指標域,指向同一列中的下乙個三元組。
字串和字串陣列
字串陣列 include int main int argc,const char ar printf name1 s n name1 name1 zhangsan 部分初始化中,沒有被初始化的元素預設是0,0 對應的ascii值是 0 char name2 9 printf name2 s n n...
字串和字元陣列
void test1 函式test1中,指標str1所指向的字串有11個元素。一定要注意字串是以 0 為結尾的,而strcpy拷貝了整個字串包括 0 所以存在下標越界的問題。void test2 函式test2中,字元陣列str1包含10個元素。陣列str1並不是以 0 結束,所以不能作為字串使用。...
字串和字元陣列
字串是 號賦值的 例 char a hello 長度為6 最後加了乙個 0 或char a 6 hello 字串會自動的在最後加乙個 0 的結束符,字元陣列是乙個乙個的賦值 例 char a 5 長度為5 不會自動的加 0 s它要求引數是乙個指標!即 要求 char 型別 s 字串的格式輸出,它是乙...