数据结构部分习题解答剖析.docVIP

  • 45
  • 0
  • 约4.18千字
  • 约 8页
  • 2017-06-07 发布于湖北
  • 举报
数据结构部分习题解答剖析

习题二 2-4、以下声明有什么错误?为什么? template class T bool SeqListT::operator==(SeqListT list) //比较两个顺序表对象是否相等 { return this-count==list.count this-element==list.element; } 【答】在深拷贝的含义下,两个顺序表相等意味着:两个顺序表长度相同且所有元素值相等。而不是两个顺序表对象的所有成员变量值对应相等。 比较两个顺序表对象是否相等的多种情况如图2.4所示,函数实现见教材第40页。 比较两个顺序表对象是否相等顺序表的深拷贝(顺序表元素是指针或引用类型) 2-5、已知结点类NodeT有数据域data和指针域next,写出下列数据结构的声明。 【答】table可声明为数组或顺序表。 (a)元素为结点指针或单链表对象,声明为以下之一: NodeT* table[N]; //一维静态数组,元素为结点指针 NodeT **table; //一维动态数组,元素为结点指针 SinglyListT *table; //一维动态数组,元素为单链表对象 SeqListNodeT* table; //顺序表,元素为结点指针 SeqListSinglyListT table; //顺序表,元素为单链表对象 (b)元素为结点,声明为以下之一: NodeT table[N]; //一维静态数组,元素为结点 NodeT *table; //一维动态数组,元素为结点 SeqListNodeT table; //顺序表,元素为结点 、oubleNode类能否继承单链表结点类Node?为什么? 【答】不能。因为,如果DoubleNode类声明如下,继承单链表结点类Node。 template class T class DoubleNode : public NodeT //双链表结点类,继承单链表结点类 { DoubleNodeT *prev; //指向前驱结点的指针域 }; 该类声明没有语法错,但语义不对,因为next类型为NodeT,next指向双链表结点,类型是DoubleNodeT。template class T class DoubleNode //双链表结点类 { T data; //继承基类的成员变量 NodeT *next; //继承基类的成员变量,数据类型错误 DoubleNodeT *prev; }; 习题三 3-7、Brute-Force模式匹配算法的主要特点是什么?算法思路是怎样的?给出最好情况和最坏情况及其时间复杂度。 【答】Brute-Force是一种带回溯的模式匹配算法,它将目标串中所有长度为m的子串依次与模式串匹配,如果一次匹配失败,则模式串再与目标串的下一个子串匹配。 Brute-Force算法最好情况下的时间复杂度是O(m),最坏情况下的时间复杂度是O(m×n)。 3-8、已知target=aaabaaab、pattern=aaaa,画出采用Brute-Force算法的模式匹配过程,给出比较结果、子串匹配次数和字符比较次数。 【答】比较结果:匹配不成功,匹配子串位置为-1;子串匹配5次,字符比较14次。 模式串aaaa的Brute-Force算法模式匹配过程 3-9、已知target=abcababcabababcababc,pattern=ababcababc,求模式串改进的next数组,画出KMP算法模式匹配过程,给出比较结果,以及子串匹配次数和字符比较次数。 本题目的:理解改进next数组的next[j]=next[k]。 【答】比较结果:匹配成功,匹配子串位置为10;子串匹配3次,字符比较21次。 模式串ababcababc的next数组 j 0 1 2 3 4 5 6 7 8 9 模式串 a b a b c a b a b c 中最长相同的前后缀子串长度k (1 0 0 1 2 0 1 2 3 4 与比较 ≠ = = ≠ = = = = = nex

文档评论(0)

1亿VIP精品文档

相关文档