javascript实现数据结构:串--定长顺序存储表示以及kmp算法实现
2014-04-25 16:52
645 查看
串(string)(或字符串)是由零个或多个字符组成的有限序列。串中字符的数目称为串的长度。零个字符的串称为空串(null string),它的长度为零。
串中任意个连续的字符组成的子序列称为该串的子串。包含子串的串相应地称为主串。通常称字符在序列中的序号为该字符在串中的位置。子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。
只有当两个串的长度相等,并且各个对应位置的字符都相等时才相等。
串有3种机内表示方法:
* 1.定长顺序存储表示
* 2.堆分配存储表示
* 3.串的块链存储表示
定长顺序存储表示:
类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值得字符序列。在串的定长顺序存储结构中,按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区,则可用定长数组来描述。
以下标为0的数组分量存放串的实际长度:
结构图:
View Code
在顺序存储结构中,实现串操作的原操作为“字符串序列的复制”,操作时间复杂度基于复制的字符串序列的长度。
另一操作特点是,如果在操作中出现串值序列的长度超过MAXSTRLEN时,约定用截尾法处理,这种情况不仅在求连接串时可能发生,在串的其他操作中,如插入,置换等也可能发生,克服这个弊病唯有不限定串长的最大长度,即动态分配串值的存储空间。
串中任意个连续的字符组成的子序列称为该串的子串。包含子串的串相应地称为主串。通常称字符在序列中的序号为该字符在串中的位置。子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。
只有当两个串的长度相等,并且各个对应位置的字符都相等时才相等。
串有3种机内表示方法:
* 1.定长顺序存储表示
* 2.堆分配存储表示
* 3.串的块链存储表示
定长顺序存储表示:
类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值得字符序列。在串的定长顺序存储结构中,按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区,则可用定长数组来描述。
以下标为0的数组分量存放串的实际长度:
结构图:
describe('SString tests', function(){ var a = new SString(); var b = new SString(); it('should concat without break strings', function(){ for(var i = 0; i < 4; i++){ a[i + 1] = i + ''; b[i + 1] = i + ''; } a[0] = b[0] = 4; var t = a.concat(b); console.log(a); console.log(b); expect(t[0]).toBe(8); expect(t + '').toBe('01230123'); }); it('should break strings of b', function(){ for(var i = 0; i < 7; i++){ b[i + 1] = i + ''; } b[0] = 7; var t = a.concat(b); console.log(a); console.log(b); expect(t[0]).toBe(10); expect(t + '').toBe('0123012345'); }); it('should break strings of a', function(){ for(var i = 4; i < 10; i++){ a[i + 1] = i + ''; } a[0] = 10; var t = a.concat(b); console.log(a); console.log(b); expect(t[0]).toBe(10); expect(t + '').toBe('0123456789'); }); it('should get substring', function(){ console.log(a); var t = a.substring(1, 10); expect(t + '').toBe('0123456789'); t = a.substring(3, 5); expect(t + '').toBe('23456'); }); });
View Code
在顺序存储结构中,实现串操作的原操作为“字符串序列的复制”,操作时间复杂度基于复制的字符串序列的长度。
另一操作特点是,如果在操作中出现串值序列的长度超过MAXSTRLEN时,约定用截尾法处理,这种情况不仅在求连接串时可能发生,在串的其他操作中,如插入,置换等也可能发生,克服这个弊病唯有不限定串长的最大长度,即动态分配串值的存储空间。
相关文章推荐
- 数据结构--串--定长顺序存储表示
- 数据结构--数组和广义表--数组的顺序存储表示和实现
- (C语言)串定长顺序存储实现(数据结构十二)
- (C语言)串定长顺序存储实现(数据结构十二)
- javascript实现数据结构: 串的块链存储表示
- javascript实现数据结构:串--堆分配存储表示
- javascript实现数据结构:稀疏矩阵的十字链表存储表示
- “串”的定长顺序存储表示的实现
- javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例
- javascript实现数据结构:线性表--简单示例及线性表的顺序表示和实现
- 数据结构-顺序表(2)实验要求以及顺序表的表示与实现
- 数据结构之队列顺序表示与实现1
- 数据结构学习笔记 --- 队列(循环队列-队列的顺序表示和实现)
- 线性表的顺序存储实现(陈越数据结构版)
- 数据结构:数组的顺序存储实现
- 队列的顺序存储和链式表示方法-数据结构学习笔记2.3
- 顺序存储线性表的C++实现——严蔚敏版《数据结构》
- 严蔚敏版数据结构学习笔记(1):线性表的顺序表示和实现
- 数据结构编程笔记十二:第五章 数组和广义表 数组顺序存储的实现
- 线性表的顺序表示以及实现