数据结构答案串学习指导Word文档下载推荐.docx

上传人:b****1 文档编号:15218434 上传时间:2022-10-28 格式:DOCX 页数:13 大小:20.48KB
下载 相关 举报
数据结构答案串学习指导Word文档下载推荐.docx_第1页
第1页 / 共13页
数据结构答案串学习指导Word文档下载推荐.docx_第2页
第2页 / 共13页
数据结构答案串学习指导Word文档下载推荐.docx_第3页
第3页 / 共13页
数据结构答案串学习指导Word文档下载推荐.docx_第4页
第4页 / 共13页
数据结构答案串学习指导Word文档下载推荐.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据结构答案串学习指导Word文档下载推荐.docx

《数据结构答案串学习指导Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构答案串学习指导Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。

数据结构答案串学习指导Word文档下载推荐.docx

〔1〕求串长:

LenStr(s)。

〔2〕串连接:

ConcatStr(s1,s2)。

〔3〕求子串:

SubStr(s,i,len)。

〔4〕串比较:

EqualStr(s1,s2)。

〔5〕子串查找:

IndexStr(s,t),找子串t在主串s中首次出现的位置〔也称形式匹配〕。

〔6〕串插入:

InsStr(s,t,i)。

〔7〕串删除:

DelStr(s,i,len)。

4.串的存储

〔1〕定长顺序存储。

〔2〕链接存储。

〔3〕串的堆分配存储。

典型习题分析

【例1】下面关于串的的表达中,哪一个是不正确的?

〔  〕

A.串是字符的有限序列B.空串是由空格构成的串

C.形式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储

分析:

空串是不含任何字符的串,即空串的长度是零。

空格串是由空格组成的串,其长度等于空格的个数。

答案为B。

【例2】两个串相等的充分必要条件是()。

A.两个串长度相等B.两个串有一样字符

C.两个串长度相等且有一样字符D.以上结论均不正确

根据串相等定义,两个串是相等是指两个串的长度相等且对应字符都相等,故A、B、C均不正确,答案为D。

【例3】串链式存储的优点是〔1〕,缺点是〔2〕。

由链式存储结点特点可以得到:

〔1〕插入、删除方便。

〔2〕浪费空间。

注意,这里串的链式存储是指结点元素为1个字符的链串,假设结点元素字符数大于1,插入和删除同样不方便,但空间利用率可以进步。

【例4】设S="

abccdcdccbaa"

,T="

dccb"

,那么第7次匹配成功。

由字符串形式匹配概念,匹配过程如下:

S="

第一趟     d 不成功

第二趟      d不成功

第三趟   d不成功

S="

第四趟     d不成功

第五趟     dcc不成功

第六趟      d不成功

第七趟      dccb成功

【例5】利用函数LenStr(s),SubStr(s,i,len)和ConcatStr(s1,s2)写一算法voidStrInsert(char*S,char*T,inti),将串T插入到串S的第i个位置上。

假设i大于S的长度,那么插入不执行。

请在处填写语句,完成此程序。

算法如下:

voidInsStr(char*S,char*T,inti)//将串T插入到串S的第i个位置上

