数据结构第4章 串习题课


输出: t=THESE ARE A BOOKS v=YXY u=XWXWXW
4.8 写出next
模式串 : ADABBADADA A D A B B A D A D A Next 0 1 1 2 1 1 2 3 4 3 Nextvlue 0 1 0 2 1 0同字符的 总数和每种字符的个数
#include <iostream> using namespace std; #define MaxLen 1000 int main(){ int T[256]={0},num=0,i; char s[MaxLen]={0}; cin.getline(s,MaxLen); for(i=0;i<strlen(s);i++) T[s[i]]++; for(i=0;i<256;i++) if(T[i]>0) { num++; cout<<char(i)<<" "<<T[i]<<endl; } cout<<"total:"<<num<<endl; return 0; }
4.20 编写算法,从串s中删除所有和串t 相同的子串(0882079提交)
#include <stdio.h> void delstring(char S[],int Slen,int pos,int len) { char *start,*end; start=&S[pos+len-1]; end=&S[Slen-1]; for(;start<=end;start++) *(start-len)=*start; *(start-len)='\0'; } void main() { int i,j,alen,blen,pos ; char a[100],b[100]; gets(a); gets(b); for(j=0;a[j]!='\0';j++) ; for(j=0;b[j]!='\0';j++) ; alen=j; blen=j; i=0;j=0; while(i<alen) { if(a[i]==b[j]) {++i;++j;} else {i=i-j+1;j=0;} if(j>=blen) { delstring(a,alen,i-blen+1,blen); alen=alen-blen; i=i-j+1; } } puts(a); }
习题课
第4章 串
4.5 试问执行以下函数会产生怎样的输 出结果?
void demonstrate(){ StrAssign(s,’THIS IS A BOOK’); Replace(s,SubString(s,3,7),’ESE ARE’): StrAssign(t,Concat(s,’S’)); StrAssign(u,’XYXYXYXYXYXY’); StAssign(v,SubString(u,6,3)); StrAssign(w,’W’); printf(‘t=‘,t,’v=‘,v,’u=‘,Replace(u,v,w)); }// demonstrate 1. s=THIS IS A BOOK 2. s=THESE ARE A BOOK 3. t=THESE ARE A BOOKS 4. u=XYXYXYXYXYXY 5. v= YXY 6. w=W 7. Replace(u,v,w)=XWXWXW //1 //2 //3 //4 //5 //6 //7
合集下载

数据结构课后练习 - 第4章

数据结构课后练习 - 第4章

