严蔚敏版数据结构学习笔记(5):串
来源:互联网 发布:手机淘宝申请账号注册 编辑:程序博客网 时间:2024/06/03 16:47
串(string),由字面意思理解就知道是和字符串有关的一种数据结构,它是由零个或者多个字符组成的有限序列,一般记为
s = ‘a1a2a3……an’(n>=0);
其中s为串名,用单引号括起来的字符序列是串的值,ai可以是字母,数字,或者是其他字符;
只有两个串的值相等才能称两个串是相等的,串值必须要用两个单引号括起来,但是单引号并不包含在串中,单引号的作用只是避免与变量名或者数的常量混淆。
由多个空格组成的串‘ ’称为 空格串,空串用Φ表示空串。
整体来看串的逻辑结构和线性表非常像,但是操作确实有很大的区别的,串的操作里,通常用串的整体作为操作对象。比如在串中查找一个子串,求取一个子串,在串的某个位置上插上一个子串,以及删除一个子串等。
int Index(SString S, SString T, int pos) { // 算法4.1 // T为非空串。若主串S中第pos个字符之后存在与T相等的子串, // 则返回第一个这样的子串在S中的位置,否则返回0 int n,m,i; SString sub; if (pos > 0) { n = StrLength(S); m = StrLength(T); i = pos; while (i <= n-m+1) { SubString (sub, S, i, m); if (StrCompare(sub,T) == 0) ++i; else return i; } // while } // if return 0; }
串的表示方法有三种:定长顺序存储表示,堆分配存储表示,块链式存储表示;
定长顺序存储表示,类似线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列;
#define MAXSTRLEN 255typedef unsigned char SString[MAXSTRLEN+1];//0号单元存放串的长度
串的实际长度可以在预定义的长度里面任意定义,超出的部分的串值将被舍去,称为“截断”;
如果要将两个串连接,有三种情况:1,S[1]和S[2]的长度和都不超过MAXSTRLEN;2,S[1]和S[2]的长度和大于MAXSTRLEN但是S[1]的长度小于MAXSTRLEN;3,S[1]的长度大于MAXSTRLEN。那么在联结两个串的时候就要考虑这三种不同的情况。
Status Concat(SString &T, SString S1, SString S2) { // // 用T返回由S1和S2联接而成的新串。若未截断,则返回TRUE,否则FALSE。 int i; Status uncut; if (S1[0]+S2[0] <= MAXSTRLEN) { // 未截断 for (i=1; i<=S1[0]; i++) T[i] = S1[i]; for (i=1; i<=S2[0]; i++) T[i+S1[0]] = S2[i]; T[0] = S1[0]+S2[0]; uncut = TRUE; } else if (S1[0] < MAXSTRLEN) { // 截断 for (i=1; i<=S1[0]; i++) T[i] = S1[i]; for (i=S1[0]+1; i<=MAXSTRLEN; i++) T[i] = S2[i-S1[0]]; T[0] = MAXSTRLEN; uncut = FALSE; } else { // 截断(仅取S1) for (i=0; i<=MAXSTRLEN; i++) T[i] = S1[i]; uncut = FALSE; } return uncut;} // Concat
还有一个重要的操作就是求子串的操作:
Status SubString(SString &Sub, SString S, int pos, int len) { // 用Sub返回串S的第pos个字符起长度为len的子串。 // 其中,1≤pos≤StrLength(S)且0≤len≤StrLength(S)-pos+1。 int i; if (pos < 1 || pos > S[0] || len < 0 || len > S[0]-pos+1) return ERROR; for(i=1; i<=len; i++) Sub[i] = S[pos+i-1]; Sub[0] = len; return OK;} // SubString
堆分配存储表示,这种存储表示的特点是,任然用一组连续的存储单元来存放串值字符序列,但是他们的存储空间是在程序执行的过程中动态分配来的。
//串的堆分配存储表示typedef struct{ char *ch;//若是非空串,则按照串长分配存储区,否则ch为NULL int length;//串长度}Hstring;
(未完待续)
阅读全文
0 0
- 严蔚敏版数据结构学习笔记(5):串
- 数据结构学习笔记:串
- 数据结构学习笔记5
- 严蔚敏版数据结构学习笔记(3):栈
- 严蔚敏版数据结构学习笔记(4):队列
- 数据结构学习笔记5(栈)
- 数据结构学习笔记(1) 数据结构概论
- 【学习笔记----数据结构08-串】
- 《大话数据结构》--学习笔记5
- 数据结构学习笔记(一)
- 学习笔记:数据结构(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(二)
- 数据结构学习笔记(三)
- 数据结构学习笔记(一)
- 数据结构学习笔记(二)
- 数据结构学习笔记 (一)
- Android应用内在线查看PDF文件
- Eclipse中找到当前文件在硬盘中的位置
- ListView
- php调用类中属性和函数的常用方法->_=>_::_$this->
- eclipse调试debug时找不到源码source not found
- 严蔚敏版数据结构学习笔记(5):串
- Activiti(工作流)如何关联业务表
- android笔记:长按APP图标弹出快捷方式(shortcuts)
- win和Linux间的文件传输:rz和sz的安装
- 基于nodeJS爬虫
- bootstrap validate表单验证
- 冒泡排序
- TiDB 在 360 金融贷款实时风控场景应用
- 冒泡排序