知识大全 数据结构考研分类复习真题 第四章 答案[12]
Posted 字符
篇首语:冲天香阵透长安,满城尽带黄金甲。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第四章 答案[12]相关的知识,希望对你有一定的参考价值。
五 算法设计
[题目分析]判断字符串t是否是字符串s的子串 称为串的模式匹配 其基本思想是对串s和t各设一个指针i和j i的值域是 m n j的值域是 n 初始值i和j均为 模式匹配从s 和t 开始 若s =t 则i和j指针增加 若在某个位置si!=tj 则主串指针i回溯到i=i j+ j仍从 开始 进行下一轮的比较 直到匹配成功(j>n ) 返回子串在主串的位置(i j) 否则 当i>m n则为匹配失败
int index(char s[] t[] int m n)//字符串s和t用一维数组存储 其长度分别为m和n 本算法求字符串t在字符串s中的第一次出现 如是 输出子串在s中的位置 否则输出 int i= j= ; while (i<=m n && j<=n ) if (s[i]==t[j])i++;j++;//对应字符相等 指针后移 else i=i j+ ;j= ;//对应字符不相等 I回溯 j仍为 if(i<=m n && j==n) printf( t在s串中位置是%d i n+ );return(i n+ );//匹配成功 else return( ); //匹配失败 //算法index结束 main ()//主函数 char s[] t[]; int m n i; scanf( %d%d &m &n);//输入两字符串的长度 scanf( %s s);//输入主串 scanf( %s t);//输入子串 i=index(s t m n); //程序结束
[程序讨论]因用C语言实现 一维数组的下标从 开始 m 是主串最后一个字符的下标 n 是t串的最后一个字符的下标 若匹配成功 最佳情况是s串的第 到第n 个字符与t匹配 时间复杂度为o(n);匹配成功的最差情况是 每次均在t的最后一个字符才失败 直到s串的第m n个字符成功 其时间复杂度为o((m n)*n) 即o(m*n) 失败的情况是s串的第m n个字符比t串某字符比较失败 时间复杂度为o(m*n) 之所以串s的指针i最大到m n 是因为在m n之后 所剩子串长度已经小于子串长度n 故不必再去比较 算法中未讨论输入错误(如s串长小于t串长)
另外 根据子串的定义 返回值i n+ 是子串在主串中的位置 子串在主串中的下标是i n
cha138/Article/program/sjjg/201311/22611相关参考
.()initstack(s) //栈s初始化为空栈 ()setnull(exp) //串exp初始化为空串 ()chinopset&n
.() ()next[k] .()i=i+ ()j:=j+ ()i:=ij+ ()j:=; ()imt(或i:=ij+) () 程序
.()p的nextval函数值为(p的next函数值为) ()利用KMP(改进的nextval)算法每趟匹配过程如下 第一趟匹配abcaabbabcabaacbacba abcab(i=j=
.任意个连续的字符组成的子序列 . O(m+n) . . .()模式匹配 ()模式串 .()其数据元素都是字符()顺序存储()和链式存储()串的长度相等且两串中对
.()S的next与nextval值分别为和p的next与nextval值分别为和 ()利用BF算法的匹配过程
[题目分析]实现字符串的逆置并不难但本题要求不另设串存储空间来实现字符串逆序存储即第一个输入的字符最后存储最后输入的字符先存储使用递归可容易做到 voidInvertStore(charA[])
6.模式串的next函数定义如下 next[j]= 根据此定义可求解模式串t的next和nextval值如下 .解法同上题其next和nextval值分别为和 .解法同题t串的next和n
[题目分析]本题是对字符串表达式的处理问题首先定义种数据结构符号的类码符号的TOKEN表示变量名表NAMEL和常量表CONSL这四种数据结构均定义成结构体形式数据部分用一维数组存储同时用指针指出数
[题目分析]本题属于查找待查找元素是字符串(长)将查找元素存放在一维数组中二分检索(即折半查找或对分查找)是首先用一维数组的中间元素与被检索元素比较若相等则检索成功否则根据被检索元素大于或小于中间
[题目分析]两个串的相等其定义为两个串的值相等即串长相等且对应字符相等是两个串相等的充分必要条件因此首先比较串长在串长相等的前提下再比较对应字符是否相等 intequal(strtpsstrtp