• 数据结构小结


    一、思维导图

    二、重要概念

    1.逻辑结构

    1.线性结构

    1.线性结构是n个数据元素的有序(次序)集合。
    2.集合中必存在唯一的一个"第一个元素";
    3.集合中必存在唯一的一个"最后的元素";
    4.除最后元素之外,其它数据元素均有唯一的"后继";
    5.除第一元素之外,其它数据元素均有唯一的"前驱"。

    2.树形结构

    树形结构指的是数据元素之间存在着“一对多”的树形关系的数据结构。

    3.图状结构

    在图结构中任意两个元素之间都可能有关系,也就是说这是一种多对多的关系。

    2.线性表

    1.顺序存储

    1.逻辑上相邻的元素 ai, ai+1,其存储位置也是相邻的;
    2.存储密度高,方便对数据的遍历查找。
    3.对表的插入和删除等运算的效率较差。

    2.链式存储

    1.逻辑上相邻的元素 ai, ai+1,其存储位置也不一定相邻;
    2.存储稀疏,不必开辟整块存储空间。
    3.对表的插入和删除等运算的效率较高。
    4.逻辑结构复杂,不利于遍历。

    3.队列

    为克服顺序队中有可能出现"假溢出"现象,应把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。
    出入队采用数学上的求余运算。
    队首指针+1:q.front = (q.front + 1) % MaxSize
    队尾指针+1:q.rear = (q.rear + 1) % MaxSize
    队列长度:(q.rear+MaxSize-q.front)%MaxSize
    队空判断:r->rear==r->front
    队满判断:(q->rear + 1) % MaxSize == q->front

    三、疑难问题及解决方案

    KMP算法的实现

    void Getnext(int next[],String t)
    {
       int j=0,k=-1;
       next[0]=-1;
       while(j<t.length-1)
       {
          if(k == -1 || t[j] == t[k])
          {
             j++;k++;
             if(t[j]==t[k])
                next[j] = next[k];
             else
                next[j] = k;
          }
          else k = next[k];
       }
    }
    int KMP(String s,String t)
    {
       int next[MaxSize],i=0;j=0;
       Getnext(t,next);
       while(i<s.length&&j<t.length)
       {
          if(j==-1 || s[i]==t[j])
          {
             i++;
             j++;
          }
          else j=next[j];           
       }
       if(j>=t.length)
           return (i-t.length);     
       else
          return (-1);                
    }
    
    
  • 相关阅读:
    .NET C#模仿Windows方式打开指定文件所在的文件夹,并定位到文件【加强版】
    .NET C#执行程序功能时根据Windows用户角色动态提权执行相关业务功能的方法
    .NET C#实现string类型List<T>二分查找算法功能(支持Contains模糊匹配)
    由于定时模块的错误导致系统无法启动
    mongodb执行js命令
    查看mongodb执行命令耗时
    es设置translog保留时间
    mongodb设置开机自启动
    python写数据到elasticsearch
    es查询相关
  • 原文地址:https://www.cnblogs.com/2b-or-not-2b-/p/12587916.html
Copyright © 2020-2023  润新知