数据结构与算法(C语言版)串讲.ppt
《数据结构与算法(C语言版)串讲.ppt》由会员分享,可在线阅读,更多相关《数据结构与算法(C语言版)串讲.ppt(41页珍藏版)》请在三一办公上搜索。
1、数据结构与算法(C+语言版),第4章 串,现实世界中的实体有多种形式,如数值、文字符号序列、图形、图像、声音等,其中文字(符号)序列称为字符串,简称串。串是一种常用的数据结构,用于描述非数值的简单信息,它在现实世界中屡见不鲜,如人名、产品名、事物名称、车牌号、文献、源程序等。从数据元素间的逻辑关系看,串是线性表,但从操作方式与种类看,它与线性表有许多不同。在计算机中,串被认为是一种特殊的线性表元素为文字符号的线性表。由于现实问题中经常使用串,所以对串应选择合适的存储结构,并提供灵活多样的基本操作。,串的逻辑结构,基本概念串(string)是由零个或多个字符构成的有限序列,一般记为s=s1s2s
2、n(n0)。其中,s是串名,用单引号括起来的字符序列是串的值,但单引号本身并不属于串,si(1in)为一个字符,字符是计算机可识别的任意符号(字母、数字或其他符号)。串的长度:串中字符的数目n。空串:零个字符的串,其长度为零。空白串:由一个或多个空格组成的串,其长度为串中空格字符的个数。子串:串中任意个连续的字符组成的子序列。主串:包含子串的串相应地称为主串。,串的逻辑结构,字符在串中的位置:字符在序列中的序号。串相等:当且仅当这两个串的值相等,即两个串的长度相等,并且各个对应位置的字符都相等。通常,在程序中使用的串可分为两类:串变量和串常量。串变量和其他类型的变量一样,其取值是可改变的。串常
3、量和常数一样,在程序中只能被引用但不能改变其值,即只能读不能写。,例4-1,假设a、b、c、d为如下的4个串:a=Guang,b=Zhou,c=GuangZhou,d=Guang Zhou。它们的长度分别为5、4、9、10;并且a和b都是c和d的子串,a在c和d中的位置都是1,而b在c中的位置是6,在d中的位置是7;a、b、c、d彼此都不相等。显然,若某串的长度为n,则在该串中,长度为1的子串的个数为n,长度为2的子串的个数为n1,长度为i的子串的个数为n(i1),所以长度为n的串中子串总数(包括空串与自身)为1+=1+。串的抽象数据类型定义见以下ADT。,例4-1,例4-1,例4-1,串的逻
4、辑结构,串的大小比较字符的大小在计算机中,每个字符都有一个唯一的数值表示字符编码(字符内码),字符间的大小关系就定义为它们的代码之间的大小关系。字符编码可有多种,对英文字母和符号,ASCII码是最常见的一种。本书用字符的ASCII码之间的大小关系代表相应字符的大小关系。ASCII码即美国信息交换标准编码,是长度为8位二进制符号,所以最多能编28=256个不同的字符。但ASCII码中规定,最高位为1的码代表一些特殊的字符(或命令),所以ASCII码有效的字符编码为128个,其包括英文大、小写字母,数字09及一些常用符号(计算机键盘上的字符键)。在字符和数字中,空格编码最小,其次是数字(按09的次
5、序)、大写字母(按AZ的次序)、小写字母(按az的次序)等。,串的逻辑结构,对于汉字,它们的大小关系也按编码大小确定。汉字的编码也有几种,如我国内地用的国标码(GB2312),我国台湾地区用的Big5等。GB2312(国标码)是针对汉字的16位二进制编码,所以最多能编216=65536个不同的码,足以代表新华字典中所有的汉字。GB2312将汉字分为两级编码,分别称一级字库和二级字库。一级字库包括了日常用的大多数汉字,其汉字的国标码之间的大小关系,与对应的汉语拼音构成的串的大小关系一致(在新华字典中,排在较前面的字,它的国标码也较小)。而二级字库中的汉字码之间的大小关系,与对应汉字的笔画数目的大
6、小关系一致。要在一个系统中混合使用多种文字,需要一种统一的编码系统,它可以将各种文字的基本字符在同一空间内编码,UniCode就是这样一种编码。,串的逻辑结构,字符串间的大小关系有了字符大小的定义,就可考虑串的大小关系了。设X与Y是两个串,X=x1 x2xm,Y=y1y2yn,则它们之间的大小关系定义如下。当m=n且x1=y1,xm=yn时,称X=Y。当下列条件之一成立时,称XY:imn,且xi=yi,i=1,2,m;ii存在某一个kMIN(m,n),使得xi=yi,i=1,2,k1,xkyk。当不属于情况与时,称XY。这种方法定义的串的大小关系,也称字典序。下面给出几个例子说明此定义:aba
7、c与abac,相等(=);we与web,前者小于后者(属于情况i);mouth与move,前者小于后者(属于情况ii),串的存储结构,与线性表类似,串也有两种基本的存储结构:顺序结构与链式结构。考虑到存储效率与算法实现的方便性,串多采用顺序存储结构。顺序存储串的顺序存储结构简称为顺序串。与顺序表类似,顺序串用一组地址连续的存储单元来存储串中的字符序列,可用高级程序语言中字符数组来实现。按存储分配的不同可将顺序串分为静态存储分配的顺序串和动态存储分配的顺序串。,串的存储结构,链式存储用单链表方式存储串的值,这种存储结构简称为链串,链串分为两种形式。非压缩形式。一个链表结点只存储一个字符。为了操作
8、方便,设置一个指向首元素结点的指针和一个指向尾元素结点的指针,同时仍设置串长度值字段。这种结构类似于线性表的链式存储,其优点是操作方便,但存储利用率很低。压缩形式。一个链结点存储多个字符,实质上是一种连续存储与链式相结合的结构。这种结构能提高存储利用率,但其对应的操作实现起来较为复杂。例如,在对串长度进行修改时,常涉及链结点的增加与删除操作,如果仅允许不满的结点出现在最后一个结点上,则需要经常移动字符,但如果允许不满结点出现在其他位置,则又会造成串的表示不一致的问题,也会使操作实现复杂化。,串函数与串的类定义,常用的C+串函数C+的串库(string.h)中提供了许多字符串的操作函数,几个常用
9、的C+字符串函数及其使用方法如下。假设已有以下定义语句:,串函数与串的类定义,(1)串拷贝函数char*strcpy(char*s1,const char*s2),将字符串s2复制到字符串数组s1中,返回s1的值。char*strncpy(char*s1,const char*s2,size_tn)将字符串s2中最多n个字符复制到字符串数组s1中,返回s1的值。例如:,串函数与串的类定义,(2)串连接函数char*strcat(char*s1,const char*s2),将字符串s2添加到字符串s1的后面,s2的第一个字符重定义s1的null终止符,返回s1的值。char*strncat(c
10、har*s1,const char*s2,size_tn)将字符串s2中最多n个字符添加到字符串s1的后面,s2的第一个字符重定义s1的null终止符,返回s1的值。例如:,串函数与串的类定义,(3)串比较函数int strcmp(const char*s1,const char*s2),比较字符串s1和字符串s2。函数在s1等于、小于或大于s2时,分别返回0、小于0或者大于0的值。int strncmp(const char*s1,const char*s2,size_tn)比较字符串s1中的n个字符和字符串s2。函数在s1等于、小于或大于s2时,分别返回0、小于0或者大于0的值。例如:,串
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 语言版 串讲
链接地址:https://www.31ppt.com/p-5986022.html