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

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

【项目 - 顺序串算法】

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

(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.h见顺序串算法库

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

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

参考:

#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;
}

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

void Invert(SqString &s)

参考:

将字符串中的第一个元素与最后一个元素进行交换,第二个元素与倒数第二个元素进行交换,以此类推,将所有的字符进行交换,最后将字符串反序。

#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;
}

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

void DellChar(SqString &s, char c)

参考:从头到尾扫描s串,对于其值为c的元素采用移动的方式进行删除。

#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;
}

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

SqString CommChar(SqString s1,SqString s2);

参考:对于s1中的每一个字符,查看在s2中是否出现,如果出现,则加到结果字符串中。

#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;
}

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

时间: 2024-10-10 10:29:18

数据结构实践——顺序串算法的相关文章

数据结构实践项目——串

本文针对数据结构基础系列网络课程(4):串. 1. 串的基本概念及导学 2. 串的顺序存储及其基本操作实现 3. 串的顺序存储应用 4. 串的链式存储及其基本操作实现 5. 串的模式匹配(Brute-Force算法) 6. 串的模式匹配(KMP算法) [项目1 - 建立顺序串的算法库] 定义顺序串的存储结构,实现其基本运算,并完成测试. 要求: 1.头文件sqString.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void StrAssign(SqString &s

数据结构实践——置换-选择算法模拟

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

数据结构实践——顺序表应用

[项目 - 顺序表应用] 定义一个采用顺序结构存储的线性表,设计算法完成下面的工作: 1.删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1): 2.将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1). 提示: (1)充分利用前面建立的算法库解决建立顺序表.输出线性表的问题: (2)为保证复杂度的要求,设计算法并用专门的函数实现算法: (3)每项工作写一个程序,并发布博文,展示你的实践成果. [参考解答] (注:项目中所需要的

串的数据结构表——顺序串与链式串

串的结构类似与线性表,只不过串的数据元素是一个字符,即是由零个或多个字符组成的有限序列. 一.串的顺序存储 串的顺序存储结构也就是顺序存储,即串中的字符被依次的存在一组连续的存储单元中,可以类比线性表的顺序存储,可以写出其数据结构如下: typedef struct st { char *ch; //串存放的起始地址,串中第i个字符存储在ch[i-1]中 int length; //串的长度 int strsize; //分配的存储空间的大小,如果不足,在通过realloc()分配增加空间 }s

数据结构实践——顺序表:两集合的交集

[项目 - 求集合并集] 假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员.设计算法,用函数unionList(List LA, List LB, List &LC )函数实现该算法,求一个新的集合C=A∪B,即将两个集合的并集放在线性表LC中. 提示: (1)除了实现unnionList函数外,还需要在main函数中设计代码,调用unionList进行测试和演示: (2)可以充分利用前面建好的算法库[点击-],在程序头部直接加 #incl

数据结构实践——字符串加密

本文针对数据结构基础系列网络课程(4):串实践项目. [项目-字符串加密] 一个文本串可用事先编制好的字符映射表进行加密.例如,设字符映射表为: abcdefghijklmnopqrstuvwxyz ngzqtcobmuhelkpdawxfyivrsj 则字符串"lao he jiao shu ju jie gou"被加密为"enp bt umnp xby uy umt opy". 设计一个程序,实现加密.解密算法,将输入的文本进行加密后输出,然后进行解密并输出.

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

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

数据结构 顺序串笔记

/* 数据结构--串笔记 串:由零个或多个字符组成的有限序列. 串也有两种储存方式,顺序储存和链式储存 1.顺序表示的串--顺序串 一般使用字符型数组储存. 确定串的长度有两种方法.一是:在串的末尾加一个结束标记(在C语言 中系统自动在串值的末尾加一个'\0'作为结束标记 ),再使用 strlen 函数得到串的长度.二是:增加一个变量 len 用来储存串的长度. */ // 顺序串的实现即基本操作 # include <stdio.h> # include <stdlib.h> #

数据结构(十五)串的顺序存储结构(顺序串)

一.串的定义:串(String)是由零个或多个字符组成的有限序列,又名叫字符串. 二.串中的字符数目n称为串的长度,零个字符的串称为空串(null string),它的长度为零.子串在主串中的位置就是子串的第一个字符在主串中的序号. 三.串的大小:首先比较每个字符对应的ASCII码,然后比较长度n. 四.串中关注更多的是查找子串位置.得到指定位置子串.替换子串等操作. 五.串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的.按照预定义的大小,为每个定义的串变量分配一个固定长度的存储