数据结构之串与数组

关于串:串是由零个或多个字符组成的有限序列,它的逻辑结构与线性表极为相似,可看作是一种特殊的线性表。
串的元素序号从0开始。

相关概念:
1.串的长度——串中所包含的字符个数;
2.空串——长度为0的串;
在C语言中,串一般使用不可显示的字符‘\0’作为串的结束符。
3.子串——串中任意个连续的字符组成的子序列称为串的子串;包含子串的串称为主串。(个人认为数据结构中的串有点类似数学中的集合,子串即集合中的子集。串的基本操作通常以子串为操作对象,而非其中的单个元素。)
子串的第一个字符在主串中的序号称为子串在主串中的位置。
4.串常量和串变量:常量在程序中只能被引用,而不能改变它们的值;变量的值可以改变,用名字来识别。

串的基本操作:
(1).赋值——StrCopy(S1,S2): 将串S2的值赋给串变量S1。S2既可以是串变量,也可以是串常量
(2).连接——StrCat(S1,S2): 将串S2放在串S1的末尾,组成新串S1。
(3).求串长——StrLen(S1): 求S1的长度。
(4).求子串——SubStr(S1,i,j): 取出的子串长度为j,从i字符开始。0 <= i <= StrLen(S1)-1,0 <= j <= StrLen(S1)-i。
———利用求子串和连接运算可以完成对串的插入、删除和修改。
(5).比较串的大小——StrCmp(S1,S2): 比较S1和S2的大小,函数值为一个整数i。i>0,则S1>S2; i<0,则S1<S2; i=0,则 S1=S2。比较方式:从第一个字符开始,逐个比较相应字符,直到找到两个不相等的字符,然后根据ASCⅡ码比较这两个字符的大小,比较结果即为串的大小比较结果。
(6).插入——StrInsert(S1,i,S2): 表示把串S2插入到S1的i位置处,操作结束后,S2的第一个元素在新形成的串S1中的元素序号为i。注意:i 必须小于S1的长度,S1的存储空间必须足够大。
(7).删除——StrDelete(S1,i,j): 从串S1中删除位置 i 及以后的连续 j 个字符。
(8).索引——StrIndex(S1,S2): 在S1中查找S2,若有,函数值为S2首字符所在的位置序号;若无,函数值为-1.
(9).置换——Replace(S1,i,j,S2): 用S2置换S1中位置 i 字符开始的连续 j 个字符。

串的存储结构:串有三种存储结构,分别是顺序存储、链式存储和索引存储,将在下一篇博客中详细介绍。

一、填空题(每空1分,共20分) 1. 不包含任何字符(长度为0)的串 称为空串; 由一个或多个空格(仅由空格符)组成的串 称为空白串。 (对应严题集4.1①,简答题:简述空串和空格串的区别) 2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的字符定位的位置为 3 。 4. 子串的定位运算称为串的模式匹配; 被匹配的主串 称为目标串, 子串 称为模式。 5. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第 6 次匹配成功。 6. 若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为 (n-m+1)*m 。 7. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为 288 B ;末尾元素A57的第一个字节地址为 1282 ;若按行存储时,元素A14的第一个字节地址为 (8+4)×6+1000=1192 ;若按列存储时,元素A47的第一个字节地址为 (6×7+4)×6+1000)=1276 。 8. 〖00年计算机系考研题〗设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 9188 。 答:考虑0行0列,(58列×61行+32行)×2字节+基址2048=9188?? 9. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素 的 行下标 、 列下标 和 元素值 。 10.求下列广义表操作的结果: (1) GetHead【((a,b),(c,d))】=== (a, b) ; //头元素不必加括号 (2) GetHead【GetTail【((a,b),(c,d))】】=== (c,d) ; …………………………
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值