浙大远程数据结构与算法离线复习资料-完整版.pdf
《浙大远程数据结构与算法离线复习资料-完整版.pdf》由会员分享,可在线阅读,更多相关《浙大远程数据结构与算法离线复习资料-完整版.pdf(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-浙江大学远程教育学院数据结构与算法课程离线作业数据结构与算法课程离线作业一、填空题:一、填空题:(【序号,章,节】。)【1,1,2】线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多一对多关系,图形结构中元素之间存在多对多多对多关系。【2,1,2】为了最快地存取数据元素,物理结构宜采用序存储序存储结构。3,1,2】数据结构的三要素是逻辑结构,物理结构,操作。【3,1,2】存储结构可根据数据元素在机器中的位置是否一定连续分为顺序存储结构顺序存储结构,链式存储结构链式存储结构。【4,1,3】度量算法效率可通过时间复杂度和空间复杂度时间复杂度和空间复杂度_来进行。【5,1,3】设 n
2、为正整数,下面程序段中前置以记号 的语句的频度是n(n+1)/2n(n+1)/2。for(i=0;in;i+)for(j=0;jn;j+)if(i+j=n-1)aij=0;【6,1,3】设 n 为正整数,试确定下列各程序段中前置以记号的语句的频度:(1)i=1;k=0;whilewhile(i=n-1)i+;k+=10*i;/语句的频度是_ n-1 n-1_。(2)k=0;forfor(i=1;i=n;i+)forfor(j=i;jnext=null Head-next=null_【10,3,2】在一个单链表中 p 所指结点(p 所指不是最后结点)之后插入一个由指针 s 所指结点,应执行 s-
3、next=_ p-next p-next_;和 p-next=_s_的操作。【11,3,2】在一个单链表中删除 p 所指结点时,应执行以下操作:q=p-next;p-data=p-next-data;p-next=p-next-nextp-next-next_;free(q);【12,3,2】带头结点的单循环链表 Head 的判空条件是_ Head-next=null Head-next=null _;不带头结点的单循环链表的判空条件是_ Head=null Head=null_。【13,3,2】已知 L 是带表头结点的非空单链表,且 P 结点既然不首元结点,也不是尾元结点,试从下列提供的答案
4、中选择合适的语句序列。a.删除 P 结点的直接前驱结点的语句序列是_10 12 8 11 4 1410 12 8 11 4 14_。b.删除结点 P 的语句序列是_10 12 7 3 1410 12 7 3 14_。c.删除尾元结点的语句序列是_9 11 3 149 11 3 14_。(1)P=P-next;(2)P-next=P;-(3)P-next=P-next-next;(4)P=P-next-next;(5)while while(P!=NULLNULL)P=P-next;(6)whilewhile(Q-next!=NULLNULL)P=Q;Q=Q-next;(7)while whil
5、e(P-next!=Q)P=P-next;(8)while while(P-next-next!=Q)P=P-next;(9)whilewhile(P-next-next!=NULLNULL)P=P-next;(10)Q=P;(11)Q=P-next;(12)P=L;(13)L=L-next;(14)freefree(Q);【14,3,3】对一个栈,给定输入的顺序是A、B、C,则全部不可能的输出序列有C A BC A B。【15,3,3】.在栈顶指针为 HS 的链栈中,判定栈空的条件是head-next=nullhead-next=null。【16,3,3】下列程序把十进制数转换为十六进制数,
6、请填写合适的语句成分。void conversion10_16()InitStack(&s);scanf(“%d”,&N);while(N)_ Push(s,N%16)Push(s,N%16)_;N=N/16;while(!StackEmpty(s)_ Pop(s,e)Pop(s,e);if(e=9)printf(“%d”,e);else printf(“%c”,e-10+A);/*conversion*/【17,3,4】若用一个大小为 6 个元素的数组来实现循环队列,且当前 rear=0 和 front=3。当从队列中删除一个元素,再加入两个元素后,rear 和 front 的值分别是2和4
7、。【18,3,4】堆栈和队列都是线性表,堆栈是_后进先出后进先出_的线性表,而队列是_-先进先出先进先出_的线性表。【19,3,4】若用一个大小为 6 个元素的数组来实现循环队列,且当前 rear=0 和 front=3。当从队列中删除一个元素,再加入两个元素后,rear 和 front 的值分别是2 和4。【20,4,2】已知一棵树边的集合是,。那么根结点是e e,结点 b 的双亲是d d,结点 a 的子孙有bcdjbcdj,树的深度是4 4,树的度是3 3,结点 g 在树的第3 3层。【21,4,3】从概念上讲,树与二叉树是二种不同的数据结构,将树转化为二叉树的基本的目的是树可采用二叉树的
8、存储结构并利用二叉树的已有算法解决树的有关问题树可采用二叉树的存储结构并利用二叉树的已有算法解决树的有关问题【22,4,3】满三叉树的第 i 层的结点个数为3 3i-1i-1,深度为 h 时该树中共有 3 3h h-1-1结点。【23,4,3】已知一棵完全二叉树有 56 个叶子结点,从上到下、从左到右对它的结点进行编号,根结点为 1 号。则该完全二叉树总共结点有_111_111_个;有_7_7_层;第 91 号结点的双亲结点是_45_45_号;第 63 号结点的左孩子结点是_号。【24,4,3】下列表示的图中,共有_5 5_个是树;有_3 3_个是二叉树;有_2 2_个是完全二叉树。-【25,
9、4,4】n 个结点的二叉排序树的最大深度是n n,最小深度为log2log2+1+1_【26,4,3】如果某二叉树的后序遍历序列是 ABCDEFGHI,中序遍历序列是 ACBIDFEHG,则其先序遍历序列的第一个字母是I I,最后一个字母是G G。【27,4,3】下列二叉树的中序遍历序列是_ DBNGOAEC DBNGOAEC _;后序遍历序列是_ DNOGBECA DNOGBECA _。-【28,5,4】设 HASH 表的大小为 n n(n=10),HASH 函数为 h(x)=x%7,h(x)=x%7,如果二次探测再散列方法 Hi=(H(key)+di)mod 10(di=12,22,32,
10、)解决冲突,在 HASH 表中依次插入关键字1,14,55,20,84,27以后,关键字1、20 和 27 所在地址的下标分别是、_和。插入上述 6 个元素的平均比较次数是。答案:答案:1 1、7 7、5 5、2 2【29,6,3】设无权图 G 的邻接矩阵为 A,若(vi,vj)属于图 G 的边集合,则对应元素Aij等于1 1,22、设无向图 G 的邻接矩阵为 A,若 Aij等于 0,则 Aji等于0 0。【30,6,3】若一个图用邻接矩阵表示,则删除从第i 个顶点出发的所有边的方法是矩阵第矩阵第 i i 行全部置为零行全部置为零。【31,6,2】设一个图G=V,A,V=a,b,c,d,e,f
11、,A=,。那么顶点 e 的入度是2 2;出度是1 1;通过顶点 f 的简单回路有2 2条;就连通性而言,该图是强连通图强连通图图;它的强连通分量有1 1个;其生成树可能的最大深度是5 5。【32,7,1】排序过程一般需经过两个基本操作,它们是比较比较和移动移动。【33,7,2】在对一组关键字是(54,38,96,45,15,72,60,23,83)的记录进行直接插入排序时,当把第七个记录(关键字是 60)插入到有序表时,为寻找插入位置需比较 3 3次-分别与分别与 5454、7272、9696 比较比较【34,7,4】插入排序、希尔排序、选择排序、快速排序、堆排序、归并排序、和基数排序方法中,
12、不稳定的排序方法有选择排序、快速排序、堆排序、希尔排序选择排序、快速排序、堆排序、希尔排序-二、综合题(选自教材数据结构各章习题,采用二、综合题(选自教材数据结构各章习题,采用 wordword 文件格式上传)文件格式上传)【1,1,3】试分析下面一段代码的时间复杂度:if(A B)for(i=0;ii;j-)A+=B;else for(i=0;ii;j-)A+=B;if if 中的时间复杂度为:中的时间复杂度为:O(n*nO(n*n)即即 O(nO(n)elseelse 中的时间复杂度为:中的时间复杂度为:O(n*n)O(n*n)即即 O(nO(n)【2,1,3】测试例 1.3 中秦九韶算法
13、与直接法的效率差别。令f(x)1i1xi/i,计算f(1.1)的值。利用 clock()函数得到两种算法在同一机器上的运行时间。答:从运行结果可以看出秦九昭算法效率上有很大优势;#include#include#include clock_t start,stop;double duration;#define MAXN 10#define MAXK 1e7double f1(int n,double a,double x);double f2(int n,double a,double x);/秦九昭算法double f1(int n,double a,double x)100-/直接算法d
14、ouble f2(int n,double a,double x)int main()printf(直接算法:);printf(ticks=%fn,(double)(stop-start);duration=(double)(stop-start)/CLK_TCK/MAXK;stop=clock();start=clock();for(i=0;iMAXK;i+)f2(MAXN-1,a,1.1);double aMAXN;for(i=0;i0;i-)p+=ai*pow(x,i);int i=0;double p=a0;return p;for(i=n;i0;i-)p=ai-1+x*p;int i
15、=0;double p=a0;-printf(duration=%6.2en,duration);for(i=0;iMAXN;i+)ai=(double)i;start=clock();for(i=0;iMAXK;i+)f1(MAXN-1,a,1.1);stop=clock();printf(秦九昭算法:);printf(ticks=%fn,(double)(stop-start);printf(duration=%6.2en,duration);return 0;【3,1,3】试分析最大子列和算法 1.3 的空间复杂度。答:在 1.4 中存在 4 种解决最大子列的算法,具体空间复杂度如下:1
16、、穷举法:算法并没有开辟另外的存储空间进行存储,利用的是累加所以空间复杂度为 O(2);2、部分穷举:同上3、分而治之:利用递归解决问题,故空间复杂度为 O(N);4、在线处理:为 O(2);【4,1,3】试给出判断N是否为质数的O(N)的算法。答案:#include#include-int is_prime(int n)if(n!=2&n%2=0)return 1;void main()int num=0,result=0;printf(Input the num:);result=is_prime(num);return 0;int i=0;for(i=3;i=sqrt(double)n)
17、;i+=2)if(n%i=0)return 0;scanf(%d,&num);if(result)printf(%d is a primen,num);else printf(%d is not a primen,num);Input the num:55 is a prime.【5,2,2】请编写程序,输入整数n 和 a,输出S=a+aa+aaa+aaa(n 个 a)的结果。答案:答案:-#includestdio.hint main()int a,b,n,i,s=0;scanf(%d%d,&a,&n);b=a;for(i=1;i=n;i+)s+=a;a=a*10+b;printf(%dn,
18、s);【6,2,3】请编写递归函数,输出 123.n 的全排列(n 小于 10),并观察 n 逐步增大时程序的运行时间。答案:#include#include void pailie(int*data,int n,int curr)int i=0;if(curr=n-1)for(i=0;i n;+i)printf(%d,datai);printf(n);else -for(i=curr;i n;+i)int t;t=datacurr,datacurr=datai,datai=t;pailie(data,n,curr+1);t=datacurr,datacurr=datai,datai=t;in
19、t main()int n=0;int i=0;int as10=0,0,0,0,0,0,0,0,0,0;/n小于等于10 scanf(%d,&n);return 0;end=clock();printf(The time was:%dn,(end-start)/CLK_TCK);asi=i+1;for(i=0;i n;+i)clock_t end;clock_t start=clock();pailie(as,n,0);-N 为 7-N 为 9分析来看时间上虽然有比较大的增长,但主要用于打印;但在时间复杂度上是随着n 的变大呈直线上升趋势;【7,3,2】给定一个顺序存储的线性表 L=(a1,
20、a2,an),请设计一个算法-删除所有值大于 min 而且小于 max 的元素。SeqList Delete(SeqList&L,int min,int max)int i;=0,j=0for(i=0;imin&L.elemimax)for(j=i;jL.length;j+)L.elemj=L.elemj+1;-L.length;return L;【8,3,2】给定一个顺序存储的线性表 L=(a1,a2,an),请设计一个算法查找该线性表中最长递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。void main()int n,i,j,k;int
21、 A1024=;int dp1024=;scanf(%d,&n);for(i=1;i=n;i+)scanf(%d,Ai);dp1=1;/有n个阶段for(i=2;i=0;j-)if(AiAj)dpi=max(dpi,dpj+1);int maximum=dp1;for(i=2;i=n;i+)printf(%d maximum is:n,maximum);maximum=max(maximum,dpi);【9,3,3】如果有 1、2、3、4、5 按顺序入栈,不同的堆栈操作(pop,push)顺序可得到不同的堆栈输出序列。请问共有多少种不同的输出序列?为什么?答案:按照正常情况,1,2,3,4,5
22、 的全排列组合共有 5!=120,即 120 种,但由于像:12435、12534 之类的无法按顺序出入栈,故按照顺序入栈的情况共有 56 种:以 1 开始排列组合为 14 种以 2 开始排列组合为 14 种以 3 开始的排列组合为 9 种以 4 开始的排列组合为 4 种以 5 开始的排列组合为 1 种-【10,3,2】请编写程序将中缀表达式转换为后缀表达式。答案:使用栈的循序存储结构实现、栈的顺序存储结构,用一维数组实现#include#include#define OK 1#define ERROR-1#define TRUE 1#define FALSE 0#define MAXSIZE
23、 10typedef int Status;typedef char ElemType;typedef struct ElemType dataMAXSIZE;int top;/栈顶指针Stack;/1.初始化Status InitStack(Stack*S)int i;-for(i=0;idatai=NULL;S-top=-1;return OK;/2.创建一个长度为n的堆栈Status CreateStack(Stack*S,int n)int i=0;if(nMAXSIZE|n1)printf(输入长度有误!n);return ERROR;for(i=0;idatai=rand()%10
24、0+1;S-top=n-1;return OK;Status push(Stack*S,ElemType e)if(MAXSIZE-1=S-top)printf(栈已满n);return ERROR;/栈顶指向的元素有值 +(S-top);S-dataS-top=e;return OK;/4.出栈Status pop(Stack*S,ElemType*e)/将栈顶元素出栈,传给eif(-1=S-top)printf(栈为空!n);return ERROR;-*e=S-dataS-top;-(S-top);return OK;/5.中缀表达式转后缀表达式void MidToFinal(char*
25、mid,char*final)/中缀表达式为middle,要转换成后缀表达式传给last/新建一个栈,来存储符号char e;Stack S;if(OK!=InitStack(&S)printf(初始化栈失败!n);/当带转换的字符串*mid未终止时,循环处理while(*mid)/如果是数字,则直接输出if(*mid=0&*mid=9)*(final+)=*(mid+);continue;else if(*mid=+|*mid=-|*mid=*|*mid=/|*mid=(/输入的是合法运算符号,比较之前是否有更高优先级的符号if(S.top=-1|(=*mid)/当符号栈为空或遇到左括号时,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浙大 远程 数据结构 算法 离线 复习资料 完整版
限制150内