版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章串在计算机的各方面应用中,非数值处理问题的应用越来越多。在早期的程序设计语言中,串仅作为输入和输出的常量出现。随着计算机应用的扩展,需要在程序中进行对串的操作,如在事务处理系统中,用户的姓名和地址及货物的名称、规格等也是字符串数据字符串一般简称为串,可以将它看作是一种特殊的线性表,这种线性表的数据元素的类型总是字符型的,字符串的数据对象约束为字符集。在一般线性表的基本操作中,大多以“单个元素”作为操作对象,而在串中,则是以“串的整体”或一部分作为操作对象。因此,一般线性表和串的操作有很大的不同。本章主要讨论串的基本概念、存储结构和一些基本的串处理操作【知识点】串的类型定义、串的存储表示、串匹配4.1串的基本概念42串的存储结构4.3串的基本运算及其实现44模式匹配4.5串的应用46小结47练习41串的基本概念串的定义串(string,或称字符串)是n个字符的有限序列。通常记作s=‘a1a2a3,…an(n≥0)其中,S是串的名字;用单引号括起来的字符序列是串的值;a(1s≤n)可以是字母、数字或其它字符;单弓号为串值的定界符,不是串的一部分,它的作用是为了避免与变量名或数值常量混淆;串中字符的数目n称为串的长度。含零个字符的串称为空串(nullstring),它的长度为零,通常以两个相邻的引号来表示空串。如:s它的长度为零在各种应用中,空格通常是串的字符集合中的一个元素可以出现在其他字符之间。如:s=“是仅由空格组成的的串称为空格串。若串中含有空格,在计算串长时,空格应计入串的长度中,如:s=Iamastudent'的长度为主串和子串个串的任意个连续的字符组成的子序列称为该串的子串,包含该子串的串称为主串。称一个字符在串序列中的序号为该字符在串中的位置,子串在主串中的位置是以子串的第一个字符在主串中的位置来表示的。当一个字符在串中多次出现时,以该字符第一次在主串中出现的位置为该字符在串中的位置。两个字符串的长度相等且各对应位置上的字符都相同,则两串相等例如:s1、s2、s3为如下的三个串:s1=Iamastudent’;s2=student’;s3=“teacher则它们的长度分别为14、7、7;串s2是s1的子串,子串s2在s1中的位置为8,也可以说s1是s2的主串;串s3不是s1的子串,串s2和s3不相等。42串的存储结构对串的存储方式取决于我们对串所进行的运算,如果在程序设计语言中,串的运算只是作为输入或输出的常量出现,则此时只需存储该串的字符序列,这就是串值的存储。此外,一个字符序列还可赋给一个串变量,操作运算时通过串变量名访问串值。对于串的存储可以有两种处理方式:一是可以将串定义为字符型数组,数组名就是串名,串的存储空间分配在编译时完成,程序运行时不能更改。这种方式为串的静态存储结构。另一种是定义字符指针变量,存储串值的首地址,通过字符指针变量名访问串值,串的存储空间分配是在程序运行时动态分配的,这种方式称为串的动态存储结构。静态存储采用顺序存储结构,动态存储采用的是链式存储和堆存储结构。串的静态存储结构(加存储结构)类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列。由于一个字符只占1个字节,而现在大多数计算机的存储器地址是采用的字编址,个字(即一个存储单元)占多个字节,因此顺序存储结构方式有两种(1)紧缩格式:即一个字节存储一个字符。这种存储方式可以在一个存储单元中存放多个字符,充分地利用存储空间。但在串的操作运算时,若要分离某一部分字符时,则变得非常麻烦。右图所示是以4个字节为L个存储单元的存储结构,每个存储单元可以存放4个字符。对于给定的串s=LoveChina'。串s的串值的长度共10,只需3个存储单元。(2)非紧缩格式:这种方式是以一个存储单元为单位,每个存储单元仅存放一个字符。这种存储方式的空间利用率较低,如一个存储单元有4个字节,则空间利用率仅为25%。但这种存储方式中不需要分离字符,因而程序处理字符的速度高。下图即为这种结构的示意图。由上述讨论可知,串的顺序存储结构有两大不足之处:一是需事先预定义串的最大长度,这在程序运行前是很难估计的。二是由于定义了串的最大长度,使得串的某些操作受限,如串的联接运算等二、串的动态存储结构我们知道,串的各种运算与串的存储结构有着很大的关系,在随机取子串时,顺序存储方式操作起来比较方便,而对串进行插入、删除等操作时,就会变得很复杂。因此,有必要采用串的动态存储方式。动态存储与顺序存储的区别是动态存储的存储空间是在程序执行过程中动态分配的。串的动态存储方式采用链式存储结构和堆存储结构两种形式(1)链式存储结构串的链式存储结构中每个结点包含字符域和结点链接指针域,字符域用于存放字符,指针域用于存放指向下一个结点的指针,因此,串可用单链表表示用单链表存放串,每个结点仅存储一个字符,如下图(a)所示,因此,每个结点的指针域所占空间比字符域所占间要大得多。为了提高空间的利用率,我们可以使每个结点存放多个字符,称为块链结构,如下图(b)所示每个结点存放4个字符。例:S=Iamastudent’(#不属于串的字符集)一[口“-[[:A其结构用C语言定义如下#definenodisize4typedefstructttypedefstructnode(slstrtype*head;/|的头指针charstrlnodisize]Intlength;∥串的当前长度structnode*nex)Istring;slstrtype:(2)堆式存储结构串的堆式存储结构仍以一组地址连续的存储单元存放串值字符序列。其实现方法是:系统将一个空间足够大、地址连续的存储单元作为串值的可利用空间,每当产生一个新串时,系统就从可利用空间的起始处为串值分配一个长度和串值长度相等的存储空间。即存储空间在程序执行时动态分配。其结构用C语言定义如下typedefstructihar=ch;∥若是非空串,则按串长分配存储区,否则ch为nullintlength;∥串长度Tostring由于堆分配存储结构的串既有顺序存储结构的特点,处理方便,操作中对串长又没有任何限制,更显灵活,因此在串处理的应用程序中常被选用。例:串插入算法ypedefstructichar*ch;∥若是非空串,则按串长分配存储区,否则ch为nullintlength;∥串长度JHstringStatusStrInsert(Hstring&s,intpos,HstringT)if(pos<allos>slength+l)returnerror;/pos的值不合法if(Tlength)T非空,则进行下列操作lif(!(sch=(char)realloc(sch,(slength+Tlength)*sizeof(char))/重新分配空间exit(overflow)for(i=Slength-l;i>=pos-1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新版冀人版2024一年级上册全册教学设计(省级一等奖)合集
- 初中体育与健康八年级游泳单元教学设计
- 重冶竖炉工操作模拟考核试卷含答案
- 初中八年级地理《中国工业的分布》第一课时教学设计
- 沼气工班组建设知识考核试卷含答案
- 足部按摩师安全管理竞赛考核试卷含答案
- 高中体育高一教学设计影响运动技能学习与发挥的因素解析
- 初中七年级信息技术教学设计:图片合成技能训练与创意表达实践
- 高一数学简单幂函数的图象和性质教学设计
- 油脂及脂肪酸加氢操作工安全防护强化考核试卷含答案
- 中国精神:兴国强国之魂
- 近年文言文《岳阳楼记》中考真题30套
- 2025年统计学期末考试题库:统计学在法律学中的应用综合案例分析试题集
- 人教版九年级上册数学第一次月考试卷含答案
- 山东滨州历年中考语文现代文之议论文阅读6篇(含答案)(2003-2023)
- 2023近现代保护建筑结构维护与加固技术规程
- 海岸动力学1-2ppt课件
- 光遗传学概述
- 【国家标准】JJF 1763-2019 低本底α、β测量仪型式评价大纲
评论
0/150
提交评论