ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:20.81KB ,
资源ID:7711401      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7711401.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构单元练习5.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构单元练习5.docx

1、数据结构单元练习5单元练习5一判断题(下列各题,正确的请在前面的括号内打;错误的打 )()(1)串是n个字母的有限序列。()(2)串的数据元素是一个字符。()(3)串的长度是指串中不同字符的个数。()(4)如果两个串含有相同的字符,则说明它们相等。()(5)如果一个串中所有的字母均在另一个串中出现,则说明前者是后者的子串。()(6)串的堆分配存储是一种动态存储结构。()(7)“DT”是“DATA”的子串。()(8)串中任意个字符组成的子序列称为该串的子串。()(9)子串的定位运算称为模式匹配。()(10)在链串中为了提高存储密度,应该增大结点的大小。二填空题(1) 由零个或多个字符组成的有限序

2、列称为 字符串(或串) 。(2) 字符串按存储方式可以分为:顺序存储、链接存储和 堆分配存储 。(3) 串的顺序存储结构简称为 顺序串 。(4) 串顺序存储非紧凑格式的缺点是: 空间利用率低 。(5) 串顺序存储紧凑格式的缺点是对串的字符处理 效率低 。(6) 串链接存储的优点是插入、删除方便,缺点的 空间利用率低 。(7) 在C或C+语言中,以字符 0 表示串值的终结。(8) 空格串的长度等于 空格的个数 。(9) 在空串和空格串中,长度不为0的是 空格串 。(10) 两个串相等是指两个串相长度等,且对应位置的 字符都相同 。(11) 设S=My Music,则LenStr(s)= _ 8

3、。(12) 两个字符串分别为:S1=Today is,S2=30 July,2005,ConcatStr(S1,S2)的结果是: Today is 30 July,2005 。(13) 求子串函数SubStr(Today is 30 July,2005,13,4)的结果是: July 。(14) 在串的运算中,EqualStr(aaa,aab)的返回值为 m,则模式匹配算法最坏情况下的时间复杂度为: (n-m+1)*m 。三选择题(1)串是一种特殊的线性表,其特殊性体现在( B )。A.可以顺序存储 B数据元素是一个字符C.可以链接存储 D数据元素可以是多个字符(2)某串的长度小于一个常数,则

4、采用( B )存储方式最节省空间。 A链式 B顺序 C堆结构 D无法确定(3)以下论述正确的是( C )。 A空串与空格串是相同的 Btel是Teleptone的子串 C空串是零个字符的串 D. 空串的长度等于1(4)以下论述正确的是( B )。 A空串与空格串是相同的 Bton是Teleptone的子串 C空格串是有空格的串 D. 空串的长度等于1(5)以下论断正确的是( A )。 A是空串, 空格串 BBEIJING是BEI JING的子串 CsomethingSomethig DBIT=BITE(6)设有两个串S1和S2,则EqualStr(S1,S2)运算称作( D )。 A. 串连接

5、 B模式匹配 C. 求子串 D串比较(7)串的模式匹配是指( D )。A判断两个串是否相等 C找某字符在主串中第一次出现的位置B对两个串比较大小 D找某子串在主串中第一次出现的第一个字符位置(8)若字符串ABCDEFG采用链式存储,假设每个字符占用1个字节,每个指针占用2个字节。则该字符串的存储密度为( D )。 A20 B40 C50 D333(9)若字符串ABCDEFG采用链式存储,假设每个指针占用2个字节,若希望存储密度50,则每个结点应存储( A )个字符。 A2 B3 C4 D5(10)设串S1=I AM,S2=A SDUDENT,则ConcatStr(S1,S2)=( B )。 A

