《 数据结构》课程 中国科学技术大学网络学院 数据结构 第四章字符串. 本章内容 4.1 串的基本概念 4.2 串的存储结构 4.3 串的基本运算的实现 习题 4.

Slides:



Advertisements
Similar presentations
首 页 首 页 上一页 下一页 本讲内容 投影法概述三视图形成及其投影规律平面立体三视图、尺寸标注 本讲内容 复习: P25~P31 、 P84~P85 作业: P7, P8, P14[2-32(2) A3 (1:1)]
Advertisements

第十二章 常微分方程 返回. 一、主要内容 基本概念 一阶方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程.
概率统计( ZYH ) 节目录 3.1 二维随机变量的概率分布 3.2 边缘分布 3.4 随机变量的独立性 第三章 随机向量及其分布 3.3 条件分布.
基本知识和几何要素的投影 模块一: 字体练习 第一章 制图的基本知识与基本技能 题目提示返回.
第 12 章位运算 C 语言兼具高级语言及低级语言的特性,因此 适合编写系统软件。 C 语言具备低级语言的特性 就在于它能直接对硬件进行操作,即位运算。 所谓位运算是指,按二进制位进行的运算。 例如,将一个存储单元中各二进位左移或右移一 位等。
位置相关查询处理 研究背景及意义 移动计算、无线通信以及定位技术的快速发展,使 得位置相关的查询处理及基于位置的信息服务技术 已经成为一个热点研究领域 。 大量的应用领域 ( 如地理信息系统、智能导航、交 通管制、天气预报、军事、移动电子商务等 ) 均迫 切需要有效地查询这些数据对象。
细分曲面 傅孝明 SA 目录 细分曲面的基本思想 两个关键问题 一些基本概念 几种简单的细分曲面算法 细分曲面方法分类.
一、拟合优度检验 二、变量的显著性检验 三、参数的置信区间
4 第四章 矩阵 学时:  18 学时。 教学手段:  讲授和讨论相结合,学生课堂练习,演练习题与辅导答疑相结合。 基本内容和教学目的:  基本内容: 矩阵的运算,可逆矩阵,初等矩阵及其性质和意义, 分块矩阵。  教学目的:  1 .使学生理解和掌握矩阵等价的相关理论  2 .能熟练地进行矩阵的各种运算.
编译程序 构造原理和实现技术 授课教师:吕江花. 第一章 编译程序概述 主要内容: 几个基本概念 编译器的工作过程概述 编译器各个阶段的功能描述 编译程序的实现途径.
主要内容  LR(0) 分析. 0 S→  E # E→  E+T E→  T T→  id T→  ( E ) 1 S→E  # E→E  +T 5 T→id  3 E→E+  T T→  id T→  (E) 4 E→E+T  9 E→T  6 T→(  E) E→
嵌入式操作系统 陈香兰 Fall 系统调用 10/27/09 嵌入式 OS 3/12 系统调用的意义  操作系统为用户态进程与硬件设备进行交互提供 了一组接口 —— 系统调用  把用户从底层的硬件编程中解放出来  极大的提高了系统的安全性  使用户程序具有可移植性.
第 4 章 抽象解释 内容概述 以一种独立于编程语言的方式,介绍抽象解释的 一些本质概念 – 将 “ 程序分析对语言语义是正确的 ” 这个概念公式 化 – 用 “ 加宽和收缩技术 ” 来获得最小不动点的较好的 近似,并使所需计算步数得到限制 – 用 “ 伽罗瓦连接和伽罗瓦插入 ” 来把代价较大的属 性空间用代价较小的属性空间来代替.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第六十二讲 ) 离散数学. 最后,我们构造能识别 A 的 Kleene 闭包 A* 的自动机 M A* =(S A* , I , f A* , s A* , F A* ) , 令 S A* 包括所有的 S A 的状态以及一个 附加的状态 s.
1 为了更好的揭示随机现象的规律性并 利用数学工具描述其规律, 有必要引入随 机变量来描述随机试验的不同结果 例 电话总机某段时间内接到的电话次数, 可用一个变量 X 来描述 例 检测一件产品可能出现的两个结果, 也可以用一个变量来描述 第五章 随机变量及其分布函数.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样 的一种手段。在实际中,数据不可避免的会有误差,插值函 数会将这些误差也包括在内。
例9:例9: 第 n-1 行( -1 )倍加到第 n 行上,第( n-2 ) 行( -1 )倍加到第 n-1 行上,以此类推, 直到第 1 行( -1 )倍加到第 2 行上。
第 10 章 数据表的基本操作 计算机文化基础. 第一节 表结构显示与修改 1 、显示表的结构 格式: LIST/DISPLAY STRUCTURE [TO PRINT] 功能:显示(打印)当前已打开的数据库文件结构 说明:首先必须打开库文件。 LIST 是连续显示全部内容; DISPLAY 是分屏显示.
主讲教师:陈殿友 总课时: 124 第八讲 函数的极限. 第一章 机动 目录 上页 下页 返回 结束 § 3 函数的极限 在上一节我们学习数列的极限,数列 {x n } 可看作自变量 为 n 的函数: x n =f(n),n ∈ N +, 所以,数列 {x n } 的极限为 a, 就是 当自变量 n.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第三十八讲 ) 离散数学. 第八章 格与布尔代数 §8.1 引 言 在第一章中我们介绍了关于集 合的理论。如果将 ρ ( S )看做 是集合 S 的所有子集组成的集合, 于是, ρ ( S )中两个集合的并 集 A ∪ B ,两个集合的交集.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第四十八讲 ) 离散数学. 例 设 S 是一个非空集合, ρ ( s )是 S 的幂集合。 不难证明 :(ρ(S),∩, ∪,ˉ, ,S) 是一个布尔代数。 其中: A∩B 表示 A , B 的交集; A ∪ B 表示 A ,
第十一章 曲线回归 第一节 曲线的类型与特点 第二节 曲线方程的配置 第三节 多项式回归.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第二十五讲 ) 离散数学. 定理 群定义中的条件 ( 1 )和( 2 )可以减弱如下: ( 1 ) ’ G 中有一个元素左壹适合 1 · a=a; ( 2 ) ’ 对于任意 a ,有一个元素左逆 a -1 适 合 a -1 ·
第二章 随机变量及其分布 第一节 随机变量及其分布函数 一、随机变量 用数量来表示试验的基本事件 定义 1 设试验 的基本空间为 , ,如果对试验 的每一个基 本事件 ,规定一个实数记作 与之对应,这样就得到一个定义在基本空 间 上的一个单值实函数 ,称变量 为随机变量. 随机变量常用字母 、 、 等表示.或用.
第 4 章 过程与变量的作用范围. 4.1 Visual Basic 的代码模块 Visual Basic 的应用程序是由过程组成的, 过程代码存放在模块中。 Visual Basic 提供了 三类模块,它们是窗体模块、标准模块和类 模块。 窗体模块 窗体模块是大多数 Visual Basic.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。 在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第三十九讲 ) 离散数学. 例 设 S 是一个集合, ρ ( S )是 S 的幂集合,集合 的交( ∩ ),并(∪)是 ρ ( S )上的两个代数运算, 于是,( ρ ( S ), ∩ ,∪) 是一个格。而由例 知.
实验三: 用双线性变换法设计 IIR 数字滤波器 一、实验目的 1 熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法。 2 掌握数字滤波器的计算机仿真方法。 3 通过观察对实际心电图信号的滤波作用, 获得数字滤波的感性知 识。
OS 进程调度模拟演示 制作人: 钱晶 高上上. OS 进程调度模拟-实验原理 静态优先级原理 在这种方式下,系统一旦把处理机分配给就绪队 列中的优先权最高的进程后,该进程便一直执行下去, 直至完成。或因为发生某事件使该进程放弃处理机,系 统方可再将处理机分配给另一优先级最高的进程。这些 事件包括有优先级更高的进程进入,或是因为某些原因.
信息利用与学术论文写作 Library of Jiangsu University, Zhenjiang Sha Zhenjiang
第二章 贝叶斯决策理论 3学时.
流态化 概述 一、固体流态化:颗粒物料与流动的流体接触,使颗粒物料呈类 似于流体的状态。 二、流态化技术的应用:流化催化裂化、吸附、干燥、冷凝等。 三、流态化技术的优点:连续化操作;温度均匀,易调节和维持; 气、固间传质、传热速率高等。 四、本章基本内容: 1. 流态化基本概念 2. 流体力学特性 3.
量子化学 第四章 角动量与自旋 (Angular momentum and spin) 4.1 动量算符 4.2 角动量阶梯算符方法
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 5 章 解线性方程组的直接法 实际中,存在大量的解线性方程组的问题。很多数值方 法到最后也会涉及到线性方程组的求解问题:如样条插值的 M 和.
主讲教师:陈殿友 总课时: 124 第十一讲 极限的运算法则. 第一章 二、 极限的四则运算法则 三、 复合函数的极限运算法则 一 、无穷小运算法则 机动 目录 上页 下页 返回 结束 §5 极限运算法则.
在发明中学习 线性代数 概念的引入 李尚志 中国科学技术大学. 随风潜入夜 : 知识的引入 之一、线性方程组的解法 加减消去法  方程的线性组合  原方程组的解是新方程的解 是否有 “ 增根 ” ?  互为线性组合 : 等价变形  初等变换  高斯消去法.
东南大学计算中心 网站应用与实践 主讲人 吴俊. 2 东南大学计算中心 网站制作流程  确定主题、风格  规划栏目、收集素材  版面设计、配色  编辑页面  测试发布 FrontPage 要完成的任务.
Photoshop CS4 标准培训教程 第三章第三章 在 Photoshop CS4 中所谓的不规则选区指的是随意性强,不被局限在几何形状内, 他们可以是鼠标任意创建的也可以是通过计算而得到的单个选区或多个选区。在 Photoshop 中可以用来创建不规则选区的工具被分组放置到套索工具组、魔棒工具组.
第一节 相图基本知识 1 三元相图的主要特点 (1)是立体图形,主要由曲面构成; (2)可发生四相平衡转变; (3)一、二、三相区为一空间。
第五节 学习要点 对句子的分析,向来是从句型、句类、句式的角度进行的。 以这三个角度为切入点,我们可以建立句型系统、句类系统和句 式系统。 ★句型系统 —— 按照句子的结构模式划分出来的类型系统。
量子力学教程 ( 第二版 ) 3.4 连 续 谱 本 征 函 数 的 归 一 化 连续谱本征函数是不能归一化的 一维粒子的动量本征值为的本征函数 ( 平面波 ) 为 可以取 中连续变化的一切实数值. 不难看出,只要则 在量子力学中, 坐标和动量的取值是连续变化 的 ; 角动量的取值是离散的.
第 3 章 控制流分析 内容概述 – 定义一个函数式编程语言,变量可以指称函数 – 以 dynamic dispatch problem 为例(作为参数的 函数被调用时,究竟执行的是哪个函数) – 规范该控制流分析问题,定义什么是可接受的控 制流分析 – 定义可接受分析在语义模型上的可靠性 – 讨论分析算法.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第五十三讲 ) 离散数学. 定义 设 G= ( V , T , S , P ) 是一个语法结构,由 G 产生的语言 (或者说 G 的语言)是由初始状态 S 演绎出来的所有终止符的集合, 记为 L ( G ) ={w  T *
Relevance Theory Lecture 12. Relevance Theory 交际研究的对象是交际的概念、内容、 性质、功能、方法和交际行为、交际参 加者之间的关系等的认识和阐述。 20 世 纪 70 年代末以来, Sperber & Wilson 把认 知与交际结合起来,于 1986.
编译原理总结. 基本概念  编译器 、解释器  编译过程 、各过程的功能  编译器在程序执行过程中的作用  编译器的实现途径.
周期信号的傅里叶变换. 典型非周期信号 ( 如指数信号, 矩形信号等 ) 都是满足绝对可 积(或绝对可和)条件的能量信号,其傅里叶变换都存在, 但绝对可积(或绝对可和)条件仅是充分条件, 而不是必 要条件。引入了广义函数的概念,在允许傅里叶变换采用 冲激函数的前提下, 使许多并不满足绝对可积条件的功率.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
Department of Mathematics 第二章 解析函数 第一节 解析函数的概念 与 C-R 条件 第二节 初等解析函数 第三节 初等多值函数.
网上预约集港操作指南 一、登录系统 登陆下面图片显示网址:输入堆场用户名、密码和校验码登陆系统.
首 页 首 页 上一页 下一页 本讲内容本讲内容 视图,剖视图(Ⅰ) 复习: P107 ~ P115 作业: P48(6-2,6-4), P49( 去 6-6) P50, P51(6-13), P52 P50, P51(6-13), P52 P53 (6-18,6-20) P53 (6-18,6-20)
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
1 、如果 x + 5 > 4 ,那么两边都 可得 x >- 1 2 、在- 3y >- 4 的两边都乘以 7 可得 3 、在不等式 — x≤5 的两边都乘以- 1 可得 4 、将- 7x — 6 < 8 移项可得 。 5 、将 5 + a >- 2 a 移项可得 。 6 、将- 8x < 0.
名探柯南在侦查一个特大盗窃集团过程 中,获得藏有宝物的密码箱,密码究竟 是什么呢?请看信息: ABCDEF( 每个字 母表示一个数字 ) A :是所有自然数的因数 B :既有因数 5 ,又是 5 的倍数 C :既是偶数又是质数 D :既是奇数又是合数 EF :是 2 、 3 、 5 的最小公倍数.
项目七: PLC 功能指令应用 带进位循环左移指令 XXXXX. 项目七: PLC 功能指令应用 FX2 系列可编程控制器移位控制指令有移位、循环移位、字移位 及先进先出 FIFO 指令等 10 条指令。 带进位循环右移指令 RCR 带进位循环左移指令 RCL 字右移位指令 WSFR 先入先出读出指令.
本讲主要内容: 1. 如何登陆网站后台 2. 基础信息修改 3. 网站文章类型资料更新 4. 网站图片类型资料更新 5. 网站链接类型资料更新 本讲主要目的: 在结束本讲内容之后,能够按照客户的需求对网站的资料 进行实时更新操作。
§10.2 对偶空间 一、对偶空间与对偶基 二、对偶空间的有关结果 三、例题讲析.
请同学们仔细观察下列两幅图有什么共同特点? 如果两个图形不仅形状相同,而且每组对应点所在的直线 都经过同一点, 那么这样的两个图形叫做位似图形, 这个点叫做位 似中心.
企业产品标准信息公共服务平台 操作介绍 目录 一 、系统架构介绍 二 、企业产品标准自我声明填报系统 三 、企业产品标准公示系统.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
河南济源市沁园中学 前进中的沁园中学欢迎您 ! 温故知新: 1 、什么是原子? 2 、原子是怎样构成的? 3 、原子带电吗?为什么?
第四章 不定积分. 二、 第二类换元积分法 一、 第一类换元积分法 4.2 换元积分法 第二类换元法 第一类换元法 基本思路 设 可导, 则有.
逻辑设计基础 1 第 7 章 多级与(或)非门电路 逻辑设计基础 多级门电路.
§5.6 利用希尔伯特 (Hilbert) 变换 研究系统的约束特性 希尔伯特变换的引入 可实现系统的网络函数与希尔伯特变换.
1 第三章 数列 数列的概念 考点 搜索 ●数列的概念 ●数列通项公式的求解方法 ●用函数的观点理解数列 高考 猜想 以递推数列、新情境下的 数列为载体, 重点考查数列的通 项及性质, 是近年来高考的热点, 也是考题难点之所在.
§9. 恒定电流场 第一章 静电场 恒定电流场. 电流强度  电流:电荷的定向移动  正负电荷反方向运动产生的电磁效应相同 ( 霍尔效应 特例 ) 规定正电荷流动的方向为正方向  电流方向:正方向、反方向  电流强度 ( 电流 ) A 安培 标量 单位时间通过某一截面的电荷.
目录 上页 下页 返回 结束 二、无界函数反常积分的审敛法 * 第五节 反常积分 无穷限的反常积分 无界函数的反常积分 一、无穷限反常积分的审敛法 反常积分的审敛法  函数 第五章 第五章.
本章讨论有限自由度结构系统,在给定载荷和初始条件激励下的系统动力响应计算方法。 第 六 章
§7.2 估计量的评价标准 上一节我们看到,对于总体 X 的同一个 未知参数,由于采用的估计方法不同,可 能会产生多个不同的估计量.这就提出一 个问题,当总体的一个参数存在不同的估 计量时,究竟采用哪一个好呢?或者说怎 样评价一个估计量的统计性能呢?下面给 出几个常用的评价准则. 一.无偏性.
Presentation transcript:

《 数据结构》课程 中国科学技术大学网络学院 数据结构 第四章字符串

本章内容 4.1 串的基本概念 4.2 串的存储结构 4.3 串的基本运算的实现 习题 4

中国科大《数据结构》 串的基本概念  串 (String) 的概念:是由零个或多个字符组成的有限序列。记作: S= " a 1 a 2 … a n " (n≥0) 其中 S 是串名,用双引号括起来的字符序列为串值,引号是界限 符, a i (1≤i≤n) 是一个任意字符 ( 字母、数字或其他字符 ) ,它称为串 的元素,是构成串的基本单位,串中所包含的字符个数 n 称为串的 长度,当 n=0 时,称为空串。 将串值括起来的双引号本身不属于串,它的作用是避免串与常 数或与标识符混淆。例如, A="123" 是数字字符串,长度为 3 ,它 不同于整常数 123 。 常将仅由一个或多个空格组成的串称为空白串。注意空串和空 白串的不同,例如 " " 和 "" 分别表示长度为 1 的空白串和长度为 0 的 空串。

中国科大《数据结构》 串的基本概念  子串的概念:串中任意连续的字符组成的子序列称为该串的子串。 包含子串的串相应地称为主串。 通常称字符在序列中的序号为该字符在串中的位置。子串在主 串中的位置则以子串的第一个字符首次出现在主串中的位置来表示。 例如,设有两个字符串 C 和 D : C= " This is a string. " D= " is " 则它们的长度分别为 17 、 2 ; D 是 C 的子串, C 为主串。 D 在 C 中出现了两次,其中首次出现所对应的主串位置是 3 。因此,称 D 在 C 中的序号 ( 或位置 ) 为 3 。 若两个串的长度相等且对应字符都相等,则称两个串是相等的。 当两个串不相等时,可按 “ 字典顺序 ” 区分大小。

中国科大《数据结构》 串的基本概念 串也是线性表的一种,因此串的逻辑结构和线性表极为相似, 区别仅在于串的数据对象限定为字符集。  串的运算: 1. 串赋值 StrAssign(&s,chars) :已知串常量 chars ,生成一个 值等于 chars 的串 s 。 2. 求串长 StrLength(s) :已知串 s ,返回串 s 的长度。 3. 串连接 StrConcat (&s1,s2) :已知串 s1,s2 ,在 s1 的后面连接 s2 的串值。 4. 求子串 SubStr(s,i,len) :已知串 s ,返回从串 s 的第 i 个字符开始 的长度为 len 的子串。 5. 串比较 StrCmp(s1,s2) :已知串 s1,s2 ,若 s1==s2 ,操作返回 值为 0 ;若 s1 s2, 返回值大于 0 。

中国科大《数据结构》 串的基本概念 6. 子串定位 StrIndex(s,t) :已知串 s,t ,找子串 t 在主串 s 中首次出 现的位置,即若 t ∈ s ,则操作返回 t 在 s 中首次出现的位置,否则 返回值为- 1 。 7. 串插入 StrInsert(&s,i,t) :已知串 s,t ,将串 t 插入到串 s 的第 i 个 字符位置上。 8. 串删除 StrDelete(&s,i,len) :已知串 s ,删除串 s 中从第 i 个字 符开始的长度为 len 的子串。 9. 串替换 StrRep(&s,t,r) :已知串 s,t,r ,用串 r 替换串 s 中出现的 所有与串 t 相等的不重叠的子串。 10. 销毁串 StrDestroy(&s) :已知串 s ,销毁串 s 。 以上是串的一些基本操作。其中前5个操作是最为基本的,它们 不能用其他的操作来合成,因此通常将这5个基本操作称为最小操 作集,反之,其他操作可在这个最小操作集上实现。

中国科大《数据结构》 串的存储结构 串的顺序存储  顺序串:串的顺序存储结构简称为顺序串。 与顺序表类似,顺序串是用一组地址连续的存储单元来存储串 中的字符序列的。因此可用高级语言的字符数组来实现,按其存储 分配的不同可将顺序串分为静态存储分配的顺序串和动态存储分配 的顺序串两类。

中国科大《数据结构》 串的存储结构 1. 静态存储分配的顺序串 所谓静态存储分配,是指按预定义的大小为每一个串变量分配一 个固定长度的存储区,即串值空间的大小在编译时刻就已确定,是 静态的。所以串空间最大值为 MAXSIZE 时,最多只能放 MAXSIZE-1 个字符。其类型描述如下: #define MAXSIZE 256 // 该值依赖于应用,由用户定义 typedef struct { char ch[MAXSIZE]; //256 个字符依次存储在 ch[0]..ch[MAXSIZE - 1] 中 int len; } SString; //SString 是顺序串类型,则串的最大长度不能超过 255 SString s; // 定义串变量 s

中国科大《数据结构》 串的存储结构 在直接使用定长的字符数组存放串内容外,一般可使用一个不 会出现在串中的特殊字符放在串值的末尾来表示串的结束。例如, C 语言中以字符 '\0' 表示串值的终结。 C 语言中串的静态存储结构如下图所示: C 语言中串的静态存储结构 s 0 t 1 u 2 d 3 e 4 n 5 t 6 \0 7 ¡­ MAXSIZE - 1 s.ch[MAXSIZE ]:]: s.Len = 7

