第4章 节 串 数据结构课件.pptVIP

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

第4章 串 ;4.1 串的基本概念 ;下面给出一些串的例子。  a=speak English b=string c=speak d=ing e= f= 其中a、b、c、d的长度分别是13、6、5、3;c是a的子串;d是b的子串;e是空白串,长度是1;f是空串,长度是0。 ; 串与其他数据一样,也有两种串可供使用,一种是串常量,一种是串变量。串常量具有固定值,而串变量的值是可以改变的,同样,我们必须用标识符命名串变量。例如在C语言中字符串可以定义为 Char * 变量名; 或 Char 变量名[下标数]; ;4.2 串的存储结构 ; 这样,字符数组名给出了串在内存中的开始地址,串值末尾的结束标记\0标记了串在内存的结束位置。当自己定义串的顺序存储结构时,设置串的长度参数确定串的长度的方法更为常用。为了算法实现方便,或为了兼容两种串的长度表示方法,也可同时使用两种方法来表示串的长度。 ;4.2.2 串的堆存储 堆分配存储结构的特点是:仍以一组地址连续的存储单元存放串的字符序列,但其存储空间是在算法执行过程中动态分配得到的。在C语言中,存在一个称之为“堆”的自由存储区,并由C语言的动态分配函数malloc(?)和free(?)来管理。利用函数malloc(?)为每一个新产生的串分配一块实际需要的存储空间,若分配成功,则返回一个指针,指向串的起始地址。串的堆分配存储结构如下: ;typedef struct { char *ch; int length; } Hstring ; 其中,ch为指针变量,也是字符数组名,若ch为非空串,则按串长分配存储区,否则ch为NULL;length表示串的长度;Hstring是堆类型标识符。 由于堆分配存储结构的串既有顺序存储结构的特点,在操作中又没有串长的限制,显得很活,因此在串处理的应用程序中常被选用。 ;4.2.3 串的链表存储 由于各种串运算与串的存储方式有密切关系,因此若要随机存取串中第K个字符,顺序存储显得比较方便;若要对串进行插入、删除等操作,顺序存储就显得比较繁琐,而链表存储则显示出明显的优越性。 链表存储是把可利用的存储空间分成一系列大小相同的结点(若干连续的存储单元),每个结点含有两个域:data域和next域。data域用来存放字符;next域用来存放指向下一个结点(首地址)的指针。结点的大小是指data域中可以存放字符的个数,next域的大小则取决于寻址的范围。 ; 例如,设链表中每个结点只存放一个字符,则在C语言中可使用如下说明: struct list { struct list *next; /*指向下一个结点的指针*/ char data; /*在一个结点中存放1个字符*/ } *point; /*point为结构类型的指针,指向第一结点*/ ;图4.1 结点大小为1的链表存储结构 ;如果链表中每个结点可存放4个字符,则结点结构为: struct list { struct list *next; char data[4]; /*在一个结点中可存放4个字符*/ } *point; ;图4.2 结点大小为4的链表存储结构 ;4.2.4 串变量的存储映像 串变量的存储映像是建立了串名和串值之间对应关系的符号表。表中的项目可根据实际需要来设置,以能区分出串并能方便地存取串值为原则。 例如,有3个串: a=Speak; b=English; c=String; ;假定一个单元仅存放1个字符,其串值存储如图4.3所示。 ; 若符号表的每一行包含有串名和串值的始、尾地址,如表4.1(a)所示,则任意一个串的长度等于尾地址与始地址之差加1。当然也可以直接将串的长度值存放到符号表中,这时不必设立尾指针,如表4.1(b)所示,而串值的存储方式如图4.3所示。 对于链表存储串值的存储方式,若要建立串变量的符号表,则只要存入一个链表的表头指针就可以了。 ;表4.1 符号表示例 ;4.3 串 的 运 算 ; 2) 字符串的联接 strcat(string1,string2) 将源串string2的值联接到目标串string1的尾部,返回指向string1的指针。此时string1的值为两个字符串的联接值。例:string1为fgh,string2

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档