数据结构实践项目——串

本文针对数据结构基础系列网络课程(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-12-31 15:40:09

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

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

本文是[数据结构基础系列(9):排序]课程的实践项目. 本文针对: 1. 排序问题及导学 2. 插入排序之直接插入排序 3. 插入排序之希尔排序 4. 交换排序之冒泡排序 5. 交换排序之快速排序 6. 选择排序之直接选择排序 7. 选择排序之堆排序 8. 归并排序 9. 简单的计数排序 10. 基数排序 11. 各种排序的比较 纸上谈兵:"知原理"检验题目 1.给定序列{57, 40, 38, 11, 13, 34, 48, 75, 6, 19, 9, 7},采用下面的算法,分别描述

数据结构实践项目——图的基本运算及遍历操作

本文是针对[数据结构基础系列(7):图]中第1-9课时的实践项目. 0701 图结构导学 0702 图的定义 0703 图的基本术语 0704 图的邻接矩阵存储结构及算法 0705 图的邻接表存储结构及算法 0706 图的遍历 0707 非连通图的遍历 0708 DFS的应用 0709 BFS的应用 [项目1 - 图基本算法库] 定义图的邻接矩阵和邻接表存储结构,实现其基本运算,并完成测试. 要求: 1.头文件graph.h中定义相关的数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括

数据结构实践项目——查找(一)

本文是[数据结构基础系列(8):查找]课程的第一组实践项目. 本文针对: 0801 查找问题导学 0802 线性表的顺序查找 0803 线性表的折半查找 0804 索引存储结构 0805 分块查找 0806 二叉排序树 0807 二叉排序树(续) 0808 平衡二叉树 纸上谈兵:"知原理"检验题目 [参考(部分)] [参考(1)] 1.对于A[0..10]有序表{12,18,24,35,47,50,62,83,90,115,134} (1)用二分查找法查找 90时,需进行多少次查找可确

数据结构实践项目——查找(二)

本文是[数据结构基础系列(8):查找]课程的第二组实践项目. 本文针对: 9. B-树 10. B+树 11. 哈希表--散列结构 12. 哈希表的运算 13. 拓展:谷歌搜索的数据结构 纸上谈兵:"知原理"检验题目 [参考解答] 1.给定序列{4, 9, 0, 1, 8, 6, 3, 5, 2, 7} (1)创建对应的3阶B-树b,请画出构造过程 (2)从b中分别删除关键字为8和1的节点,画出其过程 2.建立序列{16, 74, 60, 43, 54, 90, 46, 31, 29,

数据结构实践项目——文件

本文是针对[数据结构基础系列(11):文件]中的实践项目. [项目1]操作文件 有若干学生的成绩数据如下,将这些数据保存到st数组中: 学号 姓名 年龄 性别 语文 数学 英语 1 陈华 20 男 78 90 84 5 张明 21 男 78 68 92 8 王英 20 女 86 81 86 3 刘丽 21 女 78 92 88 2 许可 20 男 80 83 78 4 陈军 20 男 78 88 82 7 马胜 21 男 56 67 75 6 曾强 20 男 78 89 82 基于这些数据,编程

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

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

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

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

数据结构 实践项目——数据结构、算法、程序设计

[项目1 - C/C++语言中函数参数传递的三种方式] C语言提供了两种函数参数传递的方式:传值和传地址.在C++中,又拓展了引用方式.通过本项目,确认自己已经掌握了这三种方式的原理,为后续学习做好准备. 下面是希望能够交换两个整型变量的swap函数的三个版本(从课程主页中可以找到项目链接,复制后就能调试,不必费事敲代码): //(1)传值 void myswap(int x, int y) { int t; t=x; x=y; y=t; } //(2)传地址 void myswap(int *

数据结构实践项目——栈

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