四、简答题
1. 简述串的存储结构及各自的特点。 • 堆分配存储表示的特点是,仍以一组地址连续的存储单元 存放串值字符序列,但存储空间是在程序执行过程中动态 分配而得。所以也称为动态存储分配的顺序表。 • 在C语言中,利用动态存储管理函数malloc()和free(),来 根据实际需要动态分配和释放字符数组空间。 • 若分配成功,则返回一个指向起始地址的指针,作为串的 基址,同时,为了以后处理方便,约定串长也作为存储结 构的一部分。
S
S
h
e
n
d
a
# # ^
• 为了提高存储密度,可使每个结点存放多个字符。通常将 结点数据域存放的字符个数定义为结点大小。 • 显然,当结点大小大于1时,串的长度不一定正好是结点 的整数倍,则链表中的最后一个结点不一定全被串值占满, 此时通常补上“#”或其它的非串值字符(一般情况下“#” 不属于串的字符集,是一个特殊的符号)。 • 这种存储形式优点是存储密度高于结点大小为1 的存储形 式。不足之处是做插入、删除字符的操作时,可能会引起 结点之间字符的移动,算法实现起来比较复杂。
Chunk *head;
int curlen; } LinkString
}Chunk;
int index( LinkString r1, LinkString r2 ) { //链串上的子串定位操作 LinkString p, p1, q, q1; int i=0, pos=0; p=r1->head;
4. 字符串”VARTYPE int”,若采用动态分配的顺序存储方 A 法需要_______个字节(设每种数据均占用2个字节)。
A. 22 B. 11 C. 10 D. 动态产生,视情况而定
三、填空题

严蔚敏《数据结构(c语言版)习题集》答案第四章 串

严蔚敏《数据结构(c语言版)习题集》答案第四章 串
《一定能摸到红球吗?》说课稿
林银花
一、教材说明:
1、 课题:《一定能摸到红球吗?》
2、 本节内容的地位和作用
在现代社会中,人们面临着更多的机会和选择,常常需要在不确定情境中作出合理的决策,概率正是通过对不确定现象和事件发生的可能性的刻画,来为人们更好的制定决策提供依据和建议.本节内容又是义务教育阶段,唯一培养学生从不确定的角度来观察世界的数学内容,让学生了解可能性是普遍的,有助于他们理解社会,适应生活.
(1) 每位同学从盒子中轮流摸球,记录下所摸球的颜色,并将球放回盒中.
(2) 做10次这样的活动,将最终结果填在表中.
(3) 全班将各小组活动进行汇总,摸到红球的次数是多少?摸到黄球的次数是多少?他们各占总数的百分比是多少?
(4) 你认为哪种颜色的球多?打开看一看.
(5) 如果从盒中任意摸出一球,你认为摸到哪种颜色的球可能性大? 学生阅读学习目标.
学生两人一组进行活动.一人摸一人记录.并交流.
题(1):学生先想象后画图,并通过搭建几何体验证学习成果。
题(2):学生四人一组进行活动,一人搭几何体,另三人画图并交流,如有异义,举手询问。依次轮流。 使学生明确学习目标,进入学习角色,做到有的放矢。
目的是使学生体会到进行概率试验时,一定要保证随机性.
课堂组织策略:创设贴近学生生活,生动有趣的问题情境,开展活泼、主动、有效的数学活动,组织学生主动参与、勤于动手、积极思考,使他们在自主探索和合作交流的过程中真正理解和掌握概率有关内容。
学生学习策略:明确学习目标,了解所需掌握的知识,在教师的组织、引导、点拨下主动地从事观察、试验、猜测、验证与交流等数学活动,从而真正有效地理解和掌握知识。
(3)、情感目标:

数据结构课后习题答案第四章

数据结构课后习题答案第四章

第四章一、简述下列每对术语的区别:空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;目标串和模式串;有效位移和无效位移。

答:●空串是指不包含任何字符的串,它的长度为零。

空白串是指包含一个或多个空格的串,空格也是字符。

●串常量是指在程序中只可引用但不可改变其值的串。

串变量是可以在运行中改变其值的。

●主串和子串是相对的,一个串中任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。

●静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。

动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。

●目标串和模式串:在串匹配运算过程中,将主串称为目标串,而将需要匹配的子串称为模式串,两者是相对的。

●有效位移和无效位移:在串定位运算中,模式串从目标的首位开始向右位移,每一次合法位移后如果模式串与目标中相应的字符相同,则这次位移就是有效位移(也就是从此位置开始的匹配成功),反之,若有不相同的字符存在,则此次位移就是无效位移(也就是从此位置开始的匹配失败)。

二、假设有如下的串说明:char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30], *p;(1)在执行如下的每个语句后p的值是什么?p=stchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6');(2)在执行下列语句后,s3的值是什么?strcpy(s3,s1); strcat(s3,","); strcat(s3,s2);(3)调用函数strcmp(s1,s2)的返回值是什么?(4)调用函数strcmp(&s1[5],"ton")的返回值是什么?(5)调用函数stlen(strcat(s1,s2))的返回值是什么?解:(1) stchr(*s,c)函数的功能是查找字符c在串s中的位置,若找到,则返回该位置,否则返回NULL。

数据结构教程李春葆课后答案第4章串

数据结构教程李春葆课后答案第4章串

