C语言数据结构——第四章 串

四、串

 4.1-串的基本概念

  • 串的定义

    串是由数字、字母或其他字符组成的有限序列,一般记为

      StringName = “a[0]a[1]a[2]···a[i]···a[n-1]”(n>0,0<=i<=n-1)

    其中StringName是串名,双引号内的序列是该串的值,n为串的长度,i为某一字符在该串中的下标

  • 串的常用术语
  1. 串的长度:串中包含字符个数即为串的长度
  2. 空串:串中不包含任何字符时被称为空串,此时串的长度为0
  3. 空格串:由一个或多个空格组成的串被称为空格串,它的长度是串中空格的个数
  4. 子串:串中任意个连续字符组成的子序列被称为该串的子串,故其长度为1
  5. 主串:包含子串的串被称为主串
  6. 真子串:串的所有子串中,除其自身外,其他子串都被称为该串的真子串
  7. 子串的位置:子串的第一个字符在主串中对应的位置被称为子串在主串中的位置,简称子串的位置
  8. 串相等:当两个串的长度相等且对应位置的字符依次相同时,我们称这两个串是相等的。
  • 串的抽象数据类型

    串的逻辑结构与线性表很相似,单穿的数据元素只能为字符,因此我们认为串是一种特殊的线性表,在串的基本操作中,我们通常以整体为操作对象,这和线性表以单个元素作为操作对象不同。

 4.2-定长顺序存储表示

   类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列。在串的定长顺序存储结构中,按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区。串的实际长度可在这预定义长度的范围内随意,超过预定义长度的串值则被舍去,称之为“截断”

 4.3-堆分配存储表示

    这种存储表示的特点是,仍以一组地址连续的存储单元存放串值字符序列,但它们的存储空间是在程序执行过程中进行动态分配而得。利用函数为每个新产生的串分配一块实际串长所需的存储空间,若分配成功,则返回一个指向起始地址的指针,作为串的基址,同时为了以后处理方便,约定串长也作为存储结构的一部分。

 4.4-串的块链存储表示

    和线性表的链式存储结构相类似,也可采用链表方式存储串值。由于串结构的特殊性——结构中的每个数据元素是一个字符,则用链表存储串值时,存在一个“结点大小”的问题,即每个结点可以存放一个字符,也可以存放多个字符。为了方便进行串的操作,当以链表存储串值时,除头指针外还可以附设一个尾指针指示链表中的最后一个结点,并给出当前串的长度。

原文地址:https://www.cnblogs.com/yachao30/p/12229782.html

时间: 2024-10-29 18:57:38

C语言数据结构——第四章 串的相关文章

数据结构第四章总结

数据结构第四章学习的是串,数组和广义表(广义表课程中没讲,问题不大) 串的定义其实在c++学习中就有所接触,所以这里不详说,  重点说的是两个串模式匹配算法 1.BF算法 BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符: 若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果.BF算法是一种蛮力算法. 2.KMP算法 KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达

数据结构第四章小结

任选本章一道题目,谈谈你解决该题的心得体会.同时谈谈你对上次制定目标的完成情况, 以及接下来的目标. 一.第四章主要学习了串,我觉得最重要的两个内容,一个是AI核心代码,一个是稀疏矩阵的十字链表压缩存储:AI核心代码呢,老师在课堂上讲了一部分,自己也接受了挺多的,当天我就趁热打铁在通识课上回味了一下,老师有留给我们自己完成can you 的那一部分内容,之前有一部分是you变成I,我参照着之前的自己写了一遍,但是一开始出现了错误,又重新写了好几遍,但是总是会出现warning,可能是溢出的问题,

数据结构第四章学习小结

第四章主要是串和数组的学习,之前对串和数组的应用仅限于对其单独处理,本章学习着重于对具体题目的实际操作,实践了串的模式匹配算法,对其有了更深入的了解,数组的应用拓展到了稀疏矩阵的存储的实现. 一.串 串的模式匹配 BF算法 首先未匹配到串尾时,将两个字符串一一匹配,可用C++自带的length()函数实现 while(i<=S.length()&&j<=T.length()) 接下来就是匹配的过程 if(S[i]==T[j]){ i++;j++; }//若匹配则继续比较下一位

第四章 串和数组 (主要kmp算法)

第四章 题目:串的模式匹配 给定一个主串S(长度<=10^6)和一个模式T(长度<=10^5),要求在主串S中找出与模式T相匹配的子串,返回相匹配的子串中的第一个字符在主串S中出现的位置. (用KMP算法,就是不用再回溯, 最前面的k个字符和j之前的最后k个字符是一样的:P[1~ k] == P[j-k ~ j-1]) 1.先定义一个串的顺序存储结构,因为不需要出插入和删除操作,所以选用了顺序存储 typedef struct { char ch[maxlen + 2]; int length

第四章 串的基本操作【数据结构】

运行截图. 自己太久没有这样用过指针了,总是用不好~~ 下次自己申请了一个指针,就得初始化,不然在判断是否为空的操作下,会导致程序停止运行.(传说中的敲代码5分钟,debug2小时又被我碰上了,泪目). #include<stdio.h> #include<string.h> #include<stdlib.h> #include<malloc.h> #define ERROR 0 #define OK 1 #define MAXSIZE 1000 type

数据结构与算法 Python语言实现 第四章练习

巩固 1 # R-4.1 2 def find_max(data): 3 n = len(data) 4 if n == 1: 5 return data[0] 6 elif data[0] > data[1]: 7 data.pop(1) 8 elif data[0] < data[1]: 9 data.pop(0) 10 return find_max(data) 11 12 13 # print(find_max([1, 2, 3, 4, 6, 5])) 14 # 时间:O(n) 空间:

C语言数据结构——第三章 栈和队列

三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性的数据结构. 从数据类型的角度看,它们是和线性表大不相同的两种重要的抽象数据类型,在面向对象的程序设计中,它们是多型数据类型. 3.1-栈 3.1.1-抽象数据类型栈的定义 栈:是限定仅在表尾进行插入或删除操作的线性表,又可以称为后进先出的线性表. 栈顶:栈的表尾端 栈底:栈的表头端 空栈:不含元素

数据结构——第四章图:01图相关定义

1.图的定义:图是一种网状数据结构,形式化定义如下:图Graph = (V, R),V = {x | x ∈ DataObject},R = {VR},VR = {<x, y> | P(x, y) ∧ (x, y ∈ V)}.集合DataObject中的所有元素具有相同的特性.V中的数据元素通常为顶点(vertex),VR是两个顶点之间关系的集合,P(x, y)表示x和y之间有特定的关系属性P. (1)若<x, y> ∈ VR,则<x, y>表示从顶点x到顶点y的一条弧

数据结构 第4章 串、数组和广义表 单元小结(1)重点 BF算法

BF算法 考试必考 !!!!!背下来!!!! int lndex_BF(string s,string t,int pos) {//返回模式t在主串s中第pos个字符开始第一次出现的位置下标 //若不存在,则返回值为-1 //其中,t非空,1<=pos<=StrLength(s) int i,j; i = pos-1;//下标 j = 0;//下标 while(i<s.length()&&j<t.length()){ if(s[i] == t[j]) { ++i;