数据结构C语言版第四章串.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构C语言版第四章串.doc

第四章 串 重点难点 理解串类型定义中各基本操作的特点,并能正确利用它们进行串的其它操作;掌握串类型的各种存储表示方法; 理解串的两种匹配算法。 典型例题 1、简述下列每对术语的区别:   空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串; 【解】  (1)空串是指不包含任何字符的串,它的长度为零。   空白串是指包含一个或多个空格的串,空格也是字符。 (2)串常量是指在程序中只可引用但不可改变其值的串。   串变量是可以在运行中改变其值的。 (3)主串和子串是相对的,一个串中任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。 (4)静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。 动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。 2、以HString为存储表示,写一个求子串的算法。 【解】  HString 是指以动态分配顺序串为存储表示,其定义为:    typedef struct {     char *ch;     int length;    }HString;   void *substr( HString *sub,HString *s,int pos,int len)    {//用sub返回串s的第pos个字符起长度为len的子串。sub初始时为一空串     //pos的合法位置为0=pos=s-length-1     int i;     if (pos0||poss-length-1||len=0)      Error(parameter error!);//参数不合法,子串为空串     if (s-lengthpos+len)//s串中没有足够的元素      sub-len=s-length-pos;//设置子串的串长     else sub-length=len; //设置子串的串长     sub-ch=(char *)malloc(len*sizeof(char));//为sub-ch申请结点空间     for(i=0;isub-length;i++)//将s串中pos位置开始的共sub-length个字符复制到sub串中      sub-ch[i]=s-ch[pos+i];    } 3、若S和T是用结点大小为1的单链表存储的两个串,试设计一个算法找出S中第一个不在T中出现的字符。 【解】   查找过程是这样的,取S中的一个字符(结点),然后和T中所有的字符一一比较,直到比完仍没有相同的字符时,查找过程结束,否则再取S中下一个字符,重新进行上述过程。算法如下:   链串的结构类型定义:  typedef struct node{    char data;    struct node *next;   }LinkStrNode; //结点类型  typedef LinkStrNode *LinkString; //LinkString为链串类型  LinkString S; //S是链串的头指针  char SearchNoin( LinkString S, LinkString T)   {//查找不在T中出现的字符    LinkStrNode *p,*q;    p=S;    q=T;    while (p)     { //取S中结点字符       while(qp-data!=q-data)//进行字符比较         q=q-next;       if(q==NULL) return p-data;//找到并返回字符值       q=T; //指针恢复串T的开始结点       p=p-next;     }    printf(theres no such character.);    return NULL;} 习题精选 一、.单项选择题 1.串是一种特殊的线性表,其特殊性体现在( )。 A.可以顺序存储 B.数据元素是一个字符 C.可以链式存储 D.数据元素可以是多个字符若 2.串下面关于串的的叙述中,( )是不正确的? A.串是字符的有限序列 B.空串是由空格构成的串 C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存 3. 串的长度是指( )。 A.串中所含不同字母的个数 B.串中所含字符的个数 C.串中所含不同字符的个数 D.串中所含非空格字符的个数 4. 设串s1=’ABCD

文档评论(0)

docindoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档