数据结构实践项目——串

本文针对数据结构基础系列网络课程(4):串

1. 串的基本概念及导学

2. 串的顺序存储及其基本操作实现

3. 串的顺序存储应用

4. 串的链式存储及其基本操作实现

5. 串的模式匹配(Brute-Force算法)

6. 串的模式匹配(KMP算法)

【项目1 - 建立顺序串的算法库】

  定义顺序串的存储结构,实现其基本运算,并完成测试。

  要求:

  1、头文件sqString.h中定义数据结构并声明用于完成基本运算的函数。对应基本运算的函数包括:

void StrAssign(SqString &s,char cstr[]);    //字符串常量cstr赋给串s
void StrCopy(SqString &s,SqString t);   //串t复制给串s
bool StrEqual(SqString s,SqString t); //判串相等
int StrLength(SqString s);  //求串长
SqString Concat(SqString s,SqString t);  //串连接
SqString SubStr(SqString s,int i,int j); //求子串
SqString InsStr(SqString s1,int i,SqString s2); //串插入
SqString DelStr(SqString s,int i,int j) ;   //串删去
SqString RepStr(SqString s,int i,int j,SqString t);     //串替换
void DispStr(SqString s);   //输出串

2、在sqString.cpp中实现这些函数

3、在main函数中完成测试,包括如下内容:

(1)建立串s:abcdefghijklmn和串s1:123

(2)输出串s和s1

(3)输出串s的长度

(4)在串s的第9个字符位置插入串s1而产生串s2

(5)输出串s2

(6)删除串s第2个字符开始的5个字符而产生串s2

(7)输出串s2

(8)将串s第2个字符开始的5个字符替换成串s1而产生串s2

(9)输出串s2

(10)提取串s的第2个字符开始的10个字符而产生串s3

(11)输出串s3

(12)将串s1和串s2连接起来而产生串s4

(13)输出串s4

[参考解答]

【项目2 - 建立链串的算法库】

  定义链串的存储结构,实现串的基本运算,并完成测试。

  具体要求参照项目1。

[参考解答]

【项目3-顺序串算法】

  采用顺序存储方式存储串,实现下列算法并测试:

  (1)试编写算法实现将字符串S中所有值为c1的字符换成值为c2的字符:

void Trans(SqString *&s, char c1, char c2);

  (2)试编写算法,实现将已知字符串所有字符倒过来重新排列。如ABCDEF改为FEDCBA。

void Invert(SqString &s)

  (3)从串s中删除其值等于c的所有字符。如从message中删除’e’,得到的是mssag。

void DellChar(SqString &s, char c)

  (4)有两个串s1和s2,设计一个算法求一个这样的串,该串中的字符是s1和s2中公共字符。所谓公共子串,是由在s1中有,且在s2中也有的字符构成的字符。例s1为”message”,s2为”agent”,得到的公共子串是”eage”。

SqString CommChar(SqString s1,SqString s2);

参考解答

【项目4-字符串加密】

  一个文本串可用事先编制好的字符映射表进行加密。例如,设字符映射表为:

 abcdefghijklmnopqrstuvwxyz
 ngzqtcobmuhelkpdawxfyivrsj

则字符串“lao he jiao shu ju jie gou”被加密为“enp bt umnp xby uy umt opy”。

  设计一个程序,实现加密、解密算法,将输入的文本进行加密后输出,然后进行解密并输出。

参考解答

【项目5 - 计数的模式匹配】

  采用顺序结构存储串,编写一个算法计算指定子串在一个字符串中出现的次数,如果该子串不出现则为0。

提示:无论BF模式匹配算法,还是KMP算法,都是在找到子串substr后就退出了。解决这个问题,要查找完整个字符串,并将出现的次数记下来。改造这两个算法吧。

[参考解答]

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-30 12:01:25

数据结构实践项目——串的相关文章

数据结构实践——顺序串算法

本文针对数据结构基础系列网络课程(4):串实践项目. [项目 - 顺序串算法] 采用顺序存储方式存储串,实现下列算法并测试: (1)试编写算法实现将字符串S中所有值为c1的字符换成值为c2的字符: void Trans(SqString *&s, char c1, char c2); (2)试编写算法,实现将已知字符串所有字符倒过来重新排列.如ABCDEF改为FEDCBA. void Invert(SqString &s) (3)从串s中删除其值等于c的所有字符.如从message中删除'

数据结构实践项目——外部排序

