/**
模式匹配:
BF算法:
從主串s的0個字符開始和模式串的第0個字符開始進行比較
若相等,則繼續比較兩者的後續字符
否則,從主串s的第1個字符開始和模式串t的第0個字符開始進行比較
重複上述過程,知道t中的字符全部比較完畢,則說明本次匹配成功
或者s中字符全部比較完,則說明匹配失敗
時間複雜度 O(n*m)
KMP算法:
子串滑動的距離只與模式串t有關
next[j]表徵模式串t中最大相同前綴子串和左子串(真子串)的長度
void Cmp(char *t,int *next)
{
int j=1,k;
next[0]=-1;
while(t[j]!='\0')
{
k=next[j-1];
while(k!=-1&&t[k]!=t[j])
k=next[k];
next[j]=++k;
j++;
}
}
在串s和t分別設比較的起始下標爲i,j
循環直到s中所剩字符長度小於t的長度或所有字符均表示完畢
如果s[i]==t[j],繼續比較s和t的下一個字符
否則,將j向右滑動到next[j]位置,即j=next[j];
如果j=-1,則將i和j分別加1,準備下一趟比較
如果t中所有字符均比較完畢,則返回匹配的起始下標;否則返回-1
int Kmp(char *s,char *t,int *next)
{
int i,j;
i=j=0;
while(s[i]!='\0'&&t[j]!='\0')
{
if(j==-1||s[i]==t[j])
{
i++;
j++;
}
else j=next[j];
}
if(t[j]=='\0') return i-j;
else return -1;
}
時間複雜度: O(n+m)
**/
/**
線性表--具有相同類型數據元素的有限序列
限制插入,刪除位置
棧--僅在表尾進行插入和刪除的線性表
隊列--在一端進行插入,另一端進行刪除操作的線性表
限制元素類型爲字符
串--零個或多個字符組成的線性表
將元素類型進行擴充
(多維)數組--線性表中數據元素可以是線性表,但所有元素類型相同
廣義表--線性表中數據元素可以是線性表,且元素的類型可以不相同
**/
/**
特殊矩陣和稀疏矩陣
特殊矩陣:矩陣中很多值相同的元素並且他們的分佈有一定的規律
稀疏矩陣:矩陣中很多0元素
壓縮存儲的基本思想是:
爲多個值相同的元素只分配一個存儲空間
對0元素不分配存儲空間
特殊矩陣的壓縮存儲--對稱矩陣
只存儲上三角或者下三角
特殊矩陣的壓縮存儲--三角矩陣
裝置存儲上三角或者下三角
特殊矩陣的壓縮存儲--對角矩陣
二維數組法
一維數組法
稀疏矩陣的壓縮存儲
三元組(行號,列號,非零值元素)
定義三元組
template<typename T>
struct element
{
int row,col;//行號,列號
T item;//非零值元素
};
三元組順序表
const int MaxTerm=100;
template<class T>
struct Spacematrix
{
T data[MaxTerm];//存儲非零值元素
int mu,nu,tu;//行數,列數,非零元素個數
};
**/
字符串和數組(數據結構筆記4)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.