当前位置:文档之家› 数据结构课后习题及解析第四章

数据结构课后习题及解析第四章

11. 写算法,实现顺序串的基本操作 StrReplace(&s,t,v)r1 中第 index 个字符起求出首次与串 r2 相同的子串的起始位置。

写一个函数将顺序串 s1 中的第 i 个字符到第 j 个字符之间的字符用 s2 串替换。

写算法,实现顺序串的基本操作 StrCompare(s,t) 。

第四章习题1. 设 s=' I AM A STUDENT , t= ' GOO D,q=' WORKER 给出下列操作的结果: StrLength(s); SubString(sub1,s,1,7);SubString(sub2,s,7,1);StrIndex(s, ' A ' ,4); StrReplace(s, ' STUDEN 'T,q); StrCat(StrCat(sub1,t), StrCat(sub2,q));2. 编写算法,实现串的基本操作 StrReplace(S,T,V) 。

3. 假设以块链结构表示串,块的大小为 1,且附设头结点。

试编写算法,实现串的下列基本操作:StrAsign(S,chars) ; StrCopy(S,T) ; StrCompare(S,T) ; StrLength(S) ; StrCat(S,T) ; SubString(Sub,S,pos,len) 。

4. 叙述以下每对术语的区别:空串和空格串;串变量和串常量;主串和子串;串变量的名字和串变 量的值。

5. 已知:S=”(xyz)* ” ,T= ”(x+z)*y ”。

试利用联接、求子串和置换等操作,将 S 转换为T. 6. S 和T 是用结点大小为1的单链表存储的两个串,设计一个算法将串 S 中首次与T 匹配的子串逆 置。

7. S 是用结点大小为4的单链表存储的串,分别编写算法在第k 个字符后插入串T ,及从第k 个字符 删除 len 个字符。

以下算法用定长顺序串: 8. 编写下列算法: 1) 将顺序串 r 中所有值为 ch1 的字符换成 ch2 的字符。

2) 将顺序串 r 中所有字符按照相反的次序仍存放在 r 中。

3) 从顺序串 r 中删除其值等于 ch 的所有字符。

5) 从顺序串 r 中删除所有与串 r1 相同的子串。

从顺序串 9. 10.实习题已知串S 和T ,试以以下两种方式编写算法,求得所有包含在 S 中而不包含在T 中的字符构成 R,以及新串R 中每个字符在串S 中第一次出现的位置。

利用CONCATLEN SUB 和EQUA 四种基本运算来实现。

显示若干行: list [[n1]-[n2]] 行开始, n2 缺省时,到最后一行,插入一行。

ins n :在第 n 行之前插入一行。

字符替换。

replace str1,str2, [[n1]-[n2]]:在 n1 到 n2 行之间用 str2 替换StrCat(StrCat(sub1,t),StrCat(sub2,q))sub1=' I AM A GOOD WORK 'ER 。

编写算法,实现串的基本操作 StrReplace(S,T,V) 。

2.2)以顺序串作为存储结构来实现。

编写一个行编辑程序EDLINE 完成以下功能: 2) 删除若干行。

del [[n1]-[n2]] : n1 、 n2 说明同( 1 )。

3)编辑第 n 行。

edit n :显示第 n 行的内容,另输入一行替换该行。

str1 。

3.设计一个文学研究辅助程序,统计小说中特定单词出现的频率和位置。

