【数据结构】串?在计算机中还有这样一种数据结构

news2024/11/18 11:24:45

串的基本概念与基本操作

  • 导言
  • 一、串的定义及其重要术语
    • 1.1 串的定义
    • 1.2 串的重要术语
    • 1.3 ASCII码值
    • 1.4 转义字符
  • 二、串的三要素
    • 2.1 串的逻辑结构
    • 2.2 串的存储结构
    • 2.3 串的运算
  • 结语

封面

导言

大家好,很高兴又和大家见面啦!!!

看到今天的标题,有部分朋友可能会有这样的疑惑——这个串是指的什么?总不可能是羊肉串、牛肉串之类的吧!明人不说暗话,今天咱们要介绍的串这种数据结构说白了就是指的字符串。

今天我们进入了数据结构的一个新的章节,在这个章节中,我们将学习字符串的模式匹配算法
为了更好的了解字符串及其模式匹配算法的内容,我们将会花两个篇章的内容来详细介绍字符串这种数据结构的三要素。

下面我们就开始今天的内容吧!

一、串的定义及其重要术语

字符串简称串,计算机上非数据处理的对象基本都是字符串数据。

1.1 串的定义

串(string)是由零个或多个字符组成的有限序列。一般记为:
S = " a 1 a 2 a 3 … … a n " ( n > = 0 ) S="a_1a_2a_3……a_n"(n>=0) S="a1a2a3……an"(n>=0)
其中,S为串名,在C语言中我们学习的字符串是由双引号串起来的字符序列,这个序列就是S对应的值; a i a_i ai可以是字母、数字或是其他字符;串中字符的个数n称为串的长度。当 n = 0 n=0 n=0时,对应的字符串称为空串,用∅表示。

1.2 串的重要术语

在串中我们需要了解以下术语:

  • 子串:由任意个连续的字符组成的子序列称为该串的子串;
  • 主串:包含子串的串称为主串;
  • 字符在串中的位置:字符串中的某个字符在串中的序号称为字符串在串中的位置;
  • 子串在主串中的位置:子串的第一个字符在主串中的位置;
  • 空串与空格串:由一个或多个空格组成的字符串如S = " "称为空格串,字符串长度为0的字符串称为空串;

单看这些概念可能不太好理解,下面我们以串S = “Hello world!!!” 为例来说明以上的这些概念。

对于字符串∅、“H”、“He”、“Hello”……这些由任意个连续的字符组成的子序列称为该串的子串;
包含这些子串的串也就是S称为主串;
字符’H’在串中的序号是1,字符’w’在串中的序号是7,也就是字符’H’在串中的位置为1,字符’w’在串中的位置为7;
字符串"ell"在主串中第一次出现时第一个字符’e’的位置为2,因此子串"ell"在主串中的位置为2;
对于子字符串" "它是由一个空格组成的字符串,它的长度为1,因此它被称为空格串;
对于空串∅它的字符串长度为0

提到字符串和字符串中的字符,那必然少不了ASCII码值的相关知识点。

1.3 ASCII码值

ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符 1
ASCII码表
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示 1

