数据结构小结

一、思维导图

二、重要概念

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

posted @ 2020-03-28 16:17  烟雨萧煜  阅读(63)  评论(0编辑  收藏  举报