收藏 分享(赏)

数据结构与算法分析-14.ppt

上传人:hwpkd79526 文档编号:10057239 上传时间:2019-10-02 格式:PPT 页数:33 大小:304.50KB
下载 相关 举报
数据结构与算法分析-14.ppt_第1页
第1页 / 共33页
数据结构与算法分析-14.ppt_第2页
第2页 / 共33页
数据结构与算法分析-14.ppt_第3页
第3页 / 共33页
数据结构与算法分析-14.ppt_第4页
第4页 / 共33页
数据结构与算法分析-14.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、习题课一,1.5 确定下列各程序段的程序步,确定划线语句的执行次数,计算它们的渐近时间复杂度。,习题一(第18页),(1) i=1; k=0;do k=k+10*i; i+; while(i=n-1),答: 划线语句的执行次数为 n-1 。O(n),(2)i=1; x=0; i k(循环次数) 2ido 1 1 21 2 2 22x+; i=2*i; 2k-1 n 2k while (in); 2kn, klog2n, k=log2n,划线语句的执行次数为 log2n。O(log2n),(3) for(int i=1;i=n;i+)for(int j=1;j=i;j+)for (int k=1

2、;k=j;k+)x+;,划线语句的执行次数为 n(n+1)(n+2)/6 。O(n3),(4)x=n;y=0;while(x=(y+1)*(y+1) y+;,2.1 利用线性表类LinearList提供的操作,涉及实现两个集合的交和差运算。,划线语句的执行次数为 。O( ),习题二(第37页),#include #include “seqlist0.h“ #include “conio.h“ template void InterSection(SeqList ,template void Difference(SeqList ,void main() SeqList LA(10),LB(10

3、);for (int i=1;i=8;i+) LA.Insert(i,i);for (i=1;i=3;i+) LB.Insert(i,i+3);InterSection(LA,LB);Difference(LA,LB); ,2.2 (2) 在类LinearList 中增加一个成员函数,将顺序表逆置,实现该函数并分析算法的时间复杂度。不利用类SeqList 提供的操作直接实现。,template void SeqList:Invert() T e;for (int i=0;ilength/2;i+)e=elementsi;elementsi=elementslength-i-1;elements

4、length-i-1=e; ,O(n),2.5 在类SingleList中增加一个成员函数,将单链表逆置运算,直接实现该函数并分析其时间复杂度。,template void SingleList:invert() Node *p=first,*q;first=NULL;while (p) q=p-link;p-link=first;first=p; p=q; ,2.7 单链表中结点按元素值递增链接,在类SingleList中增加一个成员函数,直接实现删除结点值在a至b之间的结点(ab)。,template void SingleList:DeleteAb(T a,T b) Node *p=fi

5、rst,*q=first; while (p 思考结点a和b有没有删除掉?,2.8 设有单循环链表类CircularList,要求在类CircularList中增加一个成员函数,在不增加新结点的情况下,直接实现两个链表合并为一个链表的算法,并分析其时间复杂度。,/ 解法1 template void Merge(CircularList / O(b.length),/ 解法2 template void Merge1(CircularList / O(1) / 思考如果都带有表头结点,怎么办?,习题三(第50页),3.1 设A、B、C、D、E五个元素依次进栈(进栈后可立即出栈),问能否得到下列

6、序列。若能得到,则给出相应的push和pop序列;若不能,则说明理由。 1) A,B,C,D,E 2) A,C,E,B,D 3) C,A,B,D,E 4) E,D,C,B,A 答:2)和3)不能。对2)中的E,B,D而言,E最先出栈则表明,此时B和D均在栈中,由于,B先于D进栈,所以应有D先出栈。同理3)也不能。 (1)能。 push,pop,push,pop,push,pop,push,pop,push,pop (4)能。 push,push,push,push,push,pop,pop,pop,pop,pop,3.2 设计共享栈。,定义一个足够大的栈空间。该空间的两端分别设为两个栈的栈底,