第四章答案 设 s=' I AM A STUDENT ,t= ' GOO D , q=' WORKER 给出下列操作的结果: 解答】 StrLength(s)=14;SubString(sub1,s,1,7) sub1=' I AM A ' SubString(sub2,s,7,1) sub2='StrIndex(s,4, 'A ')=6; StrReplace(s, 'STUDEN 'T,q);s='I AM A WORKE 'R ; 1.的新串 1)1):显示第 n1 行到第 n2 行, n1 缺省时,从第一 4)5)解答】算法如下:{ /*将S 中子串T 后的所有字符后移个位置*/for(i=S->+;i>=pos+;i--)int strReplace(SString S,SString T, SString V) {/*用串V 替换S 中的所有子串T */ int pos,i;/*求S 中子串T 第一次出现的位置/*用串V 替换S 中的所有子串TS->ch[+]=S->ch[i];for(i=0;i<=;i++)S->ch[pos+i]=[i];S->len=S->+;*/if(pos = =0)return(0);*/ switch/* case 串T 的长度等于串 0: V 的长度*/ for(i=0;i<=;i++)/*用V 替换 T*/ S->ch[pos+i]=[i ];case >0: /*串T 的长度大于串V 的长度*/ for(i=pos+;i<S->len;i --)/*将S 中子串T后的所有字符用V 替换T*/pos=strIndex(S,1,T);while(pos!=0)前移个位置 *//*case<0:/*串T 的长度小于串V 的长度*/if(S->+<= MAXLEN /* 插入后串长小于 MAXLEN*/for(i=0;i<MAXLEN-pos;i++)S->ch[i+pos]=[i]; S->len=MAXLEN;}}/*switch()*/pos=StrIndex(S,pos+,T);位置*/}/*while()*/ return(1); }/*StrReplace()*/附加题:用链式结构实现定位函数。

/* 用 V 替换 T*/else但串 V 可以全部替换 *//* 用 V 替换 T*//* 串 V 的部分字符要舍弃 */S->ch[i]=S->ch[+];for(i=0;i<=;i++)S->ch[pos+i]=[i];S->len=S->+; }if(pos+<=MAXLEN)else/* 替换后串长 >MAXLEN,for(i=MAXLEN-1;i>=pos+; i--)S->ch[i]=s->ch[+]for(i=0;i<=;i++)S->ch[pos+i]=[i]; S->len=MAXLEN;}/*求S 中下一个子串T 的解答】typedef struct Node { char data;struct Node *next; }Node,*Lstring;Node *p, *q, *Ppos; int i=0 , ,j=0;p=S->next; q=T->next;if(j!=pos)return(0);while(p!=NULL&& q!=NULL)/*Ppos 指向当前匹配的起始字符 */ if(p->data = = q->data){p=p->next; q=q->next;}else符起从新匹配 */{p=Ppos->next; q=T->head->next;while(p!=NULL&& j<pos) /*p 指向串S 中第pos 个字符*/{p=p->next;j++;}int strIndex(Lstring S, int pos, Lstring T) /*从串S 的pos 序号起,串T 第一次出现的位置*/if(T->next= =NULL|| S->next = =NULL) return(0);Ppos=p; /*从Ppos 指向字符的下一个字i++;}if(q= =NULL) return(pos+i);else return(0);第4章习题1. 设s=' I AMA STUDEN'T , t= 'GOO'D,q= ' WORKER。

给出下列操作的结果:StrLength(s); SubString(sub1,s,1,7); SubString(sub2,s, 7,1);StrIndex( s, ' A' ,4); StrReplace( s, STUDEN'T,q );StrCat(StrCat(sub1,t),StrCat(sub2,q));[ 参考答案]StrLength(s)= 14; sub1= ' IAMA_' ; sub2= ' StrIndex (s, ' A' ,4)= 6;StrReplace( s,' STUDEN'T,q )= ' I AM A WORKE'R ;StrCat(StrCat(sub1,t), StrCat(sub2,q))= ' I AM A GOOD WORK'ER;2. 编写算法,实现串的基本操作StrReplace(S,T,V) 。

/* 匹配成功*//* 失败*/3. 假设以块链结构表示串,块的大小为1,且附设头结点。

试编写算法,实现串的下列基本操作:StrAsign(S,chars) ;StrCopy(S,T) ;StrCompare(S,T) ;StrLength(S) ;StrCat(S,T) ;SubString(Sub,S,pos,len) 。

[ 说明] :用单链表实现。

4.叙述以下每对术语的区别:空串和空格串;串变量和串常量;主串和子串;串变量的名字和串变量的值。

5.已知:S=”(xyz)* ” , T= ”(x+z)*y ”。

试利用联接、求子串和置换等操作,将S 转换为T.6.S和T是用结点大小为1的单链表存储的两个串,设计一个算法将串S 中首次与T 匹配的子串逆置。

7.S是用结点大小为4的单链表存储的串,分别编写算法在第k个字符后插入串T,及从第k个字符删除len个字符。

以下算法用定长顺序串:8.写下列算法:将顺序串r 中所有值为ch1 的字符换成ch2 的字符。

将顺序串r 中所有字符按照相反的次序仍存放在r中。

从顺序串r 中删除其值等于ch 的所有字符。

相关主题