DS博客作业-(前五章知识略总)



一、思维导图

二、重点解析

1.要分清逻辑结构和存储结构

逻辑结构是从具体问题抽象出来的数学模型,它可以分为以下几类:集合、线性结构、树形结构,线性表就是典型的线性结构。存储结构是逻辑结构在计算机中的存储实现,它有顺序存储结构、链式存储结构、索引存储结构、哈希存储结构。

2.栈和队列的比较

栈和队列都是操作受限制的线性表。

栈是限定在表尾进行插入和删除的线性表。允许操作的一段称为栈顶,另一端为栈底,不含任何数据元素的栈称为空栈。栈的主要特点是“先进后出”(Last In First Out,LIFO),其操作示意图:


队列是限制为仅允许在表的一段进行插入操作(队尾),而在表的另一端进行删除操作(队头)的线性表。栈的主要特点是“先进先出”(First In First Out,FIFO),其操作示意图:

3.串结构与线性表结构的比较

串是由零个或多个字符组成的有限序列。在逻辑结构上,串和线性表极为相似,区别仅在串的数据对象只为字符集;在基本操作上,串和线性表有很大的区别,线性表大多是以“单个元素”作为操作对象,而串通常以“串的整体”作为操作对象。

三、疑难点解析

串的模式匹配

KMP算法

KMP算法与BF算法先比有较大的改进,主要消除了主串指针的回溯,某种程度上使算法效率提高。

子串的next[j]数组

next[j]数组求法意义其实是j-1的字符中,有最前面和最后面的长度为k-1的两段相等,k即为next数组的值。

改进的nextval[j]数组值

改进后的KMP算法,是对原KMP算法next数组话存在的缺陷进行进一步优化。

在求出next[j]的基础上求nextval[j]: 将j的next[j]对应的子串的值与此时j对应的值比较,如果相同,那就看对应子串值的next值的对应的值又比较,如果不同,则对应子串的next值作为该j值得nextval值,如果相同,继续往下比较,直到不同。

posted @ 2020-03-28 19:32  AJAJAJAJAJAJ  阅读(148)  评论(0编辑  收藏  举报