• 数据结构:第四章学习小结


    第四章 串 数组 广义表
    一.本章内容小结
    (1)串(字符串)
     1.线性表通常以“单个元素”为操作对象(查找,插入,删除等),而串通常以“串的整体”为操作对象(插入删除子串等)。
     2.串分为顺序存储结构链式存储结构,其中链式存储结构代码为:

    #define CHUNKSIZE 80  //定义的块大小
    typedef struct Chunk{
          char ch[CHUNKSIZE];
          struct CHUNK *next;
    }Chunk;
    typedef struct{
           Chunk *head,*tail;//串的头尾指针
            int length;//串的当前长度
    }LString;

     3.串的模式匹配算法——子串的定位运算(BF算法或KMP算法

    BF算法:最好最坏情况下平均时间复杂度均为O(n+m)

    KMP算法:较BF算法为改良后的算法,模式匹配算法更易操作,其中常见模式匹配算法代码为:

    int index_KMP(SString S,SString T,int pos)
    {
         i = pos;j = 1;
         while(i <= S.length && j <= S.length)//在串尾前比较好
        {
              if(j == 0 || S[i] == T[j]){
                  ++i;++j;//继续比较后继字符
              }
              else j = next[j];//模式串向右移动
         }
          if(j > T[0])  return i - T[0];//匹配成功
          else return 0;//匹配失败
    }

    (2)数组(下标访问元素)

    定义:分为一维数组,二维数组,和多维数组。

    (3)广义表

    是一种递归的线性表结构。

    二、作业心得体会

    本次作业及实践——串的模式匹配和求两整数集合交集

    在书本上学习到了next函数及其修正值的方法,刚开始只用主函数考虑,经常跑不了,有了这个函数就方便多了:

    int* getnext(string T)  //求模式串T的next函数值并放入next数组
    {
        int* next = new int[T.length()];    //动态申请模式串T存储空间 
        int Tl = T.length();
        int i = 0;    // T的下标
        int j = -1;   //按下标比较,所以 j = -1,next[0] = -1;
        next[0] = -1;
        while(i<Tl)//T串未比较到串尾 
        {
            if(j==-1||T[i]==T[j])//若j==-1,或者字符匹配,则进行下一个字符比较,并求出T[i]字符对应的next值
            { //T[i]是后缀,T[j]是前缀 
                ++i;++j;
                next[i]=j;
            }
            else j=next[j];//若字符不匹配,求出字符对应的next值
        }
        return next;//因为是指针函数 ,所以返回next数组首地址 
    
    }

    求交集那道编程题,可能是用熟悉的数组的原因,刚开始在判断交集元素的那个循环体中运行出现了问题,最后将二维的循环写成了同时满足的一条循环体就成功了。

    三、推荐资料或书籍

    具体查看上一条博文推荐,比较适合随时理解章节里常用的算法代码。

    四、目标完成情况 

    上次提到的日常练习敲代码和课前预习都有在逐步实现,虽然暂时还没有做到足够的预习准备,代码也经常不能将以前敲过的一次都没有bug,也偶尔需要查阅课本才能写出算法。但相比以前,我在看题目时,脑子里会开始慢慢有了代码的思路,虽然也许逻辑会不够完整,但自己能感受到自己也有在进步,这一点让自己很开心也希望能坚持下去。

    接下来的目标:对之前几章的作业实践题继续巩固练习敲几遍,课前预习,上课时积极参与讨论和回答问题环节,有问题及时解决并做好记录,方便以后出现同样问题时能及时处理好。

  • 相关阅读:
    Filter
    Servlet
    Maven(Mac)
    SpringMVC 完美解决PUT请求参数绑定问题(普通表单和文件表单)
    Android Bitmap
    Android ContentProvider
    浅谈数据库事务隔离
    开启Spring Initializr个性化之旅
    java浮点型精度丢失浅析
    爬取糗事百科段子
  • 原文地址:https://www.cnblogs.com/heyi-777/p/12827334.html
Copyright © 2020-2023  润新知