8. 采用顺序结构存储串,设计一个实现串通配符匹配的算法 pattern_index(),其中的 通配符只有‘?’ ,它可以和任一个字符匹配成功。例如,pattern_index("?re","there are") 返回的结果是 2。 解:采用 BF 算法的穷举法的思路,只需要增加对‘?’字符的处理功能。对应的算法 如下:
void maxsubstr(SqString s,SqString &t) { int maxi=0,maxlen=0,len,i,j,k; i=0; while (i<s.length) //从下标为 i 的字符开始 { j=i+1; //从 i 的下一个位置开始找重复子串 while (j<s.length) { if (s.data[i]==s.data[j]) //找一个子串,其起始下标为 i,长度为 len { len=1; for(k=1;s.data[i+k]==s.data[j+k];k++) len++; if (len>maxlen) //将较大长度者赋给 maxi 与 maxlen { maxi=i; maxlen=len; } j+=len; } else j++; } i++; //继续扫描第 i 字符之后的字符 } t.length=maxlen; //将最长重复子串赋给 t for (i=0;i<maxlen;i++) t.data[i]=s.data[maxi+i]; }
SqString CommChar(SqString s1,SqString s2) { SqString s3; int i,j,k=0; for (i=0;i<s1.length;i++) { for (j=0;j<s2.length;j++) if (s2.data[j]==s1.data[i]) break; if (j<s2.length) //s1.data[i]是公共字符 { s3.data[k]=s1.data[i]; k++; } } s3.length=k; return s3; }

李春葆《数据结构教程》(第4版)课后习题-串(圣才出品)

李春葆《数据结构教程》(第4版)课后习题-串(圣才出品)

第4章串1.采用顺序结构存储串,编写一个实现串通配符匹配的算法pattern______index(),其中的通配符只有“?”,它可以和任一字符匹配成功,例如,pattern______index(″? re″,″there are″)返回的结果是2。

答:本题的基础是Brute—Force模式匹配算法,只是增加了“?”的处理功能。

对应的算法如下:2.有两个串s1和s2,设计一个算法求这样一个串,该串中的字符是s1和s2中的公共字符。

答:扫描s1,对于当前字符s1.data[i],若在s2中,则将其加入到串s3中。

最后返回s3串。

对应的算法如下:3.设目标为t=’abcaabbabcabaacbacba’,模式p=’abcabaa’。

(1)计算模式P的nextval函数值。

(2)不写算法,只画出利用KMP算法进行模式匹配时的每一趟匹配过程。

答:(1)先计算next数组,在此基础上求nextval数组,如表4-1所示。

表4-1 计算next数组和nextval数组(2)采用KMP算法求子串位置的过程如下(开始时i=0,j=0):第1趟匹配:此时i=4,j=4,匹配失败,而nextval[4]=0,则i=4,j=nextval[4]=0,即:第2趟匹配:此时i=6,j=2,匹配失败,而nextval[2]=0,则i=6,j=nextval[2]=0,即:第3趟匹配:此时i=6,j=0,匹配失败,而nextval[0]=-1,则i=6,j=nextval[0]=-1。

因j=-1,执行i=i+1=7,j=j+1=0,即:第4趟匹配:此时i=14,j=7,匹配成功,返回v=i-t.1ength=14-7=7。

上机实验题4实验题1编写一个程序algo4-1.cpp,实现顺序串的各种基本运算,并在此基础上设计一个程序exp4-1.cpp完成如下功能:(1)建立串s=″abcdefghefghijklmn″和串sl=″xyz″;(2)输出串s;(3)输出串s的长度;(4)在串s的第9个字符位置插入串s1而产生串s2;(5)输出串s2;(6)删除串s第2个字符开始的5个字符而产生串s2;(7)输出串s2;(8)将串s第2个字符开始的5个字符替换成串s1而产生串s2;(9)输出串s2;(10)提取串s的第2个字符开始的10个字符而产生串s3;(11)输出串s3;(12)将串s1和串s2连接起来而产生串s4;(13)输出串s4。

数据结构第4章习题.docx

数据结构第4章习题.docx

第4章习题解答一、填空1.字符串是一种特殊的线性表,特殊在于它的数据元素只能是一字符,特殊在于串可以作为一个__________ 参与所需要的处理。

2.空格串是由___ 组成的串,空串是_________ 的串,因此空格串和空串不是一个概念。

3.字符串中任意多个_______ 字符所组成的子序列,被称作是这个串的“子串”,这个字符串木身则称为“主串”。

4.我们说两个字符串相等,在计算机内部实际上是通过对相应位置上字符__________ 码的比较而得到的结论。

5.设有串s=<t I am a teacher"。

该串的长度是_________ 。

6.设有三个串:sl=“Good", s2=9', s3=“bye!''。

则si、s2、s3连接后的结果串应该是7.所谓“数组”,是指〃(H>1)个具有」业L类型的数据的有序集合。

8.矩阵与通常所说的[维数组冇关。

9.所谓“特殊矩阵”,是指那些元素在矩阵小的分布具有一定规律性的矩阵;而矩阵小的零元素个数远远多于非零元素的个数,但非零元素的分布却没有规律,这样的矩阵被称为“稀疏矩阵”。

10.在一个阶方阵A中,若所有元素都有性质:= n),就称其为对称矩阵。

二、选择1 •设有两个串si和s20求s2在si中首次出现的位置的操作称为__________ oA.连接B.模式匹配C.求了串D.求串长2・有串:“①",那么它的长度是____ oA. 0B. 1C. 2D. 33.设有串sl=“ABCDEFG'和s2=“PQRSF'。

已知:算法con(x, y)返回串x和y的连接串;subs(s, i, j)返回串s的第i个字符开始往后j个字符组成的子串;len(s)返回串s的长度。

那么,con(subs(sl, 2, len(s2)), subs(sl, len(s2), 2))的操作结果是串__________ 。

数据结构(第二版)习题答案第4章

printf("input char to s2:\n");
gets(s2.str);
s2.length=strlen(s2.str);
m=strcompare(s1,s2);
if(m==1) printf("s1>s2\n");
else if(m==-1) printf("s2>s1\n");
free(S);
free(T1);
free(T2);
}
【参考程序
2】:
#include<stdio.h>
#define MAXSIZE 100
typedef struct{
char str[MAXSIZE];
int length;
}seqstring;
for(k=0;k<t2.length;k++)
s->str[c+k]=t2.str[k];
else if(t1.length<t2.length)
{ for(m=s->length-1;m>i-1;m--)
s->str[t2.length-t1.length+m]=s->str[m]; //后移留空
while (i<t->length && j<p->length)
{
if(j==-1||t->str[i]==p->str[j])
{i++; j++;}
else j=next[j];
}
if (j==p->length) return (i-p->length);

(完整word版)数据结构 第四章(串) 考试题目(word文档良心出品)

第四章串一单项选择题:1.下列那些为空串()A)S=“ ” B)S=“”C)S=“φ” D)S=“θ”2.S1=“ABCD”,S2=“CD”则S2在S3中的位置是()A)1 B)2 C)3D)43.假设S=“abcaabcaaabca”,T=“bca”,Index (S,T,3) 的结果是()A)2 B)6 C)11 D)04.在串中,对于SubString(&Sub,S,pos,len)基本操作,pos和len的约束条件是()A)0<pos<StrLength(S)+1且1<=len<=StrLength(S)-pos+1B)0<pos<StrLength(S)+1且0<=len<=StrLength(S)-pos-1C)1<=pos<=StrLength(S) 且0<=len<=StrLength(S)-pos+1D)1<=pos<=StrLength(S) 且1<=len<=StrLength(S)-pos-15. 串是一种特殊的线性表,其特殊性体现在( )。