7、用bottom1和bottom2指示,让两个栈的栈顶,用top1和top2指示,都向中间伸展,直到两个栈的栈顶相遇,才会发生溢出。栈空,两栈均空:top1=-1且 top2=n栈满:top1=top2-1,3.9 利用栈可以检查表达式中括号是否配对,试编写算法实现之。 /若不匹配,则返回true,否则返回false /解法一 bool match(char a,int n) SeqStack s(n);char c;for (int i=0;in;i+)if (ai=() s.Push(ai); /判栈满?else if (ai=) if (!s.Empty() s.Pop(); /继续检查e

8、lse return true; /不匹配if (!s.Empty() return true; /不匹配return false; /匹配 ,/解法二 不用栈,用一个字符数组 bool match(char a,int n) char cn;int top=-1;for (int i=0;i-1) stop=0; top-; /继续检查else return true; /不匹配if (top-1) return true; /不匹配return false; /匹配 ,/解法三 不用栈,也不用数组,只用一个计数器top bool match(char a,int n) int top=-1

9、;for (int i=0;i-1) top-; /继续检查else return true; /不匹配if (top-1) return true; /不匹配return false; /匹配 ,3.10 声明并实现链式栈类LinkedStack。 template class LinkedStack: public Stack public:LinkedStack();LinkedStack();virtual bool IsEmpty() const;virtual bool IsFull() const;virtual bool GetTop(T,/构造函数 template Link

10、edStack:LinkedStack() top=NULL; ,/析构函数 template LinkedStack:LinkedStack() Node *q;while (top) q=top-link;delete top;top=q; ,template bool LinkedStack:IsEmpty() const return !top; ,template bool LinkedStack:IsFull() const return false; ,template bool LinkedStack:GetTop(T ,template bool LinkedStack:Pu

11、sh(const T x) Node *q=new Node;q-data=x;q-link=top;top=q;return true; ,template bool LinkedStack:Pop() Node *q=top;if (IsEmpty() coutlink;delete q;return true; ,template void LinkedStack:SetNull() Node *q;while (top) q=top-link; delete top; top=q; ,4.1给出三维数组元素Aijk的存储地址loc(Aijk)。,习题四(第68页),答: 设有三维数组声

12、明为An1n2n3,每个元素占m个存储单元,则loc(Aijk)=loc(A000)+m*(i*n2*n3+j*n3+k),4.5 给出下列稀疏矩阵的行优先和列优先顺序存储的三元组表。,答:,4.6 对题图4-5的稀疏矩阵执行矩阵转置时数组num和k的值。,答:,5.2 设计一个递归算法,实现对一个有序表的顺序搜索。,习题五(第81页),template int SeqList:Search4(const T ,template int SeqList:Sch4(const T ,5.3 画出对长度为12的有序表进行对半查找的二叉判定树,并求等概率搜索时,成功搜索的平均搜索长度 解:1 二叉判

13、定树如下:,成功搜索的平均搜索长度由于第i层有2i个结点,故平均搜索长度为:ASL log2(n+1) /P.77,习题六(第107页),6.2(2)对于三个结点A,B和C,可分别组成多少不同的无序树、有序树和二叉树? 答:(1)无序树:9棵(2)有序树:12棵(3)二叉树:30棵,6.3 (3)高度为h的k叉树的特点是:第h层的节点度为0,其余结点的度均为k。如果按从上到下,从左到右的次序从1开始编号,则:各层的结点是多少?第i层有ki-1个编号为i的结点的双亲的编号是多少?(i-1)/k编号为i的结点的第m个孩子的编号是多少? k(i-1)+m+1编号为i的结点的有有兄弟的条件是什么? 根

14、据和的结果有:i k(i-1)/k-1)+k+1 即: i k (i-1)/k,6.4 设对一棵二叉树进行中序遍历和后序遍历的结果分别为: (1)中序遍历 B D C E A F H G (2)后序遍历 D E C B H G F A 画出该二叉树。 答:,6.5 写出图6-23的遍历结果。先序:ADEHFJGBCK中序:HEJFGDABKC后序:HJGFEDKCBA,6.6(6) 设计算法,交换一棵二叉树中每个结点的左、右子树。,template void BTree:Exch(BTNode *p) if (p)BTNode *q=Exch(p-lchild);p-lchild=Exch(p-rchild);p-rchild=q; ,6.10 将图题6-24中的树转换成二叉树,并将图6-23中的二叉树转换成森林。,6.11 给出对图6-24中的树的先序遍历和后序遍历的结果。答:先序:A,D,E,F,J,G,M,B,L,H,C,K后序:J,G,F,E,D,M,H,L,K,C,B,A,6.14 设S=A,B,C,D,E,F,W=2,3,5,7,9,12,对字符集合进行哈夫曼编码,W为各字符的频率。 (1) 画出哈夫曼树 (2)计算带权路径长度(3) 求各字符的编码A:1010 B:1011 C:100 D:00 E:01 F:11,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报