串(string)(或字符串)是由零个或多个字符组成的有限序列.串中字符的数目称为串的长度.零个字符的串称为空串(null string),它的长度为零. 串中任意个连续的字符组成的子序列称为该串的子串.包含子串的串相应地称为主串.通常称字符在序列中的序号为该字符在串中的位置.子串在主串中的位置则以子串的第一个字符在主串中的位置来表示. 只有当两个串的长度相等,并且各个对应位置的字符都相等时才相等. 串有3种机内表示方法: * 1.定长顺序存储表示 * 2.堆分配存储表示 * 3.串的块链存储表…
设有主串s和子串t,子串t的定位就是要在主串中找到一个与子串t相等的子串.通常把主串s称为目标串,把子串t称为模式串,因此定位也称为模式匹配. 模式匹配成功是指在目标串s中找到一个模式串t: 不成功则指目标串s中不存在模式串t Brute-Force算法 采用穷举的思路,从目标串s的第一个字符开始和模式串t的第一个字符开始比较 若相等,则继续逐个比较后续字符 不相等则从目标串s的第二个字符开始重新与模式串t的第一个字符进行比较 若匹配成功则返回主串中第一次出现模式串的位置,匹配失败返回-1 以目…
和线性表的链式存储结构相类似,也可采用链式方式存储串值.由于串结构的特殊性--结构中的每个数据元素是一个字符,则用链表存储串值时,存在一个“结点大小”的问题,即每个结点可以存放一个字符,也可以存放多个字符. 下面是结点大小为4(即每个结点存放4个字符)的链表: head --> (a) --> (b) --> (c) --> ... --> (i) 当结点大小大于1时,由于串长不一定是结点大小的整倍数,则链表中的最后一个结点不一定全被串值占满,此时通常补上“#”或其它非串值字…
1.朴素的模式匹配算法 朴素的模式匹配算法:就是对主串的每个字符作为子串开头,与要连接的字符串进行匹配.对主串做大循环,每个字符开头做T的长度的小循环,直到成功匹配或全部遍历完成为止. 又称BF算法 package com.alice.dataStructe5.bf; /** * 返回子串t在主串s中第pos个字符之后的位置,若不存在,则返回-1 * @author Administrator * */ public class BF { public int index(String s,St…
前言 PS:本文相关头文件.预编译以及typedef如下,阅读一遍以便于下面的理解: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXSTRLEN 40 #define OK 1 #define ERROR 0 #define TURE 1 #define FALSE 0 #define OVERFLOW -2 typedef int Status; typedef char S…
1.线性表(Linear list) 线性表--简单示例及线性表的顺序表示和实现 线性表--线性链表(链式存储结构) 线性表的静态单链表存储结构 循环链表与双向链表 功能完整的线性链表 线性链表的例子:一元多项式 2.栈(Stack) 栈 -- 顺序存储表示和链式表示及示例 3.队列(Queue) 队列 -- 链队列和循环队列实现及示例 4.串(String) 串--定长顺序存储表示以及kmp算法实现 串--堆分配存储表示 串的块链存储表示 5.数组(Array) 稀疏矩阵之三元组线性表表示 稀…
//串的模式匹配算法 //KMP算法,时间复杂度为O(n+m) #include <iostream> #include <string> #include <cstring> using namespace std; //-----串的定长顺序存储结构----- #define MAXLEN 255 //串的最大长度 typedef struct { ]; //存储串的一维数组 int length; //串的当前长度 }SString; ]; ]; int Inde…
空串:长度为0的串 空格串:由一个或多个空格组成的串 串常用的3种机内表示方法: 定长顺序存储表示: 用一组地址连续的存储单元存储串的字符序列,每一个串变量都有一个固定长度的存储区,可用定长数组来描述. #define MAXLEN 255 typedef unsigned ];/*0号单元存放串的长度*/ 1.串连接 当串s1,s2连接后的结果串t超过了定长MAXLEN时,即s1[0]+s2[0]>MAXLEN,输出相应的信息 void Concat(Sstring t,Sstring s1,…
首先从字节上来说CHAR是定长,意思就是只要输入在我这个定长以下,不管是几个字符,它的实际占用空间都是CHAR定长的长度.而VARCHAR则相对来说会节省一点空间,比如:你VARCHAR的长度设为10,那么你只存储了两个字符长度,那么最终占用的空间也就是两个字符长度. 还有一点就是关于用途:VARCHAR虽然比CHAR节省空间,但是如果一个VARCHAR列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,这会造成多余的I/O,是数据库设计和调整中要…
串的定长顺序存储#define MAXSTRLEN 255,//超出这个长度则超出部分被舍去,称为截断 串的模式匹配: 串的定义:0个或多个字符组成的有限序列S = 'a1a2a3…….an ' n = 0时为空串串的顺序存储结构:字符数组,串的长度就是数组末尾‘\0'前面的字符个数数组需在定义时确定长度,有局限性数组的最大长度二:串的堆分配存储表示typedef struct { char *ch; //若是非空串,则按串长分配存储区 //否则ch为空 int length; //串长度}HS…