常見基礎概念
串長:串中字元個數,有時還常用a[0]/length來儲存串長
注意空串和空格串的區別
空串是長度為0的串,而空格串是由多個或乙個空格字元組成的字串子串與主串:串s中任意個連續字串行叫s的子串,s稱為主串
子串位置: 子串的第乙個字元在主串中的序號(序號從1開始)
字元位置:字元在串中的序號
串相等:長度和對應字元均相等
類c中的常見操作
c語言中提供的操作函式
int strcmp(char *s1,char *s2)//串比較
int strlen(char *s1)//求串長
char strcat(char *to,char *from)//串連線
char strchr(char *s,char *c)//模式識別
//詳見c語言程式設計
定長儲存
#define maxstrlen 255
typedef
unsigned
char sstring[maxstlen+
1]sstring;
sstring s;
//s是乙個能夠容納255字元的順序串
順序儲存方式實現substring(&sub,s,pos,len)
//這裡以int型為例,且預設sub為空陣列
intsubstring
(sstring sub,sstring s,
int pos,
int len)
//這裡sstring相當於char ssring,詳見typedef的用法
sub[0]
=len;
return0;
}
堆分配的儲存結構
typedef
struct
hstring;
//堆分配是採用了mallco預設串長度,用realloc增加長度,用free釋放空間
intstrassign
(hstring *t,
char
*chars)
//判斷chars是否為空
else
//這裡t->ch[0}沒有用來裝串長
}return0;}
//賦值函式
利用堆方式編寫串插入函式
int
strinsert
(hstring *s,
int pos,hstring t)
return0;
}
鏈式儲存塊鏈的寫法
bf演算法的實現#define size 100
typedef
struct chunkchunk,
*listchunk;
將主串s的第pos個字元和模式t的第乙個字元比較,若相等,繼續逐個比較後續字元;若不相等,從主串的下乙個字元(pos+1)起,重新與t第乙個字元比較,直到匹配成功,返回s中與t匹配子串行第乙個字元的序號。否則返回0kmp演算法(優化,i不再回溯,j的回溯距離變短)//bf演算法的實現
intindex_bp
(sstring s,sstring t,
int pos)
else}if
(j>t[0]
)return
(i-t[0]
);else
return0;
}
關鍵在於next[j]的求解//採用了遞推法求next[j]
void
get_next
(sstring t,
int next)
else j=next[j]
;//從類似於kmp的求解,t為主串和模式串
}演算法實現
intindex_kmp
(sstring s,sstring t,
int pos)
//省略
資料結構實驗四 串的模式匹配BF KMP
include include stdio.h include stdlib.h include cstdlib syste 函式需要該標頭檔案 using namespace std define ok 1 define error 0 define overflow 2 typedef int ...
21資料結構 串知識整理
4.2 串的模式匹配演算法 串是由零個或多個字元組成的有限序列。串中的個數稱為串的串的長度,含有零個元素的串叫做空串。char str abcdef 輸出字元直接 cout namespace std intmain str 10 0 莫失莫忘,仙壽恆昌!cout 輸出結果 0123456789字串...
資料結構知識點總結
1 樹 森林 和二叉樹可以相互轉化,規則是 左孩子右兄弟 即當前節點的左孩子在由二叉樹轉化為樹的過程中,左孩子還是當前節點的左孩子,而右節點會變成當前節點的兄弟。2 設二叉樹度為0的節點有n0個,度為2的節點為n2,則n2 n0 1 1 無向圖的資料結構是鄰接多重表,有向圖的資料結構是十字鍊錶。二者...