- 18
- 0
- 约3.84千字
- 约 24页
- 2018-08-04 发布于江苏
- 举报
双向链表与循环
第三节 双向链表与循环链表 什么是双向链表? 前面我们学习了线性链表,也称单链表,其每个结点只有一个指针域,由这个指针只能找到结点的后继或前驱,也就是说只能顺着指针单方向进行扫描,这对于某些问题的处理会带来不便。为了弥补单链表的这个缺点,在某些应用中,每个结点设置两个指针,分别指向前驱和后继。如下图所示: 这种结点用C语言结构体定义如下: struct dou_node { 数据成员表; struct dou_node * prev; struct dou_node * next; } 双向链表的删除运算 p↑.prev.↑.next=p↑.next; p↑.next.↑.prev=p↑.prev; 双向链表的插入运算 ①s↑.prev=p↑.prev; ②p↑.prev↑.next=s; ③s↑.next=p; ④ p↑.prev=s; 思考: ① ② ③ ④之间的顺序是否唯一呢? 答案:并非唯一 原理:只要满足下列条件即可: 设A是含指针符号的任意项 那么,A出现在左边的式子必须在含A式子的后面。 实例说明 在上述例子四个式子中,A可以是s↑.prev、 p↑.prev、 p↑.prev↑.next、 s↑.next。而且先后都出现在式子的左边; 下面一个一个分析,分析中发现只有p↑.prev重复出现。因此只要判断这一个即可。 p↑.prev出现在左边是式子是④,含p↑.prev的式子有① ② ,所以根据以上原理可推出: ④式必须在① ② 式后面。 满足这一点的所有序列均可。 循环链表 循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。 因此,从表中任一结点出发均可找到表中其他结点。 上述两种形式的链表结合就是循环双向链表。 第四章 字符串模式匹配算法 什么是模式匹配 在一般的编辑软件中,经常要遇到在一个给定的文本中检测一个特定的字符串的问题,这就是字符串匹配,也称模式匹配。 设P是一个模式字符串(简称模式),其长度为m;s是一个正文字符串(简称正文),其长度为n。通常认为nm。(示例) 简单算法 算法描述: 从正文s和模式p的第一个字符出发,将s和p的字符依次逐个进行比较,如果p中的所有字符均与s中的对应字符匹配,则说明匹配成功;如果在比较过程中发现了一个字符不匹配,则将模式p沿正文s向后移动一个字符的位置,然后再从p的第一个字符开始与中的对应字符逐个进行比较。以此类推,直到匹配成功或到达的末段为止。 算法实现 PROCEDURE ZFQPP(s,p,n,m,flag,i) i=1; j=1; While(i=n-m and j=m ) do If( s[i]=p[j] ) { i=i+1; j=j+1 } Else { i=i-j+2; j=1 } If (jm) return(i-m) else return(0) end 模式匹配的KMP算法 基本思想: 当模式p与正文s进行比较的过程中发现不匹配时,找到一种模式p沿正文s向后移动的规则,以便使得正文s中失去匹配的字符以前的字符不再参与比较,即只从当前失去匹配的字符开始与模式p中的字符继续依次进行比较,并且又不错过模式被发现的机会。 示例: 算法分析 假设正文为‘s1s2……sn’,模式为‘p1p2……pn’,要实现改进算法,也就是要解决下述问题:当匹配过程中产生失配时(即si != pj),模式“向右滑动”可行的距离有多远,换句话说,当正文中第i个字符与模式中第j个字符“失配”时,正文中第i个字符应与模式中哪个字符相比较? 假设此时应与模式中第k个字符继续比较,其中k应具有以下两个性质: 1、kj,因为当失配时必然使模式p向后移,从而导致kj。移的幅度越小,k与j相差越小。 2、k应取所有可能值中的最大值,因为取最大值就意味着移的幅度越小,也就避免错过成功匹配的机会。 根据这个假设,必然使得下式成立: ‘p1p2……pk-1’=‘si-k+1si-k+2……si-1’ (1) 而已经得到的“部分匹配”的结果是: ‘pj-k+1pj-k+2……pj-1’=‘si-k+1si-k+2……si-1’ (2) (2)式的由来是: 当初正文中的第i个字符与模式中的第j个字符失配时,说明两者之前的(j-1)个字符肯定是一样的,而kj,所以前k个字符也是相同的。这就得出(2)式。 由(1)(2)两式便可得: ‘p1p2……pk-1’= ‘pj-k+1pj-k+2……
您可能关注的文档
- 卡耐基成功全集三为人处世哲学1.doc
- 卡耐基成功全集三为人处世哲学2.doc
- 卡耐基成功全集三为人处世哲学4.doc
- 卫生应急知识与能在线培训与测试.docx
- 卫生部甲型H11流感诊治方案(第三版)解读.ppt
- 卫生部核事故和射事故卫生应急预案.doc
- 危房改造方式及传统四合院保护.doc
- 危重病人的营养持与管理.ppt
- 危险品培训讲义 v.pptx
- 即墨故城遗址暨曲山墓群考古遗址公园规划项目.doc
- 统编版2025年春季新版七年级下册历史 第21课 明清时期的科技与文化 教案.docx
- 雅安雨城法院书记员招聘考试真题库2025.docx
- 2026届安徽合肥市高考一模高考语文试卷试题(含答案详解).pdf
- 【专题研究】国内外城市更新研究的最新进展.pdf
- 【专题研究】老旧城区改造居民满意度影响因素研究——以遂宁市老旧城区改造为例.pdf
- 【专题研究】关于旧城空间改造理论与创意设计案例的几点思考.pdf
- 西藏拉萨市高三下学期期末物理备考重点详解.docx
- 泾县法院书记员招聘笔试真题2025.pdf
- 2026年春【苏教版】-六年级数学下册-面积的变化.pptx
- 2026年春【苏教版】-六年级数学下册-7.pptx
原创力文档

文档评论(0)