数据结构上机实践第八周项目3-顺序串算法

简介: 数据结构上机实践第八周项目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);

本次实践所用到的顺序串的算法库点击此处参考(sqString.cpp、sqString.h)

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

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

//*Copyright  (c)2017,烟台大学计算机与控制工程学院*           
//*All rights reservrd.*           
//*文件名称 :main.cpp*           
//*作者:田长航*        
//*完成时间:2017年10月19日*            
//*版本号:v1.0*        
//*问题描述:算法库测试函数*           
//*输入描述:无*           
//*程序输出:测试结果*
#include <stdio.h>
#include "sqString.h"
void Trans(SqString &s, char c1, char c2)
{
    int i;
    for (i=0; i<s.length; i++)
        if (s.data[i]==c1)
            s.data[i]=c2;
}
int main()
{
    SqString s;
    StrAssign(s, "messages");
    Trans(s, 'e', 'a');
    DispStr(s);
    return 0;
}

运行结果截图如下:

2018122814580746.png

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

void Invert(SqString &s)

//*Copyright  (c)2017,烟台大学计算机与控制工程学院*           
//*All rights reservrd.*           
//*文件名称 :main.cpp*           
//*作者:田长航*        
//*完成时间:2017年10月19日*            
//*版本号:v1.0*        
//*问题描述:算法库测试函数*           
//*输入描述:无*           
//*程序输出:测试结果*
#include <stdio.h>
#include "sqString.h"
void Invert(SqString &s)
{
    int i;
    char temp;
    for (i=0; i<s.length/2; i++)
    {
        temp = s.data[i];
        s.data[i]=s.data[s.length-i-1];
        s.data[s.length-i-1] = temp;
    }
}
int main()
{
    SqString s;
    StrAssign(s, "abcdefg");
    Invert(s);
    DispStr(s);
    return 0;
}

运行结果截图如下:

2018122814580746.png

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

void DellChar(SqString &s, char c)

//*Copyright  (c)2017,烟台大学计算机与控制工程学院*           
//*All rights reservrd.*           
//*文件名称 :main.cpp*           
//*作者:田长航*        
//*完成时间:2017年10月19日*            
//*版本号:v1.0*        
//*问题描述:算法库测试函数*           
//*输入描述:无*           
//*程序输出:测试结果*
#include <stdio.h>
#include "sqString.h"
void DellChar(SqString &s, char c)
{
    int k=0, i=0;   //k记录值等于c的字符个数
    while(i<s.length)
    {
        if(s.data[i]==c)
            k++;
        else
            s.data[i-k]=s.data[i];
        i++;
    }
    s.length -= k;
}
int main()
{
    SqString s;
    StrAssign(s, "message");
    DellChar(s, 'e');
    DispStr(s);
    return 0;
}

运行结果截图如下:

2018122814580746.png

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

SqString CommChar(SqString s1,SqString s2);

//*Copyright  (c)2017,烟台大学计算机与控制工程学院*           
//*All rights reservrd.*           
//*文件名称 :main.cpp*           
//*作者:田长航*        
//*完成时间:2017年10月19日*            
//*版本号:v1.0*        
//*问题描述:算法库测试函数*           
//*输入描述:无*           
//*程序输出:测试结果*
#include <stdio.h>
#include "sqString.h"
SqString CommChar(SqString s1,SqString s2)
{
    SqString s3;
    int i,j,k=0;
    for (i=0; i<s1.length; i++)
    {
        for (j=0; j<s2.length; j++)
            if (s2.data[j]==s1.data[i])
                break;
        if (j<s2.length)            //s1.data[i]是公共字符
        {
            s3.data[k]=s1.data[i];
            k++;
        }
    }
    s3.length=k;
    return s3;
}
int main()
{
    SqString s1, s2, s;
    StrAssign(s1, "message");
    StrAssign(s2, "agent");
    s = CommChar(s1, s2);
    DispStr(s);
    return 0;
}

运行结果截图如下:

2018122814580746.png

相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
70 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
存储 算法 C语言
通义灵码在考研C语言和数据结构中的应用实践 1-5
通义灵码在考研C语言和数据结构中的应用实践,体验通义灵码的强大思路。《趣学C语言和数据结构100例》精选了五个经典问题及其解决方案,包括求最大公约数和最小公倍数、统计字符类型、求特殊数列和、计算阶乘和双阶乘、以及求斐波那契数列的前20项和。通过这些实例,帮助读者掌握C语言的基本语法和常用算法,提升编程能力。
64 4
|
1月前
|
机器学习/深度学习 存储 缓存
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
文章主要介绍了排序算法的分类、时间复杂度的概念和计算方法,以及常见的时间复杂度级别,并简单提及了空间复杂度。
26 1
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
|
1月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
33 4
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
56 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
1月前
|
搜索推荐 算法
数据结构与算法学习十四:常用排序算法总结和对比
关于常用排序算法的总结和对比,包括稳定性、内排序、外排序、时间复杂度和空间复杂度等术语的解释。
20 0
数据结构与算法学习十四:常用排序算法总结和对比
|
1月前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
30 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
|
1月前
|
机器学习/深度学习 算法 数据建模
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
30 0
|
1月前
|
机器学习/深度学习 搜索推荐 算法
探索数据结构:初入算法之经典排序算法
探索数据结构:初入算法之经典排序算法
|
1月前
|
存储
探索数据结构:单链表的实践和应用
探索数据结构:单链表的实践和应用
下一篇
无影云桌面