本文是针对[数据结构基础系列(10):外部排序]中的实践项目. [项目-1]置换-选择算法模拟 编敲代码,模拟置换-选择算法生成初始归并段的过程. 设大文件里的记录共同拥有18个: 15 4 97 64 17 32 108 44 76 9 39 82 56 31 80 73 255 68 内存工作区能够容纳5个记录.输出产生的归并段文件. 在模拟中.输入文件数据和输出的归并段数据均直接置在内存中就可以. [參考解答] [项目2]败者树归并模拟 编敲代码,模拟改者树实现5路归并算法的过程. 设有5

数据结构实践项目——最短路径和拓扑序列

本文是针对[数据结构基础系列(7):图]的第2组实践例程. (程序中graph.h是图存储结构的"算法库"中的头文件,详情请单击链接-) 0710 生成树的概念 0711 最小生成树的普里姆算法 0712 最小生成树的克鲁斯卡尔算法 0713 从一个顶点到其余各顶点的最短路径 0714 每对顶点之间的最短路径 0715 拓扑排序 0716 AOE网与关键路径 纸上谈兵:"知原理"检验题目 1.针对下面的图1: (图1) (1)写出图的邻接矩阵: (2)按照Prim算

数据结构实践项目——树和二叉树(1)

本文针对[数据结构基础系列(6):树和二叉树]第1-10课时 1 树结构导学 2 树的基本概念 3 树的基本术语 4 树的性质 5 树的存储结构 6 二叉树概念和性质 7 二叉树与树.森林之间的转换 8 二叉树的存储结构 9 二叉树的基本运算及其实现 10 二叉树的遍历 [项目1 - 二叉树算法库] 定义二叉树的链式存储结构,实现其基本运算,并完成测试. 要求: 1.头文件btree.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void CreateBTNode(BT

数据结构实践项目——顺序表

[项目1 - 顺序表的基本运算] 领会"0207将算法变程序"部分建议的方法,将顺序表部分的算法变成程序. 实现顺序表基本运算有算法(对应视频0204创建线性表的实现和0205顺序表基本运算的实现),依据"最小化"的原则进行测试.所谓最小化原则,指的是利用尽可能少的基本运算,组成一个程序,并设计main函数完成测试. 作为第一个这种类型的实践(后续每一部分均有这种实践,这是我们学习的基础,也是实践成果积累的基础),结合相关的算法,给出建议的过程: (1)目的是要测试

数据结构实践项目——数组和广义表

本文针对 [数据结构基础系列网络课程(5):数组和广义表] 1. 数组的基本概念与存储结构 2. 特殊矩阵的压缩存储 3. 稀疏矩阵的三元组表示 4. 稀疏矩阵的十字链表表示 5. 广义表 6. 广义表的存储结构及基本运算的实现 [项目1 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王.输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号

数据结构实践项目——队列

本组项目针对<数据结构基础系列(3):线性表>中的7-12课: 7.队列的定义 8. 顺序队的存储及基本操作 9. 环形队列的存储及基本操作 10. 队列的链式存储结构及其基本运算的实现 11. 队列的应用-迷宫问题 12. 双端队列 [项目1 - 建立顺序环形队列算法库] 定义顺序环形队列存储结构,实现其基本运算,并完成测试. 要求: 1.头文件sqqueue.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void InitQueue(SqQueue *&q

数据结构实践项目——树和二叉树(2)

本文针对数据结构基础系列(6):树和二叉树第7, 11-15课时 7 二叉树与树.森林之间的转换 11 二叉树遍历非递归算法 12 层次遍历算法 13 二叉树的构造 14 线索二叉树 15 哈夫曼树 [项目1 - 二叉树算法验证] 运行并重复测试教学内容中涉及的算法.改变测试数据进行重复测试的意义在于,可以从更多角度体会算法,以达到逐渐掌握算法的程度.使用你的测试数据,并展示测试结果,观察运行结果,以此来领会算法. (1)层次遍历算法的验证 [参考链接] (2)二叉树构造算法的验证 [参考链接]

数据结构实践项目——栈

本组项目针对<数据结构基础系列(3):线性表>中的1-6课: 1 "栈和队列"导学 2 栈的定义 3 栈的顺序存储结构及其基本运算实现 4 栈的链式存储结构及其基本运算的实现 5 栈的应用1-表达式求值 6 栈的应用2-迷宫问题 [项目1 - 建立顺序栈算法库] 定义顺序栈存储结构,实现其基本运算,并完成测试. 要求: 1.头文件sqstack.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void InitStack(SqStack *&