中国科大《数据结构》 串的存储结构 2. 动态存储分配的顺序串 ( 堆串 ) 这种存储表示的特点是,仍以一组地址连续的存储单元存放串值字符序 列,但它们的存储空间是在程序执行过程中动态分配而得的。系统将一个 地址连续、容量很大的存储空间作为字符串的可用空间,每当建立一个新 串时,系统就从这个空间中分配一个大小和字符串长度相同的空间存储新 串的串值。 假设以一维数组 heap[MAXSIZE] 表示可供字符串进行动态分配的存 储空间,并设一整型变量 free 指向 heap 中未分配区域的开始地址。在程序 执行过程中,当生成一个新串时,就从 free 指示的位置起为新串分配一个 所需大小的存储空间,同时记录该串的相关信息。这种存储结构称为堆结 构。动态分配存储空间的顺序串也叫堆串。堆串可定义如下: typedef struct { int length; int start; } HeapString;

中国科大《数据结构》 串的存储结构 在 C 语言中,有一个称为 “ 堆 ” 的自由存储空间,并可利用 malloc() 和 free() 等动态存储管理函数,根据实际需要动态分配和释放字符数组空间,如 下图所示。其类型可描述如下: typedef struct { char *ch; // 指示串的起始地址,可按实际的串长分配存储区 int len; } HString; HString s; // 定义一个串变量 顺序串的动态存储结构

中国科大《数据结构》 串的存储结构 在程序中,可根据实际需求为这种类型的串变量动态分配存储 空间,这样做非常有效、方便,只是在程序执行过程中要不断地生 成新串和销毁旧串。

中国科大《数据结构》 串的存储结构 串的链式存储 顺序串上的插入和删除操作极不方便,需要移动大量的字符。 因此,我们可用单链表方式来存储串值,串的这种链式存储结构简 称为链串,如下图所示。 结点大小为 1 的链串 s

中国科大《数据结构》 串的存储结构  链串的类型描述: typedef struct node { char ch; struct node *next; //next 为指向结点的指针 } LString; LString s; // 定义一个串变量 s 一个链串由头指针惟一确定。 这种结构便于进行插入和删除运算,但存储空间利用率太低。

中国科大《数据结构》 串的存储结构 为了提高存储密度,可使每个结点存放多个字符。如图所示, 通常将结点数据域存放的字符个数定义为结点的大小,显然,当结 点大小大于 1 时,串的长度不一定正好是结点的整数倍,因此要用特 殊字符来填充最后一个结点,以表示串的终结。 结点大小为 4 的链串

中国科大《数据结构》 串的存储结构 对于结点大小不为 1 的链串,其类型定义只需对上述的结点类 型做简单的修改即可。 #define nodesize 80 typedef struct node { char data[nodesize]; struct node *next; } LString; 虽然增大结点的数据域使得存储密度增大,但是做插入、删除 运算时,需要考虑结点的分拆与合并,可能会引起大量字符的移动, 给运算带来不便。

中国科大《数据结构》 串的存储结构 链串的插入

中国科大《数据结构》 串的基本运算的实现 1. 求子串运算 ( 采用静态存储顺序串 ) int StrSub(SString *sub, SString s, int pos, int len) // 用 sub 返回串 s 中序号 pos 开始的长度为 len 的子串 { int i; if (pos s.len || len s.len-pos) { sub->len=0; return(0); } // 子串起始位置及长度是否合适 else { for(i=0;i ch[i]=s.ch[i+pos]; sub->[len]= '\0'; // 子串结束 sub->len=len; return(1); }

中国科大《数据结构》 串的基本运算的实现 2. 定位运算 ( 采用静态存储顺序串 ) 串的定位运算也称为串的模式匹配,是一种重要的串运算。 设 s 和 t 是给定的两个串,在主串 s 中找到等于子串 t 的过程称为模式匹 配,如果在 s 中找到等于 t 的子串,则称匹配成功,函数返回 t 在 s 中的首次 出现的存储位置 ( 或序号 ) ,否则匹配失败,返回- 1 。 t 也称为模式。  【算法思想】首先将 s0 与 t0 进行比较,若不同,就将 s1 与 t0 进行比较 …… , 直到 s 的某一个字符 si 和 t0 相同,再将它们之后的字符进行比较,若也相同, 则如此继续往下比较,当 s 的某一个字符 si 与 t 的字符 tj 不同时,则 s 返回到 本趟开始字符的下一个字符,即 si - j+1 , t 返回到 t0 ,继续开始下一趟的比 较,重复上述过程。若 t 中的字符全部比较完,则说明本趟匹配成功,本趟 的起始位置是 i - j ,否则,匹配失败。 设主串 s=“ababcabcacbab” ,模式 t=“abcac” ,匹配过程如下图所 示。

中国科大《数据结构》 串的基本运算的实现  模式匹配算法 int StrIndex(SString s,int pos,SString t) // 求串 t 在串 s 中的位置 { int i,j; if(t.len==0) return(0); i=pos;j=0; while(i<s.len && j<t.len) // 都没遇到结束符 if(s.ch[i]==t.ch[j]) { i++;j++; } // 继续 else {i=i-j+1; j=0; } // 回溯 if (j>=t.len) return(i-j); // 匹配成功,返回存储位置 else return(-1); }

中国科大《数据结构》 串的基本运算的实现 3 .插入运算 ( 采用动态存储串 ) StrInsert(HString *s, int pos, HString t) // 在串 s 的第 pos 个字符之前插入串 t { char *temp; int i; if(pos s->len) return(0); //pos 不合理 if(t.len) //t 非空 { temp=(char*)malloc((s->len+t.len)*sizeof(char)); // 临时变量,暂存插入后的结果 if(temp==NULL) return(0); for(i=0;i ch[i]; for(i=0;i<t.len;i++) temp[i+pos]=t.ch[i]; for(i=pos;i len;i++) temp[i+t.len]=s->ch[i]; s->len+=t.len; free(s->ch); // 释放原串 s s->ch=temp; //s 获得相加结果 return(1); }

中国科大《数据结构》 串的基本运算的实现 4 .连接运算 ( 采用动态存储串 ) StrCat(HString *s,HString t) // 将串 t 连接在串 s 的后面 { char *temp; int i; temp=(char *) malloc((s->len+t.len)*sizeof(char)); if(temp==NULL) return(0); for(i=0;i len;i++) temp[i]=s->ch[i]; // 复制 s 串 for(i=s->len;i len+t.len;i++) // 复制 t 串 temp[i]=t.ch[i-s->len]; s->len+=t.len; free(s->ch); s->ch=temp; return(1); }

中国科大《数据结构》 串的基本运算的实现 5 .串定位 ( 采用链串存储 ) LString *lindex(LString s,LString t) // 求串 t 在串 s 中的位置,返回指向 t 串起始位置的指针 { LString *loc,*p,*q; loc=s; p=loc;q=t; while(p && q) // 当 t 、 s 串均未结束时 { if(p->data==q->data) // 字符匹配时,指针后移 { p=p->next; q=q->next; } else // 字符不匹配时,回溯 { loc=loc->next; p=loc; q=t; } if(q==NULL) return(loc); // 匹配完成,返回 else return(NULL); }

中国科大《数据结构》 4-25 习 题 4 1. 简述下列每对术语的区别:空串和空白串,串常量和串变量,主串 和子串,静态分配的顺序串和动态分配的顺序串。 2. 设 s="I am a student" , t="good" , q="programer" 。给出下列操 作的结果: (1) StrLength(s) (2) SubString(sub1,s,1,7) (3) StrIndex(s, 'a',4) (4) StrReplace(s, 'student',q) (5) Strcat(StrCat(sub1,t)) 3. 利用 C 的库函数 strlen,strcpy 和 strcat 写一算法 void StrInsert(char *S, char *T, int i), 将串 T 插入到串 S 的第 i 个位置上。若 i 大于 S 的长 度,则插入不执行。

中国科大《数据结构》 4-26 习 题 4 4. 利用 C 的库函数 strlen 和 strcpy 写一算法 void StrDelete(char *S,int i, int m) ,删去串 S 中从位置 i 开始的连续 m 个字符。若 i≥strlen(S) ,则没有字符 被删除;若 i+m≥strlen(S), 则将 S 中从位置 i 开始直至末尾的字符均删去。 5. 以 HString 为存储表示,写一个求子串的算法。 6. 一个文本串可用事先给定的字母映射表进行加密。例如,设字母映射表为: a bcdefgh Ijklmnop qrstuvwx yz ngzqtcob muhelkpd awxfyIvr sj 则字符串 "encrypt" 被加密为 "tkzwsdf" 。试写一算法将输入的文本串进行 加密后输出;另写一算法,将输入的已加密的文本串进行解密后输出。

中国科大《数据结构》 4-27 习 题 4 7. 写一算法 void StrReplace(char *T, char *P, char *S) ,将 T 中首次 出现的子串 P 替换为串 S 。注意: S 和 P 的长度不一定相等。 8. 若 S 和 T 是用结点大小为 1 的单链表存储的两个串,试设计一个算法 找出 S 中第一个不在 T 中出现的字符。

中国科大《数据结构》 4-28 习题  本章习题参见教师网页: