《《數(shù)據(jù)結(jié)構(gòu)題集》參考答案4串》由會(huì)員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)結(jié)構(gòu)題集》參考答案4串(6頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 編寫對(duì)串求逆的遞推算法。要求實(shí)現(xiàn)以下函數(shù):void Reverse(StringType &s);/* Reverse s by iteration. */StringType是串的一個(gè)抽象數(shù)據(jù)類型,它包含以下6種基本操作:void InitStr(StringType &s); / 初始化s為空串。void StrAssign(StringType &t, StringType s); / 將s的值賦給t。s的實(shí)際參數(shù)是串變量。int StrCompare(StringType s, StringType t); / 比較s和t。若st,返回值0;若s=t,返回值=0;若st,返回值0。i
2、nt StrLength(StringType s); / 返回s中的元素個(gè)數(shù),即該串的長(zhǎng)度。StringType Concat(StringType &s, StringType t); / 返回由s和t聯(lián)接而成的新串。StringType SubString(StringType s, int start, int len); / 當(dāng)1=start=StrLength(s)且0=len=StrLength(s)- start+1時(shí), / 返回s中第start個(gè)字符起長(zhǎng)度為len的子串,否則返回空串。/ 注意,不要使用 s = 的形式為 StringType 類型的變量賦值 ,/ 而要使用
3、StrAssign 函數(shù)!void Reverse(StringType &s)/* Reverse s by iteration. */ int i=0,j=StrLength(s)-1; char temp; while(it,返回值0;若s=t,返回值=0;若st,返回值0。int StrLength(StringType s); / 返回s中的元素個(gè)數(shù),即該串的長(zhǎng)度。StringType Concat(StringType &s, StringType t); / 返回由s和t聯(lián)接而成的新串。StringType SubString(StringType s, int start, i
4、nt len); / 當(dāng)1=start=StrLength(s)且0=len=StrLength(s)- start+1時(shí), / 返回s中第start個(gè)字符起長(zhǎng)度為len的子串,否則返回空串。/ 注意,不要使用 s = 的形式為 StringType 類型的變量賦值 ,/ 而要使用 StrAssign 函數(shù)!void DelSubString(StringType &scrStr, StringType subStr)/* Remove all substring matching subStr from scrStr. */ StringType head,tail,S; int i; In
5、itStr(head); InitStr(tail); for(i=1;i=StrLength(scrStr)-StrLength(subStr)+1;i+) if(!StrCompare(SubString(scrStr,i,StrLength(subStr),subStr) StrAssign(head,SubString(scrStr,1,i-1);StrAssign(tail,SubString(scrStr,i+StrLength(subStr),StrLength(scrStr)-i-StrLength(subStr)+1); StrAssign(scrStr,Concat(hea
6、d,tail); i-; 編寫算法,實(shí)現(xiàn)串的基本操作Replace(&S,T,V)。要求采用教科書節(jié)中所定義的定長(zhǎng)順序存儲(chǔ)表示,但不允許調(diào)用串的基本操作。要求實(shí)現(xiàn)以下函數(shù):Status Replace(SString& s, SString t, SString v);/* 用串v替換串s中所有和串t匹配的子串。 */* 若有與t匹配的子串被替換,則返回TRUE;*/* 否則返回FALSE */定長(zhǎng)順序串SString的類型定義:typedef unsigned char SStringMAXSTRLEN+1; /* s0 is the strings length */注:這題在Status
7、 Replace(SString& s, SString t, SString v)函數(shù)前要寫一個(gè)int Index(SString s, SString t,int pos )的函數(shù)。如下:int Index(SString s, SString t,int pos ) int i = pos; int j = 1; while( i= s0&j t0 ) return i - t0; else return 0;Status Replace(SString& s, SString t, SString v)/* 用串v替換串s中所有和串t匹配的子串。 */* 若有與t匹配的子串被替換,則返
8、回TRUE;*/* 否則返回FALSE */ int flag = 0; int i,j,w,r; SString s1; for( i = 0; i = s0; i+ ) s1i = si; for( i = 1, j = 1; i = s10; ) w = Index( s1, t, i); if( !w ) while( i = s10 ) sj+ = s1i+; else while( i w ) sj+ = s1i+; for( r = 1; r = v0; r+ ) sj+ = vr; flag+; i += t0; s0 = -j; if( flag ) return TRUE;
9、 return FALSE; 編寫算法,從串s中刪除所有和串t相同的子串。要求實(shí)現(xiàn)以下函數(shù):Status DelSub(SString &s, SString t);/* 從串s中刪除所有和串t匹配的子串。 */* 若有與t匹配的子串被刪除,則返回TRUE;*/* 否則返回FALSE */定長(zhǎng)順序串SString的類型定義:typedef unsigned char SStringMAXSTRLEN+1; /* s0 is the strings length */注:這題在Status DelSub(SString &s, SString t)函數(shù)前要寫一個(gè)int Index(SString
10、 s, SString t,int pos )的函數(shù)。如下:int Index(SString s, SString t,int pos ) int i = pos; int j = 1; while( i= s0&j t0 ) return i - t0; else return 0;Status DelSub(SString &s, SString t)/* 從串s中刪除所有和串t匹配的子串。 */* 若有與t匹配的子串被刪除,則返回TRUE;*/* 否則返回FALSE */ int flag = 0; int i,j,w; for( i = 1, j = 1; i = s0; ) w =
11、 Index( s, t, i); if( !w ) while( i = s0 ) sj+ = si+; else while( i w ) sj+ = si+; flag+; i += t0; s0 = -j; if( flag ) return TRUE; return FALSE; 假設(shè)以定長(zhǎng)順序存儲(chǔ)結(jié)構(gòu)表示串,試設(shè)計(jì)一個(gè)算法,求串s中出現(xiàn)的第一個(gè)最長(zhǎng)重復(fù)子串及其位置,并分析你的算法的時(shí)間復(fù)雜度。要求實(shí)現(xiàn)以下函數(shù):void CommonStr(SString s, SString &sub, int &loc);/* 求串s中出現(xiàn)的第一個(gè)最長(zhǎng)重復(fù)子串sub及其位置loc */定長(zhǎng)順序串
12、SString的類型定義:typedef unsigned char SStringMAXSTRLEN+1; /* s0 is the strings length */void CommonStr(SString s, SString &sub, int &loc)/* 求串s中出現(xiàn)的第一個(gè)最長(zhǎng)重復(fù)子串sub及其位置loc */ int index=0,length=0,length1,i=0,j,k; while(is0) j=i+1; while(j=length) index=i; length=length1; j=j+length1; else j+; i+; loc=index; sub0=length;