美国信息交换标准代码是由美国国家标准学会(American National Standard Institute , ANSI )制定的,是一种标准的单字节字符编码方案,用于基于文本的数据。它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,后来它被国际标准化组织(International Organization for Standardization, ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母 1

ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符 1

从上图中不难看出,在ASCII码表中0~31为控制字符,每一种字符都有特定的功能,如换行、回车、换页等;32~127为打印字符,能够在文本中正常打印;而上图中未展示的后128个称为扩展ASCII码。许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。

细心的朋友会在控制字符看到有一些控制字符存在对应的转义字符,下面我们就来继续复习一下转义字符的相关知识点。

1.4 转义字符

在C语言中反斜杠——''这个字符我们将其称为转义序列符,它的作用就是在跟特定的字符组合在一起时将其转换成其它字符,如下表所示:

转义字符释义
\ ?在书写连续多个问号时使用,防止它们被解析成三字符词
\’用于表示一个单引号 ’
\"用于表示一个字符串内部的双引号 "
\\用于表示一个反斜杠,防止它被解释成一个转义序列符
\a警告字符,部分计算机在输出时会有蜂鸣提示音
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd代表1~3个八进制的数字。 如:\130 这里的130为八进制数字,对应的字符为X
\xddx表示的是十六进制数字,dd表示2个十六进制的数字,如:\x30 这里的30为十六进制数字,对应字符为0

转义字符的存在主要是为了能够在文本中展示一些无法正常打印的字符,比如我想在字符串中表示
一个水平制表符,我们在文本中可以通过TAB键来进行操作,但是它也是和空格一样不会被显示出来,这时我们就可以通过它对应的转义字符\t来表示。比如"\thello"在这个字符串中,就是由一个水平制表符和五个小写字母组成,字符串的长度为6,该字符串在屏幕中输出的内容如下所示:
转义字符
大家看到这里应该对转义字符的相关知识点有了一个初步的了解,在转义字符中有几点我们需要注意一下:

  1. 并不是所有字符都有转义字符
  2. 所有的转义字符都是一个字符,其字符长度为1
  3. 由转义序列符和1~3个八进制数字组成的是一个八进制数
  4. 由转义序列符和字符x域两个十六进制数字组成的是一个十六进制数
  5. 转义序列符的作用是将原先字符转换成另一种字符,因此我们可以通过转义序列符将转移序列符转义成一个普通的字符'\'

介绍完了串的基础知识点,下面我们就来依次探讨串这种数据结构的三要素——数据的逻辑结构、数据的存储结构和数据的运算。

二、串的三要素

2.1 串的逻辑结构

串是由零个或多个字符组成的有限序列,一般记为 S = " a 1 a 2 a 3 … … a n " ( n > = 0 ) S="a_1a_2a_3……a_n"(n>=0) S="a1a2a3……an"(n>=0)
从这个定义中,我们不难得到以下信息:

  1. 串中的元素具有相同的数据类型——字符类型
  2. 串是一个有限序列 ( 0 ~ n ) (0~n) (0n)
  3. 串中的元素之间只存在一对一的关系

因此串也是一种线性表串中的元素在逻辑上呈现的是线性结构

2.2 串的存储结构

作为一种线性表,串中的元素在物理上的存储方式同样也是有两种——顺序存储和链式存储。

在之前的学习中我们接触到的字符串实际上就是通过顺序存储实现的串,如下所示:
顺序存储
可以看到此时串中的元素不仅在逻辑上相邻在物理位置上也是相邻的。

通过链式存储实现的串实际上就是数据域为字符类型的链表,如下所示:

//串的存储结构——链式存储
typedef struct LinkString {
	char data;
	struct LinkString* next;
}LString;

对于链表的基本操作,大家都已经很熟悉了,这里我就不再多加赘述了。

2.3 串的运算

串与我们之前学习的线性表在基础操作上还是有很大的区别的,串的基本操作有:赋值、复制、判空、比较、求串长、求子串,串联接、定位、清空、销毁等操作。这些操作对应的函数定义与含义如下所示:

StrAssign(&T, chars);//赋值操作。把串T赋值为chars。
StrCopy(&T, S);//复制操作。由串S复制得到串T。
StrEmpty(S);//判空操作。判断串S是否为空。
StrCompare(S, T);//比较操作。若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0。
StrLength(S);//求串长。返回串S的元素个数。
SubString(&Sub, S, pos, len);//求子串。用Sub返回串S的第pos个字符起长度为len的子串。
Concat(&T, S1, S2);//串联接。用T返回有S1和S2联接而成的新串。
Index(S, T);//定位操作,若主串S中存在于串T值相同的子串,则返回它在主串S中第一次出现的位置;否则函数值为0.
ClearString(&S);//清空操作。将S清为空串。
DestroyString(&S);//销毁串。将串S销毁。

不同的高级语言对串的基本操作集可以有不同的定义方法。在上述定义的操作中,串赋值StrAssign、串比较StrCompare、求串长StrLength、串联接Concat、以及求子串SubString五种操作构成串类型的最小操作子集,即这些操作不可能利用其他串操作来实现;反之,其他串操作(除串清除ClearString和串销毁DestroyString外)均可在该最小操作子集上实现。

结语

在今天的内容中,我们重新学习了串——串是由零个或多个字符组成的有限序列。并介绍了串中的相关术语:主串、子串、字符在串中的位置、子串在主串中的位置、空串和空格串。

之后我们介绍了与字符串相关的知识点——ASCII码值与转义字符。这两个内容都是来帮助我们更好的学习字符串的相关内容。

紧接着我们就从数据结构的三要素介绍了串这种数据结构的逻辑结构、存储结构以及相关运算。经过介绍,我们知道了串也是一种线性结构,并且在内存中和线性表一样既可以通过顺序存储来实现也可以通过链式存储来实现。最后我们简单介绍了串的10种基本操作——赋值、复制、判空、比较、求串长、求子串,串联接、定位、清空、销毁。

通过今天的内容,希望大家能够重新认识串,并且对串的基本操作有一个初步的了解。在下一篇内容中,我们将重点介绍串的基本操作以及如何通过C语言来实现这些基本操作,大家记得关注哦!

如果大家喜欢这篇内容,可以点赞、收藏加评论来支持一下博主哦!当然也可以转发给身边需要的朋友。最后感谢各位的支持,咱们下一篇再见!!!


  1. ASCII ↩︎ ↩︎ ↩︎ ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1637247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手实现一个简约酷美美的版权声明模块

1. 导语 版权声明在很多网站都有用到&#xff0c;出场率还是很高的。所以今天就实现一个属于自己分风格的版权声明模块&#xff0c;技术上采用原生的前端三剑客: HTMLCSSJavaScript(可能会用到) 比如CSDN的版权声明是这样的 2. 需求分析 先看看成品吧&#xff0c;这篇文字结…

初始计算机网络

TCP/IP TCP/IP模型 TCP/IP网络模型&#xff1a;对于不同设备之间的通信&#xff0c;就需要网络通信&#xff0c;而设备是多样性的&#xff0c;所以要兼容多种多样的设备&#xff0c;就协商出了一套通用的网络协议。 TCP/IP分层 这个网络协议是分层的&#xff0c;每一层都有…

向gitee推送项目

步骤很详细&#xff0c;直接上教程 在gitee新建项目并复制链接 在当前项目目录打开git bash 输入以下指令进行初始化 git init配置个人信息 git config --global user.name 你的昵称 git config --global user.email 账号绑定的邮箱 5. 绑定远程仓库地址 git remote add ori…

机器人正反向运动学(FK和IK)

绕第一个顶点可以沿Z轴转动&#xff0c;角度用alpha表示 绕第二个点沿X轴转动&#xff0c;角度为Beta 第三个点沿X轴转动&#xff0c;记作gama 这三个点构成姿态&#xff08;pose&#xff09; 我们记第一个点为P0&#xff0c;画出它的本地坐标系&#xff0c;和世界坐标系一样红…

Java面试八股之Java中数组有没有length()方法?String呢?为什么?

Java中数组有没有length()方法&#xff1f;String呢&#xff1f;为什么&#xff1f; 数组&#xff1a; 数组没有名为length()的方法&#xff0c;但有一个属性叫做length。可以通过数组名直接访问这个属性来获取数组的长度&#xff08;即元素个数&#xff09;。这是一个整数值&…

3-2 STM32c8t6实现流水灯

实物接线如下&#xff1a; 软件代码 #include "stm32f10x.h" // Device header #include "delay.h" int main(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //开启时钟GPIO_InitTypeDef GPIO_InitStructure;GPIO_Init…

中国移动首批12个智算中心节点投产暨移动云智算产品体系正式发布

4月28日&#xff0c;中国移动在苏州隆重举办了2024中国移动算力网络大会。其中&#xff0c;以“智算凌云 慧联九州”为主题的一体化算力网络新基建论坛上&#xff0c;中国移动重磅发布了首批12个智算中心节点投产和智算产品体系。 中国移动响应国家号召&#xff0c;依托算力网络…

深度学习之基于YOLOv5智慧交通拥挤预警检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着城市化进程的加速和人口规模的不断增长&#xff0c;交通拥挤问题日益严重。传统的交通拥挤预警方…

goget配置多个golang 运行环境

一台主机安装多个golang 运行环境 本环境 windows10 为 基础 mac linux也可以按照此方法操作 背景 开发不同的运维工具会用到不同版本的golang&#xff0c;但是开发者不能一直进行重装来处理 &#xff0c;因此 需要一个工具进行golang版本的管理 go管理工具介绍 gvm (Go V…

【报错处理】ib_write_bw执行遇到Couldn‘t listen to port 18515原因与解决办法?

要点 要点&#xff1a; ib默认使用18515端口 相关命令&#xff1a; netstat -tuln | grep 18515 ib_write_bw --help |grep port# server ib_write_bw --ib-devmlx5_1 --port88990 # client ib_write_bw --ib-devmlx5_0 1.1.1.1 --port88990现象&#xff1a; 根因&#xff…

蓝桥杯如何准备国赛?

目录 一、赛前准备 1、如何刷题&#xff0c;刷哪些题&#xff1f; 2、记录&#xff08;主要看个人习惯&#xff09; CSDN博客 写注释 3、暴力骗分 4、从出题人的角度出发&#xff0c;应该如何骗分 二、赛中注意事项 一、赛前准备 1、如何刷题&#xff0c;刷哪些题&…

24.什么是跨域?解决方案有哪些?

为什么会出现跨域问题 存在浏览器同源策略&#xff0c;所以才会有跨域问题。那么浏览器是出于何种原因会有跨域的限制呢。其实不难想到&#xff0c;跨域限制主要的目的就是为了用户的上网安全。 同源策略导致的跨域是浏览器单方面拒绝响应数据&#xff0c;服务器端是处理完毕…

OPC UA与IEC61499 在分布式智能电网中的应用

储能系统的系统架构 CMC &#xff1a;Cell Management Controller 储能设备中的电池芯包与电池均衡系统构成电池模组&#xff0c;国内的电池芯包通常使用被动均衡技术&#xff0c;被动均衡芯片通常通过SPI 接口连接到CMC 控制器&#xff0c;CMC 以单片机为主构建&#xff0c;具…

C语言——单链表实现数据增删查改

一.前言 嗨嗨嗨&#xff0c;我们又见面了。前面我们已经学习了关于数据结构中的顺序表&#xff0c;今天我们来学习数据结构中的单链表。废话不多说让我们直接开始吧。 二.正文 1.1链表的概念 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺…

“云卷数潮”云原生数据库分论坛亮点回顾!

4月29日&#xff0c;2024中国移动算力网络大会“云卷数潮”云原生数据库分论坛在江苏苏州举行。本次论坛不仅是技术交流的盛宴&#xff0c;更是行业发展趋势的风向标。论坛汇聚了众多企业领袖、专家学者及行业精英&#xff0c;共话云原生数据库技术发展&#xff0c;探讨行业最新…

无人机+大载重+长航时:油电混动多旋翼无人机技术详解

多旋翼无人机是一种具有三个及以上旋翼轴的特殊的无人驾驶旋翼飞行器。具有稳定性强、操控简单、勤务性高、价格便宜等优势&#xff0c;因此在市场上的应用非常广泛。此外&#xff0c;利用地面供电的绳系多旋翼通过电缆向多旋翼持续传输电能&#xff0c;可以大大提高多旋翼的空…

QT程序通过GPIB-USB-HS转接线控制数字万用表

1、硬件准备 1.1、数字万用表 型号 &#xff1a;Agilent 34401A 前面图示&#xff1a; 后面图示&#xff1a;有GPIB接口 1.2、GPIB-USB-HS转接线 2、GPIB协议基础了解 2.1、引脚 8条数据线&#xff1a;DIO1 ~ DIO8 5条管理线&#xff1a;IFC、ATN、REN、EOI、SRQ 3条交握线…

2024年五一杯高校数学建模竞赛(C题) 建模解析| 冲击地压危险预测 |小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮200人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;通过滑动平均法解决冲击地压危险预测问题。实现综合建模。独创复杂系统视角&#xf…

Android滑动冲突解决方案面试问题及回答

问题 1: 什么是滑动冲突&#xff1f;在Android开发中常见哪些类型&#xff1f; 答案: 滑动冲突通常发生在多个滑动组件&#xff08;如ScrollView, ListView, ViewPager等&#xff09;嵌套使用时&#xff0c;各个组件对同一个滑动事件的响应发生冲突。常见的类型包括垂直滑动冲…

Flask教程1:flask框架基础入门,路由、模板、装饰器

文章目录 一、 简介二、 概要 一、 简介 Flask是一个非常小的Python Web框架&#xff0c;被称为微型框架&#xff1b;只提供了一个稳健的核心&#xff0c;其他功能全部是通过扩展实现的&#xff1b;意思就是我们可以根据项目的需要量身定制&#xff0c;也意味着我们需要学习各…