A.可以顺序存储B. 数据元素是一个字符C.可以链接存储D. 数据元素可以是多个字符6. 串是( )。

A.少于一个字母的序列B. 任意个字母的序列C.不少于一个字符的序列D. 有限个字符的序列7. 串的长度是( )。

A.串中不同字母的个数B. 串中不同字符的个数C.串中所含的字符的个数D. 串中所含字符的个数,且大于08. 设有S1=‘ABCDEFG’,S2=‘PQRST’,函数con(x,y)返回x和y串的连接串,subs(I,j)返回串S的从序号I的字符开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(S1,2,len(S2)),subs(S1,len(S2),2))的结果是( )。

A.BCDEF B. BCDEFG C. BCPQRST D. BCDEFEF9. 若某串的长度小于一个常数,则采用( )存储方式最为节省空间。

《数据结构与算法》第四章-学习指导材料

《数据结构与算法》第四章串知识点及例题精选串(即字符串)是一种特殊的线性表,它的数据元素仅由一个字符组成。

4.1 串及其基本运算4.1.1 串的基本概念1.串的定义串是由零个或多个任意字符组成的字符序列。

一般记作:s="s1 s2 … s n""其中s 是串名;在本书中,用双引号作为串的定界符,引号引起来的字符序列为串值,引号本身不属于串的内容;a i(1<=i<=n)是一个任意字符,它称为串的元素,是构成串的基本单位,i是它在整个串中的序号; n为串的长度,表示串中所包含的字符个数,当n=0时,称为空串,通常记为Ф。

