串(String).pptVIP

  • 7
  • 0
  • 约3.22千字
  • 约 22页
  • 2018-04-26 发布于江苏
  • 举报
串(String)

第四章 串(String) 本章概要 本章介绍符号数据——字符串的基本概念、存储结构以及基本运算和实现。通过学习掌握: *字符串的定义及特点; *字符串上各种运算; *字符串的顺序存储、链式存储以及各种运算在存储结构上的实现; *串的模式匹配; 4.1、有关字符串的基本概念 字符集(符号集):是一个系统中允许使用的所有符号的集合。 字符串: 是由字符集上的符号组成的有限序列。如S=‘aabc ‘,S为字符串名字,’ aabc’为字符串的值。两个单引号不是字符串的值,它们只是两个标识符。 字符串的长度 :是两个单引号中字符的个数。 空字符串: 是不包含任何字符的串。表示为X=‘’。其 长度为0,常用Φ表示。 空格字符串: 是有空格符组成的字符串 。例如,Y = ‘ ‘ 是只含有一个空格符的串 。其长度为1。 子字符串 : 是字符串中任意个连续的字符组成的子序列称为该串的子串。例如‘aa’,’abc’,’aab’都是S的子串. 4.2 串的表示和实现 1、串的定长顺序存储: 即字符数组,如char string[1000]; 2、动态分配数组存储表示: 即动态分配的连续空间,malloc和free; 3、块链存储表示:即链表; 1、串的定长顺序存储 是用一组地址连续的存储单元存储字符串的字符序列。其实现的方法是按照用户予定义的大小,系统为每个串的变量分配一个固定长度的存储区。 一般用定长数组描述: # define MAXSTRLEN 255 Typedef char Sstring[MAXSTRLEN+1] (规定:0号单元存放串的长度)。 注:C语言中字符串是以‘\0’为结束。 字符串上的运算 字符串的定义; 字符串的赋值; 字符串的联接MyConcat(T,S1,S2); 求子串MySubString(String,Sub,pos,len); 两个串比较MyStringCompare(s,t) 2.堆分配存储表示 在应用程序中,参与运算的串变量之间的长度相差较大,并且操作中串值的长度变化也较大。因此为串变量预分配固定大小的空间不尽合理。 堆存储结构的基本思想是:在内存中开辟能存储足够多的串、地址连续的存储空间作为应用程序中所有串的可利用存储空间,称为堆空间,如设store[SMAX+1]; 根据每个串的长度,动态的为每个串在堆空间里申请相应大小的存储区域,这个串顺序存储在所申请的存储区域中,当操作过程中若原空间不够了,可以根据串的实际长度重新申请,拷贝原串值后再释放原空间。 基于堆的串结构 typedef struct { char *ch; /*起始地址*/ int length; /*串长*/ } Hstring; 基于堆的串操作实现 串赋值; 串复制 串连接 求子串 串比较 4.2.3 串的链式存储结构 串的链式存储结构有时称为链串。 链串的存储形式与一般的链表类似,是将存储区分成许多结点,每个结点有一个存放字符的域和一个存放指向下一个结点的指针域。 链串中的一个存储结点可以存储1个或多个字符,通常将链串中每个存储结点所存储的字符个数称为结点大小 单字符结点的串的链式存储结构 多字符结点的串的链式存储结构 链串的类型定义 #define CHUNKSIZE 80 //定义的结点大小 typedef struct Chunk { char ch[CHUNKSIZE];; struct node *Chunk; }Chunk; 当结点大小为1时,可将ch域简单定义为: char ch; 链串的结构定义 Typedef struct { Chunk *head, *tail; int curlen; }LString; 串的存储密度 存储密度为:实际所占位数 / 分配空间位数 对比优缺点: 密度小: 密度大: 4.3 串的模式匹配算法 串的模式匹配,就是判断某串T(模式串)是否是另一个已知串S的子串,如是其子串,则给出该子串的起始点(即从已知串的哪个字符开始),故此运算又称为子串定位运算。 设已知串S和T,要求判断T是否是S的子串,如果是其子串则给出起始点。显然T是S的子串的一个必要条件是,T的长度LT一定要小于或等于S的长度LS,即LT≤LS。 1.简单的模式匹配算法 算法思想如下: 首先将s[1]与t[1]进行比较,若不同,就将s[2]与t[1]进行比较,...,直到s的某一个字符s[i]和t[1]相同,再将它们之后的字符进行比较,若也相同,则如此继续往下比较,当s的某一个字符s[i]与t的字

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档