知识大全 数据结构第四章(串)串讲+复习要点
Posted 位移
篇首语:幽映每白日,清辉照衣裳。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构第四章(串)串讲+复习要点相关的知识,希望对你有一定的参考价值。
本章介绍了 串 的 逻辑结构 存储结构 及 串上的基本运算 由于在高级语言中已经提供了较全善的串处理功能 因此本章的 重点 是掌握在串上实现的模式匹配算法 同时这也是本章的 难点 但是从全书来讲 这属于较简单的一章内容
串及其运算( 领会 )(这些内容比较容易理解 不用死记)
串 就是 字符串 是一种 特殊 的 线性表 它的每个结点仅由 一个字符 组成
空串 是指 长度为零 的串 也就是串中不包含任何字符(结点)
空白串 指串中 包含 一个或多个 空格 字符的串 不同与空串 它的结点就是一个空格字符
在一个串中任意个连续字符组成的子序列称为该串的 子串 包含子串的串就称为 主串 子串在主串中的序号就是指子串在主串中首次出现的位置 如A= I love you B= love 则B在A中的序号为 注意空格也是字符
空串 是 任意串 的 子串 任意串 是他 自身的 子串
串分为两种 串常量 和 串变量 串常量在程序中不能改变 串变量则可以
关于串的基本运算 基本上在C语言中已经学过 主要有
求串长strlen(char *s)
串复制strcpy(char *to char *from)
串联接strcat(char *to char *from)
串比较charcmp(char *s char *s )
和字符定位strchr(char *s char c)等
这些基本运算通过练习来掌握
串的存储结构( 简单应用 )
串 是 特殊的线性表 (结点是字符) 所以串的存储结构与线性表的存储结构类似
串的顺序存储结构简称为 顺序串 顺序串又可按存储分配的不同分为 静态存储分配的顺序串 和 动态存储分配的顺序串
静态 的意思可简单地理解为一个确定的存储空间 它的长度是不可变的 如直接使用定长的字符数组来定义一个串 它的优点是涉及串长的操作速度快 因为它的最大长度是不变的
动态存储分配 就是在定义串时不分配存储空间 直到需要使用时按所需串的长度分配存储单元给它 并且在运行中还可以根据需要变化串的长度 这就是动态分配 不过这样的串仍是顺序存储的 也就是说指针指向串的首地址 后面的结点是连续存储的
串的链式存储 就是用 单链表 的方式存储串值 串的这种链式存储结构简称为 链串 链串与单链表的差异只是它的结点数据域为单个字符 这种存储结构方便于串的插入和删除操作 但是空间利用率不高 因为存放每一个字符要 搭配 一个指向下一字符的地址 而地址所占空间是比较大的 为了解决这种 存储密度 过低的状况 可以让一个结点存储多个字符 事实上这是顺序串和链串的综合(折衷)
本章的 重点 和 难点 就是串运算的实现 特别是顺序串上子串定位的运算
子串定位运算 又称串的 模式匹配 或 串匹配 就是在主串中查找出子串出现的位置 这在应用中非常广泛 比如文本编辑中的 查找和替换 用到的就是子串定位运算的算法
在 串匹配 中 将 主串 称为 目标(串) 子串 称为 模式(串 ) 我们这样想象 子串就如同一个模板(样本) 用它在目标上对比 从头往后比较 凡是遇到一模一样的那么一段 就算找到一个位置了(我们就说 从这个位置开始的 匹配成功 ) 用很专业的很酷的话说就是 模式在目标中出现 (我想起了警匪片里的对话) 如果这个模板对应的目标串中有不一样的字符出现 那么这个位置就 匹配失败
当我们用这个模子依次从目标的头部往后移 移动到的位置就叫 位移 如果每次向右移动 格 那么每次的位移就加上
每次移动后要看看模板里的字符和目标中相应的字符是否相等 如果都相同 这次位移就叫 有效位移 (其实就是从这个位置开始的 匹配成功 )
另外有一个 合法位移 和 不合法位移 的概念 就是说 移动一个位置后 如果模板的最后一个字符还没有超出目标串中最后一个字符时 这个位移就是合法位移 如果超出了 那么就没有比较的意义了 这时就是不合法位移
这是比较容易理解的 串匹配问题 就是找出给定模式串P在给定目标串T中 首次出现的 有效位移 或者是全部 有效位移
具体的串匹配算法也不是很难理解 就是用两个循环 外循环用于进行模式的位移 内循环进行模板内每个字符的比较(判断是否有效位移) 关于串匹配的时间复杂度 在最坏的情况下就是目标串和模式串分别是 a ^n b 和 a ^m b 的形式 就是说 每一次合法位移后 在内循环中都要比较m个字符才知道是不是有效位移(前面的字符都是一样的) 所以最坏的情况下时间复杂度是O((n m+ )m) 假如m与n同阶的话则它是O(n^ )
链串上的子串定位运算的不同之处就是位移是结点地址而不是整数 理解一下算法即可
真正的应用主要还是要掌握 串的基本算法 并用它们构造出可以 解决具体问题的 简单算法
第四章 串 复习要点
本章复习要点是
串是一种特殊的线性表 它的结点仅由一个字符组成
空串与空白串的区别 空串是长度为零的串 空白串是指由一个或多个空格组成的串
串运算的实现中子串定位运算又称串的模式匹配或串匹配
串匹配中 一般将主串称为目标(串) 子串称为模式(串)
cha138/Article/program/sjjg/201311/23674相关参考
排序是组织数据最基本的运算排序的方法也很多本章给出了几种典型的排序方法见下表 排序类别插入排序交换排序选择排序归并排序分配排序 排序方法直接插入冒泡法直接选择*归并排序箱排序 希尔排序*快速
本章的重点是掌握顺序表和单链表上实现的各种基本算法及相关的时间性能分析难点是使用本章所学的基本知识设计有效算法解决与线性表相关的应用问题 要求达到<识记>层次的内容有:线性表的逻辑结
第四章串 串及其运算 串的基本概念 串是由零个或多个字符组成的有限序列; 包含字符的个数称串的长度;长度为零的串称空串;由一个或多个空格组成的串称空白串; 串中任意个连续字符组成的子序列
本章的重点是了解数据结构的逻辑结构存储结构数据的运算三方面的概念及相互关系难点是算法复杂度的分析方法 需要达到<识记>层次的基本概念和术语有数据数据元素数据项数据结构特别是数据结构的
第三章栈和队列 本章介绍的是栈和队列的逻辑结构定义及在两种存储结构(顺序存储结构和链式存储结构)上如何实现栈和队列的基本运算本章的重点是掌握栈和队列在两种存储结构上实现的基本运算难点是循环队列中
第四章 串 一选择题 .下面关于串的的叙述中哪一个是不正确的?( )【北方交通大学一(分)】 A.串是字符的有限序列 &nb
前面我们学习的线性表栈队列和串都是线性结构本章起学习的是非线性结构它们的逻辑特征是一个数据元素可能有多个直接前趋和多个直接后继 本章重点是熟悉多维数组的存储方式矩阵的压缩存储方式广义表的定义及其
.设字符串S=aabaabaabaacP=aabaac【北方交通大学二(分)】 ()给出S和P的next值和nextval值 ()若S作主串P作模式串试给出利用BF算法和KMP算法的匹配过程
本章介绍了线性表树和散列表的查找方法算法实现以及各种查找方法的时间性能分析重点是顺序查找二分查找二叉树查找以及散列表上查找的基本思想和算法实现 一基本概念(识记) 查找的同时对表做修改操作(如
.串ababaaababaa的next数组为( )【中山大学一】 A. B. C.