【数据结构】-串

一、串的基本概念

串(字符串):是由零个或多个字符组成的有限序列,一般记为:

s=‘a1a2…an’(n>=0)

s是串名,单引号括起来的是串的值,ai(1<=i<=n)可以是字母、数字或其他字符

串中字符的数目n称为串的长度

长度为零的串称为空串

串中任意个连续的字符组成的子序列称为子串

包含子串的串相应的称为主串

字符在序列中的序号称为该字符在串中的位置

子串在主串中的位置以子串的第一个字符在主串中的位置来表示。



二、串的表示和实现

1)定长顺序存储表示:用一组地址连续的存储单元存储串值的字符序列。

2)堆分配存储表示:仍是用一组地址连续的存储单元存放串值字符序列,但它们的存储空间是在程序执行的过程中动态分配的。

3)串的块链存储表示:用链表方式存储串值。

用链表存储串值时,由于串中的数据元素是一个字符,每个结点可以存放一个字符,也可以存放多个字符。除头指针外还可附设一个尾指针指示链表中的最后一个结点,并给出当前串的长度。



三、串操作

1)串联接Contact(&T,S1,S2);

2)求子串SubString(&Sub,S,pos,len);

3)模式匹配Index(S,T,pos):子串的定位操作称作串的模式匹配。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 06:54:55

【数据结构】-串的相关文章

javascript实现数据结构: 串的块链存储表示

和线性表的链式存储结构相类似,也可采用链式方式存储串值.由于串结构的特殊性--结构中的每个数据元素是一个字符,则用链表存储串值时,存在一个"结点大小"的问题,即每个结点可以存放一个字符,也可以存放多个字符. 下面是结点大小为4(即每个结点存放4个字符)的链表: head --> (a) --> (b) --> (c) --> ... --> (i) 当结点大小大于1时,由于串长不一定是结点大小的整倍数,则链表中的最后一个结点不一定全被串值占满,此时通常补上

数据结构—串的堆分配

#include<stdio.h> #include<stdlib.h> typedef struct { char *ch; int length; }HString; void StrAssign(HString &T,char *chars); void StrLength(HString S); void StrCompare(HString S,HString T); void ClearString(HString &S); void Concat(HS

数据结构——串的相关算法实现

数据结构--串的相关算法实现 顺序串的插入函数实现 在进行顺序串的插入时,插入pos将串分为两个部分(假设为A.B,长度为LA.LB)及待插入部分(假设为C,长度为LC),则串由插入前的AB变为ACB,由于是顺序串,插入会引起元素的移动.可能会出现以下的三种情况: ①插入后串长度(LA+LC+LB)<=MAXLEN,则将B后移LC个元素位置,再将C插入: ②插入后串长度 >=MAXLEN 且 pos+LC <=MAXLEN,则 B 后移时会有部分字符被舍弃; ③插入后串长度>MAX

数据结构-串操作应用之词索引表

为书库创建查询索引表 建立词索引表基本步骤: 1.从书目文件中读入一个书目单. 2.从书目单中提取所有关键字插入词表. 3.对词表中的每一个关键字在索引表中进行查找并作相应的插入操作. 详细操作: 1.为识别从书名串中分离出来的单词是否是关键字,需要一张常用词表.顺序扫描书目单,首先分离单词,然后查找常用词表,若不和表中任一词相等,则为关键字,插入临时存放关键字的词表中. 2.在索引表中查询关键字时可能出现两种情况:其中一种是索引表上已经有此关键词的索引项,只要在该项中插入书号索引即可:其二是需

数据结构-串

串,字符串是由零个或多个字符组成的有限序列.字符的数目称为串的长度.长度为零的串称为空串.串中任意个连续的字符组成的子序列称为该串的子串.包含子串的串称为主串.字符在串中的序号称为该字符在串中的位置. 串相等,只有长度相同,对应位置字符相同的串是相等串. 对于串的操作很多,在这里仅列出以下几种: 1.串比较 equals() 判断串是否相等. compareTo() 比较串的大小. compareToIgnoreCase(String int) 忽略字母大小写比较. == 判断串与地址是否相同.

数据结构 - 串的性质和基本操作(一)

串的概念 什么是串呢? 串(String):由零个或多个字符组成的有限序列.记为:s='a1a2-an'(n≥0) s为串名, 'a1a2-an'为串值,n为串的长度. 子串在主串中的位置:以子串的第一个字符在主串中的位置来表示 串相等:当且仅当两个串的串值相等(两个串的长度相等,并且各个对应的字符也都相等 串的数据类型 ADT String { D={ ai |ai∈CharacterSet, i=1,2,...,n, n≥0 } R={ < ai-1, ai > | ai-1, ai ∈D

数据结构- 串的模式匹配算法:BF和 KMP算法

Brute-Force算法的思想 1.BF(Brute-Force)算法 Brute-Force算法的基本思想是: 1) 从目标串s 的第一个字符起和模式串t的第一个字符进行比较,若相等,则继续逐个比较后续字符,否则从串s 的第二个字符起再重新和串t进行比较. 2) 依此类推,直至串t 中的每个字符依次和串s的一个连续的字符序列相等,则称模式匹配成功,此时串t的第一个字符在串s 中的位置就是t 在s中的位置,否则模式匹配不成功. Brute-Force算法的实现 c语言实现: [cpp] vie

数据结构串

串的逻辑结构和线性表相似,区别仅为串的数据对象约束为字符集串的基本操作和线性表有很大差别,线性表的基本操作中大多以的“单个元素”作为操作对象:而串的基本操作中通常以“串的整体”作为 操作对象 串的表示:1.定长顺序存储表示: 超过预定义长度的串值则被舍弃,称为“截断” 对串长的表示方法:在下标为0的数组分量存放串的实际长度:在串值后面加一个结束标记字符“\0”2.堆分配存储表示: 仍以一组地址连续的存储单元存放,但存储空间是在程序执行过程中动态分配的 C中动态分配函数:malloc(),free

转载 数据结构 串的模式匹配

转载自http://www.cnblogs.com/dolphin0520/ 十分感谢作者大大 KMP算法 KMP算法 在介绍KMP算法之前,先介绍一下BF算法. 一.BF算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符:若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果. 举例说明: S:  ababcababa P:  ababa  BF算法匹配的步骤

数据结构-串的堆分配存储

串的堆分配存储表示的特点是,仍以一组地址连续的存储单元存放串值字符序列,但它们的存储空间是在程序执行过程中动态分配的.使用动态分配函数malloc()和函数free()来管理存储空间的大小. 串的堆分配存储方法具有顺序存储的特点,又弥补了定长存储的大小限制,多以多被采用. 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 typedef int Status; 6 #define O