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