{

char*Temp;

Temp=(char*)malloc(sizeof(char[Maxsize]));

//设置一个临时串

if(i<

=LenStr(S))

{

(1);

//将第i位起以后的字符拷贝到临时串中

S=

(2);

//将串T拷贝到串S的第i个位置处,覆盖后面的字符

S=(3);

//把临时串中的字符联接到串S后面

free(Temp);

}

〔1〕因为是将串S第i个位置起以后字符复制到临时串变量Temp中采用求子串方法即Temp=SubStr(s,i,LenStr(S))。

〔2〕因为将串T拷贝到串S的第i个位置处,覆盖后面的字符采用串连接方法,即ConcatStr(SubStr(S,0,i-1),T)。

〔3〕ConcatStr(SubStr(S,0,i-1),Temp)。

【例6】链式串上的子串定位。

由于是链式串,所以对元素的存储表示与顺序存储串不同,在链式串中不是用下标指示元素,而是用指针指向元素。

程序如下:

typedefstructnode

{chardata;

structnode*next;

}LinkStrNode;

LinkStr*LinkStrNode(LinkStrNode*t,LinkStrNode*p)

{LinkStrNode*pos,*qi,*qj;

pos=t;

qi=pos;

qj=p;

while(qi&

&

qj)

{if(q1->

data==qj->

data)

{qi=qi->

next;

qj=qj->

else

{pos=pos->

//形式右移,继续判断pos是否为有校位移

qi=pos;

qj=p;

}

if(qj==NULL)

returnpos;

//匹配成功

else

returnNULL;

//匹配失败

【例7】一个文本串可用事先给定的字母映射表进展加密,例如,设字母映射表为:

abcdefghijklmnopqrstuvwxyz

ngzqtcobmuhelkpbawxfyIvrsj

那么字符串“encrypt〞被加密为“tkzwsdf〞。

试写一算法将输入的文本串进展加密后输出;

另写一算法,将输入的加密文本串进展加密后输出。

typedefstruct

{charch[2];

[MaxStrSize];

intlength;

}SeqString;

voidEncoding(char*s,seqStringT)

{inti,j;

intm=T.length;

//字母表长

intn=strlen(S);

//求文本的长度

for(i=0;

i<

n;

i++)

{for(j=0;

j<

m;

j++)

if(S[i]==T.ch[0][j])

{printf("

%c"

T.ch[1][j]);

break;

if(j==m)

printf("

%cisnotinalphabet"

S[i]);

}

voidDeCoding(char*S,seqStringT)//串S是待解密的文本

for(i=0;

if(S[i]==T.ch[1][j])

T.ch[0][j]);

if(j==m)

printf("

【例8】假设S和T是用结点大小为1的单链表存储的两个串,试设计一个算法找出S中第一个不在T中出现的字符。

查找过程是这样的,取S中的一个字符(结点),然后和T中所有的字符一一比较,直到比完仍没有一样的字符时,查找过程完毕,否那么再取S中下一个字符,重新进展上述过程。

typedefstructnode

charSearchNo(LinkStrNode*S,LinkStrNode*T)//查找不在T中出现的字符

LinkStrNode*p,*q;

p=S;

q=T;

while(p)//取S中结点字符

{while(q&

p->

data!

=q->

data)//进展字符比较

q=q->

if(q==NULL)

returnp->

data;

//找到并返回字符值

q=T;

//指针恢复串T的开始结点

p=p->

}

printf("

there'

snosuchcharacter."

);

returnNULL;

5.3单元练习5解答

一.判断题答案

题目

1

2

3

4

5

6

7

8

9

10

答案

×

二.填空题答案

(1)字符串〔或串〕

(2)堆分配存储

(3)顺序串

(4)空间利用率低

(5)效率低

(6)空间利用率低

(7)\0

(8)空格的个数

(9)空格串

(10)字符都一样

(11)8

(12)Todayis30July,2005

(13)July

(14)<

0

(15)0

(16)形式

(17)有效位移

(18)6

(19)0

(20)(n-m+1)*m

三.选择题答案

B

C

A

D

11

12

13

14

15

16

17

18

19

20

四.程序题填空答案

〔1〕①MAXLEN

②r2->

len

③r1->

len+i

④'

\0'

⑤r1->

len+r2->

len

〔2〕①〕!

=或<

>

②&

③!

=

④tag=0

⑤i++

〔3〕①s->

②s->

len

③k

④ \0

⑤ i-1

五.编程题答案

〔1〕①分析:

从头至尾扫描r串,对于值为ch1的元素直接交换成ch2即可。

【程序代码】

str*trans(str*r,charch1,charch2)

{inti;

for(i=0;

r->

len;

if(r->

vec[i]==ch1)

r-vec[i]=ch2;

return(r);

}

2分析:

将第一个元素与最后一个元素交换,第二个元素与倒数第二个元素交换,依次类推,便将该串的所有字符反序了。

str*invert(str*r)

charx;

(r->

len%2);

{x=r->

vec[i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

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

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