数据结构(五)串

定义

串的存储结构

顺序存储结构

当长度超过了预分配的空间,需要重新动态分配新的空间

链式存储结构

一个节点对应一个字符会造成资源浪费,所以一个节点可以放多个字符(相当于链式的每个节点内置了一个顺序存储结构),具体存几个字符需要按实际情况,否则会影响串的处理效率

匹配算法

朴素模式匹配算法

....

kmp匹配算法

kmp -> 克努特-莫里斯-普拉特

简单理解就是,避免了匹配失败后的回溯匹配

详细解释可以参考

http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html

时间: 2024-10-25 16:55:18

数据结构(五)串的相关文章

数据结构与算法JavaScript (五) 串(经典KMP算法)

数据结构与算法JavaScript (五) 串(经典KMP算法) KMP算法和BM算法 KMP是前缀匹配和BM后缀匹配的经典算法,看得出来前缀匹配和后缀匹配的区别就仅仅在于比较的顺序不同 前缀匹配是指:模式串和母串的比较从左到右,模式串的移动也是从 左到右 后缀匹配是指:模式串和母串的的比较从右到左,模式串的移动从左到右. 通过上一章显而易见BF算法也是属于前缀的算法,不过就非常霸蛮的逐个匹配的效率自然不用提了O(mn),网上蛋疼的KMP是讲解很多,基本都是走的高大上路线看的你也是一头雾水,我试

浅谈算法和数据结构: 五 优先级队列与堆排序

转载自:http://www.cnblogs.com/yangecnu/p/Introduce-Priority-Queue-And-Heap-Sort.html 浅谈算法和数据结构: 五 优先级队列与堆排序 在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话. 在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是

数据结构 顺序串笔记

/* 数据结构--串笔记 串:由零个或多个字符组成的有限序列. 串也有两种储存方式,顺序储存和链式储存 1.顺序表示的串--顺序串 一般使用字符型数组储存. 确定串的长度有两种方法.一是:在串的末尾加一个结束标记(在C语言 中系统自动在串值的末尾加一个'\0'作为结束标记 ),再使用 strlen 函数得到串的长度.二是:增加一个变量 len 用来储存串的长度. */ // 顺序串的实现即基本操作 # include <stdio.h> # include <stdlib.h> #

数据结构例程——串的模式匹配(KMP算法)

本文针对数据结构基础系列网络课程(4):串中第5课时串的模式匹配(KMP算法). 问题:串的模式匹配 KMP算法: #include <stdio.h> #include "sqString.h" void GetNext(SqString t,int next[]) /*由模式串t求出next值*/ { int j,k; j=0; k=-1; next[0]=-1; while (j<t.length-1) { if (k==-1 || t.data[j]==t.d

数据结构例程——串的顺序存储应用

本文针对数据结构基础系列网络课程(4):串中第3课时串的顺序存储应用. 例1:串比较 问题: 设计实现串比较运算的算法 算法思路 (1)比较s和t两个串共同长度范围内的对应字符: ① 若s的字符>t的字符,返回1: ② 若s的字符<t的字符,返回-1: ③ 若s的字符=t的字符,按上述规则继续比较. (2)当(1)中对应字符均相同时,比较s和t的长度: ① 两者相等时,返回0: ② s的长度>t的长度,返回1: ③ s的长度<t的长度,返回-1. #include <stdi

数据结构之串

串:是由零个或多个字符组成的有限序列,又名字符串. 串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号 给定两个串s="a1a2.....an" t="b1b2......bm"当满足以下条件之一时 s<t. 1.n<m 且ai=bi(i=1,2....,n) 例如s="hap" t="happy" 因为t比s多出2个字符 所以s<t 2.存在某个k<=min(m,

【数据结构】串的堆分配表示与实现

采用堆分配存储表示的串被称为堆串,与顺序串相比,地址空间仍是连续,但空间是在程序执行时动态分配的. 程序中会使用到的realloc函数: //realloc : (void *)reelloc (void *ptr,unsigned newsize); //使用 : char *str; //   str = (char *)realloc(str,20); 代码实现如下: <span style="font-size:18px;">#pragma once #includ

数据结构:串

一.串的基本概念 1.串的定义 s=“a1a2…an” 2.串的基本操作 二.串的顺序存储结构 1.串的非紧缩存储 一个存储单元中只存储一个字符,和顺序表中一个元素占用一个存储单元类似.具体形式见图1,设串S=“How do you do”. 2.串的紧缩存储 根据各机器字的长度,尽可能将多个字符存放在一个字中.假设一个字可存储4个字符,则紧缩存储具体形式. 3.串的字节存储 三.串的链式存储结构 1 ///Name:String 2 ///Author:JA 3 ///Date:2015-3-

【数据结构】-串

一.串的基本概念 串(字符串):是由零个或多个字符组成的有限序列,一般记为: s='a1a2-an'(n>=0) s是串名,单引号括起来的是串的值,ai(1<=i<=n)可以是字母.数字或其他字符. 串中字符的数目n称为串的长度: 长度为零的串称为空串: 串中任意个连续的字符组成的子序列称为子串: 包含子串的串相应的称为主串: 字符在序列中的序号称为该字符在串中的位置: 子串在主串中的位置以子串的第一个字符在主串中的位置来表示. 二.串的表示和实现 1)定长顺序存储表示:用一组地址连续的

数据结构之串及其模式匹配

这里说了些什么? 在这个章节讲了串的结构.构造串的方法.各种对串的操作以及从串的匹配的算法. 串的结构也是千奇百态,有直接按顺序存储的结构,有链条式的存储结构以及基于顺序存储结构和链条结构的合体的名字索引表. 串的操作有点像C++里面有个库叫sctring的操作,函数名字都一样的,然后就是告诉我们是怎么实现的. 模式匹配算法是传统的BF算法(一个一个比失败了就挪动一个位置继续比)和KMP算法(牛皮的跳跃式匹配).关于这个算法我做了一个ppt但是好像不好直接上传,我就上传到了百度云制作了一个链接,