串 多維陣列和廣義表

2021-09-25 01:41:27 字數 1473 閱讀 8502

一、串的定義

串(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 陣列是隨機儲存結構,由於計算各個元素儲存位置的時間相等,所以儲存陣列中任一元素的時間也相等。壓縮儲存 為多個值相同的元只分配乙...