6、I AM BI AM A SDUDENT CIAMASDUDENT D. A SDUDENT(11)设S=,则LenStr(S)=( A )。A0 B1 C2 D3(12)设目标串T=AABBCCDDE,模式P=ABCDE,则该模式匹配的有效位移为 ( A )。A0 B1 C2 D3(13)设目标串T=AABBCCDDEEFF,模式P=CCD,则该模式匹配的有效位移为 ( D )。A2 B3 C4 D. 5(14)设目标串T=aabaababaabaa,模式P=abab,朴素匹配算法的外层循环进行了( D )次。 A1 B9 C4 D5(15)朴素模式匹配算法在最坏情况下的时间复杂度是( D

7、)。 AO(m) BO(n) C0(m+n) D0(m*n)(16)S=morning,执行求子串函数SubStr(S,2,2)后的结果为( B )。Amo Bor Cin Dng(17)S1=good,S2=morning,执行串连接函数ConcatStr(S1,S2)后的结果为( A )。 Agoodmorning Bgood morning CGOODMORNING DGOOD MORNING(18)S1=good,S2=morning,执行函数SubStr(S2,4,LenStr(S1)后的结果为( B )。 Agood Bning Cgo Dmorn(19)设串S1=ABCDEFG,

8、S2=PQRST ,则ConcatStr(SubStr(S1,2,LenStr(S2),SubStr(S1,LenStr(S2),2)的结果串为( D )。 ABCDEF BBCDEFG CBCPQRST D. BCDEFEF(20)若串S=SOFTWARE,其子串的数目最多是:( C ) 。 A35 B36 C37 D38 (8+7+6+5+4+3+2+1+1=37)四程序题填空(每空2分,共50分)1下面程序是把两个串r1和r2首尾相连的程序,即:r1=r1+r2,试完成程序填空。typedef Struct char vecMAXLEN; / 定义合并后串的最大长度int len; /

9、len为串的长度St ;void ConcatStr(Str *r1,Str *r2) / 字符串连接函数 int i; cout vecvec; if(r1-len+r2-len MAXLEN ) cout 两个串太长,溢出!; else for(i=0;ilen ;i+) / 把r2连接到r1 r1-vec r1-len+i =r2-veci; r1-vecr1-len+i= 0 ; / 添上字符串结束标记 r1-len= r1-len+r2-len ; / 修改新串长度 2. 设x和y两个串均采用顺序存储方式,下面的程序是比较x 和y两个串是否相等的函数,试完成程序填空。#define

10、MAXLEN 100typedef struct char vecMAXLEN; len; str;int same (x,y)str *x,*y; int i=0,tag=1; if (x-len != y-len) return (0); / (或 ) else while ( ilen & tag ) if ( x-veci != y-veci ) tag=0 ; i+ ; ( 或 i=i+1 ) return (tag); 3下面算法是判断字符串是否为回文(即正读和倒读相同),试完成程序填空。解: #include stdio.htypedef struct char vecMAXLE

11、N; int len; str;void Palindrome (str s) int i=0; ing j= s.len-1 ; while ( j-i=1 ) if ( s.veci= s.vecj ) i+; j- ;continue / (或 j=j+1 ) else break; if ( j-i=1 ) coutIt is not a palindromen; else coutIt is a palindromen;五编程题1 设下面所用的串均采用顺序存储方式,其存储结构定义如下,请编写下列算法:#define MAXLEN 100typedef struct char vecM

12、AXLEN; int len; str;(1) 将串中r中所有其值为ch1的字符换成ch2的字符。(2) 将串中r中所有字符按照相反的次序仍存放在r中。(3) 从串r中删除其值等于ch的所有字符。(4) 从串r1中第index个字符起求出首次与字符r2相同的子串的起始位置。(5) 从串r中删除所有与串r3相同的子串(允许调用第(4)小题的函数)。(6) 编写一个比较x 和y两个串是否相等的函数。2设计一算法判断字符串是否为回文(即正读和倒读相同)3设计一算法从字符串中删除所有与字串del相同的子串4设计一算法统计字符串中否定词not的个数1解:(1)算法思想:从头至尾扫描r串,对于值为ch1的

13、元素直接替换成ch2即可。 str *trans (r,ch1,ch2) str *r; char ch1,ch2; int i; for (i=0;ilen;i+)if (r-veci=ch1) r-veci=ch2; return(r); (2)算法思想是:将第一个元素与最后一个元素交换,第二个元素与倒数第二个元素交换,依次类推,便将该串的所有字符反序了。 str *invert (r) str *r; int i; char x; for (i=0;ilen%2) ;i+) x=r-veci; r-veci=r-r-len-i+1; r-vecr-len-i+1=x; return (r

14、 ); (3)算法思想:从头到尾扫描r串,对于值为ch的元素用移动的方式进行删除。 str *delall (r,ch) str *r; char ch; int i,j;for (i=0;ilen;i+)if (r-veci=ch) for (j=i;jlen;j+) r-veci=r-veci+1; r-len=r-len-1; return (r ); (4)算法思想:从第index个元素开始扫描r1,当其元素值与r2的第一个元素的值相同时,判定它们之后的元素值是否依次相同,直到r2结束为止,若都相同则返回,否则继续上述过程直到r1扫描完为止。 int partposition(r2,r

15、1,index) str *r2, *r1; int index; int i,j,k; for (i=index;r1-veci;i+) for (j=i,k=0;r1-vecj=r2-veck;j+,k+) if (!r2-veck+1) return(i); return(-1);(5)算法思想:从位置1开始调用第(4)小题的函数partposition(),若找到了一个相同子串,则调用delsubstring(),再相同的方法查找后面位置的相同子串。 str *delstringall(r,r3) str *r, *r3; int i=0; while (ilen) if (partp

16、osition(r,r3,i)!=-1) delsubstring(r,i,r3-len) i+; (6)两个串相等的条件是两个串的长度相等,且两个串的对应的字符必须都相同。int same(x,y)str *x,*y; int i=0,tag=1; if (x-len!=y-len) return(0); else while (ilen & tag) if (x-veci!=y-veci) tag=0; i+; return(tag); 2解:#include stdio.htypedef struct char *head; int length; Hstring;void isPali

17、ndrome(Hstring s) int i=0; int j=s.length-1; while (j-i=1) if (s.headi=s.headj) i+; j-; continue; else break; if (j-i=1) printf(Tt is not a palindromen ); else printf(it is a palindromen);3解:#include stdio.h#include string.htypedef struct char *head; int length;Hstring;char *DeleteSubString(Hstring

18、S,Hstring T) int i=0; int j,k; int Slength=S.length; int Tlength=T.length; char *tail; while (i=Slenght-Tlength) j=0;k=i; while (jTlength & S.headk=T.headj) / 在位移i用朴素的模式匹配 j+; k+; if (j=Tlength) / 若匹配则执行下面的程序 if (i=0) / 若位于头位置则改变头指针 S.head=S.head+Tlength; S.length-=Tlength; Slength-=Tlength; i=0; el

19、se if (i+TlengthSlength) / 若位于中间则拼接两端 tail=S.head+i+Tlength; strcpy(S.head+i,tail); S.length-=Tlength; Slength-=Tlength; else / 若位于尾部则割去 strncpy(S.head+i,”0”,1); else / 若不匹配则i加1 i+; return S.head;4解:#include stdio.h#include string.hint Find_word(char *text, const char *word) int textlength=strlen(te

20、xt); int wordlength=strlen(word); int i,j,k; int count=0;for (i=0;itextlength-wordlength; i+) j=0; k=i; while (j s-len ) coutntt所要删除的子串超界!n;else for (k=i+j;klen ;k+,i+) s-veci=s-vec k ; s-len=s-len-j; s-vecs-len= 0 ; main() couti;coutj;DelStr(s, i-1 ,j); 2下列程序是在字符串s的第i个字符前,插入一个子串s1,试完成程序填空。#include

21、stdio.htypedef structchar vecMAXLEN;int len;str;Str *InsStr(Str *s,Str *s1,int i) int k; if (i=s-len| s-len+s1-len MAXLEN) printf(ntt不能插入!n); else for (k=s-len-1;k=i; k- ) s-vec s1-len+k =s-veck; for (k=0;klen ;k+) s-veci+k=s1-veck; s-len= s-len+s1-len ; s-vecs-len=0; return s;main() couti;cout s-len ) cout ntt子串超界!n; return; else for(k=0; kveck=s-vec i+k-1 ; s1-len= j ; s1-vecs1-len=0; coutvec);main() couti; coutj; SubStr (s,i,j);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1