一、串的定義
串(string)(或字串)是由0個或多個字元組成的有限序列;0個字元的串稱為空串(null string),其長度為0;
子串:主串中任意個連續的字元組成的子串行;子串的第乙個字元在主串中的位置為子串的位置;
空格串(blank string):由乙個或多個空格組成;
串是一種內容受限的線性表,其資料元素是單個字元。
二、串的儲存結構
串的順序儲存結構
//-----串的定長順序儲存結構-----
#define maxlen 255 //串的最大長度】
typedef struct
sstring;
//-----串的堆式儲存結構-----
typedef struct
hstring;
串的鏈式儲存結構
//-----串的鏈式儲存結構-----
#define chunksize 80
typedef struct chunk
chunk;
typedef struct
lstring;
三、串的模式匹配演算法
設有兩個字串s和t,s為主串,t為子串,也叫模式;
bf演算法
//-----bf演算法-----
int index_bf(sstring s,sstring t,int pos)
else
}if(j>t.lenth)
return i-t.length; //成功
else
}
最壞時間複雜度為o(m * n) , 最好時間複雜度為o(m + n) ;
kmp演算法 參考於巨佬部落格:
//-----kmp演算法-----
int index_kmp(sstring s,sstring t,int pos)
else
}if(j>t.length)
return i-t.length;
else
return 0;
}void get_next(sstring t,int next)
{ int i=1;
next[1]=0;
int j=0;
while(i時間複雜度為o(m + n) !
多維陣列可以看成是線性表的推廣,其元素可以是具有某種結構的資料;
對於一些特殊矩陣(如對稱矩陣、三角矩陣、對角矩陣),可通過對多個值相同的元只分配乙個儲存空間、對零元不分配空間來進行壓縮儲存。
定義:廣義表是一種線性表的推廣形式,表中的元素可以是稱為原子的單個元素,也可以是乙個子表;
廣義表通常採用鏈式儲存結構,包括:頭尾鍊錶的儲存結構和擴充套件線性鍊錶的儲存結構。
串 陣列和廣義表
1 串是內容受限的線性表,它限定了表中的元素為字元。申有兩種基本儲存結構 順序儲存和鏈式儲存,但多採用順序儲存結構。串的常用演算法是模式運配演算法,主要有bf演算法和kmp演算法。bf演算法實現簡單,但存在回溯,效率低。時間復豪度為o m n kmp演算法對bf演算法進行改進,消除回溯,提高了效率,...
陣列和廣義表
一 陣列 陣列是一組型別相同的資料元素構成。有一維陣列 二維陣列 n 維陣列。一般實現時,可以過載操作符,比較方便一點。二 矩陣 1 矩陣的加減,需要兩個矩陣擁有相同的行列數才可以。對應各個位置分別進行計算 2 矩陣的相乘,需要第乙個陣的列數等於第二個的行數。如c 0,0 a 的第一列分別乘以 b的...
陣列和廣義表
陣列一旦被定義,它的維數和維界就不再改變 採用順序結構儲存結構表示陣列 二維陣列的儲存方式 以行序為主 c語言 以列序為主 loc i,j loc 0,0 b2 i j l 陣列是隨機儲存結構,由於計算各個元素儲存位置的時間相等,所以儲存陣列中任一元素的時間也相等。壓縮儲存 為多個值相同的元只分配乙...