2.几个术语子串与主串:串中任意连续的字符组成的子序列称为该串的子串。

包含子串的串相应地称为主串。

子串的位置:子串的第一个字符在主串中的序号称为子串的位置。

串相等:称两个串是相等的,是指两个串的长度相等且对应字符都相等。

4.2 串的定长顺序存储及基本运算因为串是数据元素类型为字符型的线性表,所以线性表的存储方式仍适用于串,也因为字符的特殊性和字符串经常作为一个整体来处理的特点,串在存储时还有一些与一般线性表不同之处。

4.2.1 串的定长顺序存储类似于顺序表,用一组地址连续的存储单元存储串值中的字符序列,所谓定长是指按预定义的大小,为每一个串变量分配一个固定长度的存储区,如:#define MAXSIZE 256char s[MAXSIZE];则串的最大长度不能超过256。

如何标识实际长度?1. 类似顺序表,用一个指针来指向最后一个字符,这样表示的串描述如下:typedef struct{ char data[MAXSIZE];int curlen;} SeqString;定义一个串变量:SeqString s;这种存储方式可以直接得到串的长度:s.curlen+1。

如图4.1所示。

s.dataMAXSIZE-1图4.1 串的顺序存储方式12. 在串尾存储一个不会在串中出现的特殊字符作为串的终结符,以此表示串的结尾。

数据结构第四章串习题及答案

习题四串一、单项选择题‎1.下面关于串‎的的叙述中‎,哪一个是不‎正确的?()A.串是字符的‎有限序列 B.空串是由空‎格构成的串‎C.模式匹配是‎串的一种重‎要运算 D.串既可以采‎用顺序存储‎,也可以采用‎链式存储2.串是一种特‎殊的线性表‎,其特殊性体‎现在()。

A.可以顺序存‎储 B.数据元素是‎一个字符C.可以链接存‎储 D.数据元素可‎以是多个字‎符3.串的长度是‎指()A.串中所含不‎同字母的个‎数 B.串中所含字‎符的个数C.串中所含不‎同字符的个‎数 D.串中所含非‎空格字符的‎个数4.设有两个串‎p和q,其中q是p‎的子串,求q在p中‎首次出现的‎位置的算法‎称为()A.求子串 B.联接 C.匹配 D.求串长5.若串S=“softw‎a re”,其子串的个‎数是()。

A.8 B.37 C.36 D.9二、填空题1.含零个字符‎的串称为_‎_____‎串。

任何串中所‎含____‎__的个数‎称为该串的‎长度。

2.空格串是指‎__ __,其长度等于‎__ __。

3.当且仅当两‎个串的__‎____相‎等并且各个‎对应位置上‎的字符都_‎_____‎时,这两个串相‎等。

一个串中任‎意个连续字‎符组成的序‎列称为该串‎的____‎__串,该串称为它‎所有子串的‎_____‎_串。

4.INDEX‎(‘DATAS‎T RUCT‎U RE’,‘STR’)=_____‎___。

5.模式串P=‘abaab‎c ac’的next‎函数值序列‎为____‎____。

6.下列程序判‎断字符串s‎是否对称,对称则返回‎1,否则返回0‎;如 f("abba")返回1,f("abab")返回0;int f((1)__ _____‎_){int i=0,j=0;while‎(s[j])(2)___ _____‎;for(j--; i<j && s[i]==s[j]; i++,j--);retur‎n((3)___ ____)}7.下列算法实‎现求采用顺‎序结构存储‎的串s和串‎t的一个最‎长公共子串‎。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档