一、思维导图
二、重要概念
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);
}