当前位置:文档之家› 南邮_数据结构作业答案讲解全解

南邮_数据结构作业答案讲解全解

2018/10/25 1
(3) for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) for (int k=1;k<=j;k++) x++; 划线语句的执行次数为n(n+1)(n+2)/6 ,渐近时间复杂度为O(n3)
(4)x=n;y=0; while(x>=(y+1)*(y+1)) y++; 划线语句的执行次数为 n1/2 ,渐近时间复杂度为O(n1/2)
2018/10/25
7
3-1. 设A,B,C,D,E五个元素依次进栈(进栈 后可立即出栈),问能否得到下列序列。若能得到 ,则给出相应的push和pop序列;若不能,则说 明理由。 (3)C,A,B,D,E (3)不能得到该序列,在C出栈时,A和B在栈中 ,A比B先进栈,所以B应比A先出栈。
2018/10/25
0 3 2 6 2 8 3 10 4 7 4 9
4.7 求对题图4-1的稀疏矩阵执行矩阵转置时数组 num[]和k[]的值。
col num[col] k[col]
2018/10/25
0 1 0
1 0 1
2 2 1
3 1 3
4 2 4
14
第六章 习题讲解
6-2. 对于三个结点A,B和C,可分别组成多少不同 的无序树、有序树和二叉树?
2018/10/25 4
2-12.设计一个算法,将单链表中结点以逆序排列。逆序的 单链表中的结点均为原表中的结点。 Node* pInvert(Node* first) { Node *p=first, *q; first=NULL; while (p) { q=p->Link; p->Link=first; first=p; p=q; } return first; }
8
3-1. 设A,B,C,D,E五个元素依次进栈(进栈 后可立即出栈),问能否得到下列序列。若能得到 ,则给出相应的push和pop序列;若不能,则说 明理由。 (4)E,D,C,B,A (4)能得到该序列。 相应的push和pop序列为:push(A); push(B); push(C); push(D); push(E); pop(); pop(); pop(); pop(); pop();
加权路径长度:WPL=(2+3)×4+5×3+(7+9+12)×2=91
2018/10/25 23
7-4为什么说对半搜索算法只适用于顺序有序表的 情况?为什么说顺序搜索可用于顺序表和链表, 也不受表的有序性限制? 解: 1、对半搜索算法必须针对顺序存储的有序表,要 求满足两个条件: 1)顺序存储,只有顺序存储才可以根据元素下 标(地址)随机存取元素; 2)有序存储,只有有序存储才可以其实现对半 查找。 2、顺序搜索从头到尾逐个查找,所以可用于顺序 表和链表,也不受表的有序性限制。
2018/10/25 21
6-13. 将上图中的树转换成二叉树,并将下图中的二 叉树转换成森林。
2018/10/25
22
6-18. 设S={A,B,C,D,E,F},W={2,3,5,7,9,12}, 对字符集合进行哈夫曼编码,W为各字符的频率 (1)画出哈夫曼树 (2)计算带权路径长度 (3)求各字符的编码 A: B: C: D: E: F: 1010 1011 100 00 01 11
第一章 习题讲解
1-19.确定下列各程序段的程序步,确定划线语句的执行次 数,计算它们的渐近时间复杂度。 (1) i=1; k=0; do { k=k+10*i; i++; } while(i<=n-1) 划线语句的执行次数为 n-1 ,渐近时间复杂度为O(n) (2)i=1; x=0; do{ x++; i=2*i; } while (i<n); 划线语句的执行次数为 log2n ,渐近时间复杂度为O(log2n)
37 25 45 91 76 56
14
建成的二叉树
2018/10/25
65
26
8-1 建立37,45,91,25,14,76,56,65为输入 时的二叉搜索树,再从该树上依次删除76,45,则 树形分别如何?
2018/10/25
20
(4)设计算法,交换一棵二叉树中每个结点的 左、右子树。
void ExchBt(BTree Bt) { Exch(Bt.Root); } void Exch(BTNode *p) { if (p) { BTNode *q=p->LChild; p->LChild=p->RChild; p->RChild=q; Exch(p->LChild); Exch(p->RChild); } }
2018/10/25
6
第三章 习题讲解
3-1. 设A,B,C,D,E五个元素依次进栈(进栈 后可立即出栈),问能否得到下列序列。若能得 到,则给出相应的push和pop序列;若不能,则 说明理由。 (2)A,C,E,B,D (2)不能得到该序列,在E出栈时,B和D在栈 中,B比D先进栈,所以D应比B先出栈。
2018/10/25
2
第二章 习题讲解
2-4.Loc(A[i][j][k])=134+(i*n*p+j*p+k)*2
2018/10/25
3
2-9. 设有长度为n 的一维整型数组A,设计一个算法,将原数 组中的元素以逆序排列 void Invert(T elements[], int length) //length数组长度 //elements[]为需要逆序的数组 { T e; for (int i=1;i<length/2;i++) { e=elements[i-1]; elements[i-1]=elements[length-i]; elements[length-i]=e; } }
2018/10/25
9
第四章 习题讲解
4-1. 设线性表采用顺序表示方式,并假定顺序表是 有序的(设表中元素已按非递减次序排列)。编写 函数,实现线性表的如下运算: (1)int Search_Insert(List *lst,T x) 后置条件:在有序的顺序表中搜索元素x。 •若x在表中,则返回x在表中的位置。 •否则,若表未满,则在表中插入新元素x,并且插 入后,线性表仍然是有序的,返回新元素x的位置; •若表已满,无法插入新元素,则返回-1。
(1)无序树:9棵 (2)有序树:12棵 (3)二叉树:30棵
各6棵 3棵 6棵
6棵
6棵
2018/10/25
15
6-3. 设在度为m的树中,度为1,2,…,m的节点 个数分别为n1,n2,…,nm,求叶子节点的数目。
设度为0的节点个数为n0则: 树的总度数=节点总个数-1 即:1*n1+2*n2+…+m*nm =n0+ n1+n2+n3+….+ nm-1 因此叶子节点数目为:n0=n2+2*n3+….+ (m-1)nm+1
2018/10/25 5
第三章 习题讲解
3-1. 设A,B,C,D,E五个元素依次进栈(进栈 后可立即出栈),问能否得到下列序列。若能得 到,则给出相应的push和pop序列;若不能,则 说明理由。 (1)A,B,C,D,E (1)能得到该序列。 相应的push和pop序列为:push(A); pop(); push(B); pop(); push(C); pop(); push(D); pop(); push(E); pop();
2018/10/25
12
void Search_Delete(List *lst, T x, T y) { if (lst->Size==0) { printf(“The list is empty”); return -1; } int i,j,sum=0; for (i=0;temp[i]<x&&i<n;i++); //找到首个大于等于x的元素位置i if(i>n-1) return; //没有符合条件的元素 for for (j=i;lst[j]<=y&&j<n;j++); (j=i;j<n; ) //找到首个大于 y 的元素位置j if (lst[j]>y) //大于y 的元素前移 sum=j-i; lst[i++]=lst[j++]; while(j<n) //删除 sum个元素 else lst[i++]=lst[j++]; //小于等于 y的元素删除 n=n-sum; { j++; n--; } }
2018/10/25
17
6-6. 设对一棵二叉树进行中序遍历和后序遍历的结果 分别为: (1)中序遍历 (B D C E) A (F H G ) (2)后序遍历 (D E C B)(H G F) A 画出该二叉树。
A B C D E H F G
2018/10/25
18
6-7 写出下图中二叉树的先序、中序和后序遍历结果
先序:DEHFJGCKAB
E
D
A
中序:HEJFGKCDAB 后序:HJKCGFEBAD
H
F5
19
6-8.设二叉树以二叉链表存储,试编写求解下列问 题的递归算法: (3)求一棵二叉树中的叶结点个数;
int SizeL(BTree Bt) { return SizeofLeaf(Bt.Root); } int SizeofLeaf(BTNode *p) { if(!p) return 0; if( (!(p->RChild))&&(!(p->LChild)) ) return 1; return SizeofLeaf(p->LChild)+SizeofLeaf(p->RChild); }
相关主题