耿国华数据结构附录A样卷习题B卷习题
耿国华大数据结构习题问题详解完整版

第一章答案1.3计算下列程序中x=x+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;【解答】x=x+1的语句频度为:T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/61.4试编写算法,求p n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。
注意:本题中的输入为a i(i=0,1,…n)、x和n,输出为P n(x0)。
算法的输入和输出采用下列方法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递。
讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。
【解答】(1)通过参数表中的参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。
缺点:形参须与实参对应,且返回值数量有限。
(2)通过全局变量隐式传递优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue(){ int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<n;i++)scanf(“%f ”,&a[i]); /*执行次数:n次 */p=a[0];for(i=1;i<=n;i++){ p=p+a[i]*x; /*执行次数:n次*/x=x*x;}printf(“%f”,p);}算法的时间复杂度:T(n)=O(n)通过参数表中的参数显式传递float PolyValue(float a[ ], float x, int n){float p,s;int i;p=x;s=a[0];for(i=1;i<=n;i++){s=s+a[i]*p; /*执行次数:n次*/p=p*x;}return(p);}算法的时间复杂度:T(n)=O(n)第二章答案2.7试分别以不同的存储结构实现单线表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,…,a n)逆置为(a n,a n-1,…,a1)。
数据结构耿国华课后答案2b

7. 叙述面向对象程序设计语言的特点。
8. 在面向对象程序设计中,类的作用是什么?
9. 叙述参数传递的主要方式及特点。
10. 叙述抽象数据类型的概念。
二、判断题(在各题后填写“√”或“×”)
x=x*x;}
printf(“%f”,p);
}
算法的时间复杂度:T(n)=O(n)
通过参数表中的参数显式传递
float PolyValue(float a[ ], float x, int n)
{
float p,s;
int i;
p=x;
s=a[0];
2.6已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构。试写一高效算法,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值为任意的整数)。
Status Delete_Between(Linklist &L,int mink,int maxk)//删除元素递增排列的链表L中值大于mink且小于maxk的所有元素
=n(n+1)(n+2)/6
=n3/6+n2/2+n/3
区分语句频度和算法复杂度:
O(f(n)) = O(n3)
四、试编写算法,求一元多项式Pn(x)=a0+a1x+a2x2+a3x3+…anxn的值Pn(x0),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。注意:本题中的输入ai(i=0,1,…,n),x和n,输出为Pn(x0)。通常算法的输入和输出可采用下列两种方式之一:
数据结构c语言版耿国华课后习题答案

数据结构c语言版耿国华课后习题答案数据结构C语言版耿国华课后习题答案数据结构是计算机科学中非常重要的一个领域,它研究如何组织和存储数据,以便能够高效地进行检索和操作。
C语言作为一种高效的编程语言,被广泛应用于数据结构的实现和操作中。
耿国华编写的《数据结构C语言版》是一本经典的教材,其中包含了大量的习题,帮助学生巩固所学的知识。
在这本教材中,耿国华提供了大量的习题,涵盖了数据结构的各个方面,包括数组、链表、栈、队列、树等。
这些习题不仅考察了学生对数据结构的理解,还帮助他们提高了编程能力。
而课后习题的答案则是帮助学生检验自己的学习成果,确保他们能够正确地理解和应用所学的知识。
在这篇文章中,我们将介绍一些数据结构C语言版耿国华课后习题的答案,以帮助读者更好地理解和掌握数据结构的知识。
1. 数组题目:编写一个程序,实现对一个整型数组的冒泡排序。
答案:```cvoid bubbleSort(int arr[], int n) {for (int i = 0; i < n-1; i++) {for (int j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}```2. 链表题目:编写一个程序,实现对一个单链表的反转。
答案:```cstruct ListNode* reverseList(struct ListNode* head) { struct ListNode* prev = NULL;struct ListNode* curr = head;while (curr != NULL) {struct ListNode* nextTemp = curr->next;curr->next = prev;prev = curr;curr = nextTemp;}return prev;}```3. 栈题目:编写一个程序,实现对一个整型数组的栈操作(包括入栈、出栈和获取栈顶元素)。
耿国华大数据结构习题问题详解完整

耿国华⼤数据结构习题问题详解完整第⼀章答案1.3计算下列程序中x=x+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;【解答】x=x+1的语句频度为:T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/61.4试编写算法,求p n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每⼀语句的执⾏次数和整个算法的时间复杂度,要求时间复杂度尽可能⼩,规定算法中不能使⽤求幂函数。
注意:本题中的输⼊为a i(i=0,1,…n)、x和n,输出为P n(x0)。
算法的输⼊和输出采⽤下列⽅法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递。
讨论两种⽅法的优缺点,并在算法中以你认为较好的⼀种实现输⼊输出。
【解答】(1)通过参数表中的参数显式传递优点:当没有调⽤函数时,不占⽤存,调⽤结束后形参被释放,实参维持,函数通⽤性强,移置性强。
缺点:形参须与实参对应,且返回值数量有限。
(2)通过全局变量隐式传递优点:减少实参与形参的个数,从⽽减少存空间以及传递数据时的时间消耗缺点:函数通⽤性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue(){ int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;iscanf(“%f ”,&a[i]); /*执⾏次数:n次 */p=a[0];for(i=1;i<=n;i++){ p=p+a[i]*x; /*执⾏次数:n次*/x=x*x;}printf(“%f”,p);}算法的时间复杂度:T(n)=O(n)通过参数表中的参数显式传递float PolyValue(float a[ ], float x, int n){float p,s;int i;p=x;s=a[0];for(i=1;i<=n;i++){s=s+a[i]*p; /*执⾏次数:n次*/p=p*x;}return(p);}算法的时间复杂度:T(n)=O(n)第⼆章答案2.7试分别以不同的存储结构实现单线表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,…,a n)逆置为(a n,a n-1,…,a1)。
数据结构答案(耿国华)

SubString(sub2,s,7,1)= 空格
StrIndex(s,’A’,4)= 6 StrReplace(s,’STUDENT’,q)= I AM A WORKER
StrCat(StrCat(sub1,t),StrCat(sub2,q)) = I AM A GOOD WORKER
B
C A
先:ABC 中:CBA 后:CBA
A
B C
先:ABC 中:BAC 后:BCA
6
A
先:ABC B 中:ACB 后:CBA
B C
C
先:ABC 中:ABC 后:CBA
第6章 树和二叉树习题
3.已知一棵度为k的树中有n1个度为1的结点,n2个度 为2的结点,…nk个度为k的结点,则该树中有多少个 叶子结点,并证明之。
3)前序和后序相同 空树、只有一个结点的树
9
第6章 树和二叉树习题
数 据 结 构
补充:写出下面二叉树的前序、中序、后序 遍历序列 先序序列: A ABCDEFGHIJ E B 中序序列: G C F BCDAFEHJIG D H I J 后序序列: DCBFJIHGEA
10
第6章 树和二叉树习题
13
解:设n为总结点数,则有
数 据 结 构
(总结点数) n=n0+n1+n2+…nk (总边数) n-1=1*n1+2*n2+…k*nk 两式相减得:1=n0-n2-2n3-…-(k-1)nk n0=1+n2+2n3+…+(k-1)nk =1+∑(i-1)ni
i=1
7
k
第6章 树和二叉树习题
4.假设一棵二叉树的先序序列和中序序列,试画出该二叉树, 并写出后序遍历序列。
耿国华数据结构习题答案完整

1.3计算下列程序中x=x+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;【解答】x=x+1的语句频度为:T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/61. 4试编写算法,求p n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。
注意:本题中的输入为a i(i=0,1,…n)、x和n,输出为P n(x0)。
算法的输入和输出采用下列方法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递。
讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。
【解答】(1)通过参数表中的参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。
缺点:形参须与实参对应,且返回值数量有限。
(2)通过全局变量隐式传递优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue(){ int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<n;i++)scanf(“%f ”,&a[i]); /*执行次数:n次*/p=a[0];for(i=1;i<=n;i++){ p=p+a[i]*x; /*执行次数:n次*/x=x*x;}printf(“%f”,p);}算法的时间复杂度:T(n)=O(n)通过参数表中的参数显式传递float PolyValue(float a[ ], float x, int n){float p,s;int i;p=x;s=a[0];for(i=1;i<=n;i++){s=s+a[i]*p; /*执行次数:n次*/p=p*x;}return(p);}算法的时间复杂度:T(n)=O(n)2.7试分别以不同的存储结构实现单线表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,…,a n)逆置为(a n,a n-1,…,a1)。
耿国华数据结构习题答案完整版

1.3计算下列程序中x=x+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;【解答】x=x+1的语句频度为:T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/61. 4试编写算法,求p n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。
注意:本题中的输入为a i(i=0,1,…n)、x和n,输出为P n(x0)。
算法的输入和输出采用下列方法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递。
讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。
【解答】(1)通过参数表中的参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。
缺点:形参须与实参对应,且返回值数量有限。
(2)通过全局变量隐式传递优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue(){ int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<n;i++)scanf(“%f ”,&a[i]); /*执行次数:n次*/p=a[0];for(i=1;i<=n;i++){ p=p+a[i]*x; /*执行次数:n次*/x=x*x;}printf(“%f”,p);}算法的时间复杂度:T(n)=O(n)通过参数表中的参数显式传递float PolyValue(float a[ ], float x, int n){float p,s;int i;p=x;s=a[0];for(i=1;i<=n;i++){s=s+a[i]*p; /*执行次数:n次*/p=p*x;}return(p);}算法的时间复杂度:T(n)=O(n)2.7试分别以不同的存储结构实现单线表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,…,a n)逆置为(a n,a n-1,…,a1)。
耿国华大数据结构习题问题详解完整版

第一章答案1.3计算下列程序中x=x+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;【解答】x=x+1的语句频度为:T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/61.4试编写算法,求p n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。
注意:本题中的输入为a i(i=0,1,…n)、x和n,输出为P n(x0)。
算法的输入和输出采用下列方法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递。
讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。
【解答】(1)通过参数表中的参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。
缺点:形参须与实参对应,且返回值数量有限。
(2)通过全局变量隐式传递优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue(){ int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<n;i++)scanf(“%f ”,&a[i]); /*执行次数:n次 */p=a[0];for(i=1;i<=n;i++){ p=p+a[i]*x; /*执行次数:n次*/x=x*x;}printf(“%f”,p);}算法的时间复杂度:T(n)=O(n)通过参数表中的参数显式传递float PolyValue(float a[ ], float x, int n){float p,s;int i;p=x;s=a[0];for(i=1;i<=n;i++){s=s+a[i]*p; /*执行次数:n次*/p=p*x;}return(p);}算法的时间复杂度:T(n)=O(n)第二章答案2.7试分别以不同的存储结构实现单线表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,…,a n)逆置为(a n,a n-1,…,a1)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构 附录A 样卷一、判断题:(10分)正确在括号内打",错误打X()1.在单链表中,头结点是必不可少的。
)2.如果一个二叉树中没有度为 1的结点,则必为满二叉树。
()3. 循环链表的结点结构与单链表的结点结构完全相同,只是结点间的连接方式不 同。
()4•顺序存储结构只能用来存放线性结构; 链式存储结构只能用来存放非线性结构。
()5.在一个大根堆中,最小元素不一定在最后。
()6.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和。
()7.在采用线性探测法处理冲突的散列表中,所有同义词在表中相邻。
)8.内部排序是指排序过程在内存中进行的排序。
)9.拓扑排序是指结点的值是有序排列。
()10. AOE 网所表示的工程至少所需的时间等于从源点到汇点的最长路径的长度。
二、选择题(30分,每题1.5分)1.有一个含头结点的单链表,头指针为 head, 则判断其是否为空的条件为:A . head=NILB.C 、不必事先估计存储空间D 、所需空间与线性表的长度成正比4. ________________ 若某链表中最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则 采用 _______ 存储方式最节省运算时间。
A 、单链表B 、双链表C 、单循环链表 D 、带头结点的双循环链表5•若线性表最常用的操作是存取第 i 个元素及其前驱的值,则采用 ____________________ 存储方式节省时间。
A 、单链表B 、双链表C 、单循环链表D、顺序表6. 设一个栈的输入序列为 A B, c, D,则借助一个栈所得到的输出序列不i 可能的是 。
A 、A ,B ,C ,DB 、D, CB, AC A , C, D,BD 、D, A,B, C7. 一个队列的入队序列是1, 2, 3, 4,则队列的输出序列是。
A 、4, 3, 2, 1B 、1 , 2, 3, 4C 、 1, 4, 3,2D 、 3, 2, 4, 1headA.next=NIL 或A .2. head==NULL 非空的循环单链表 A. pA. next=NIL D. p=head C. headA. next=head D. head<>NILB. Head->n ext==NULLC.head->n ext==headhead 的尾指针p 满足_____ B. p=NILD. Head!=NULL C.p A . next=head或 A.==head3•链表不具有的特点是 ______A 、可随机访问任一个元素 插入删除不需要移动元素 p->n ext=NULLB. p==NULLC. P->n ext==headD. P&设循环队列中数组的下标范围是1~n,其头尾指针分别为f, r,若队列中元素个数为________________。
A、r-fB、r-f+1 C、( r-f+1 ) mod n D、( r-f+n ) mod n9. 串是。
A、不少于一个字母的序列B、任意个字母的序列C、不少于一个字符的序列D、有限个字符的序列10. 数组A[1..5,1..6] 的每个元素占5个单元,将其按行优先次序存储在起始地址为1000的连续内存单元中,则A[5 , 5]的地址是 _______________ 。
A > 1140 B、114 C > 1120D、112511. 将一棵有100个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根结点编号为1,则编号为49的结点的左孩子的编号为。
A、98B、99C、50 D、4812•对二叉树从1开始编号,要求每个结点的编号大于其左右孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用________________ 实现编号。
A、先序遍历B、中序遍历C、后序遍历D、从根开始进行层次遍历13•某二叉树的先序序列和后序序列正好相反,则该二叉树一定是 _______________ 的二叉树。
A、空或只有一个结点B、高度等于其结点数C、任一结点无左孩子D、任一结点无右孩子14. 在有n个叶子结点的哈夫曼树中,其结点总数为____________________ 。
A、不确定B、2nC、2n+1D、2n-115. ___________________________________________ 一个有n个顶点的无向图最多有条边。
A、nB、n (n-1 )C、n (n-1 )/2 D、2n16 .任何一个无向连通图的最小生成树 ___________________ 。
A、只有一棵B、有一棵或多棵C、一定有多棵D、可能不存在17. 一组记录的关键字为(46, 79 , 56, 38, 40, 84),利用快速排序的方法,以第一个记录为基准得到的一次划分结果为____________________________ 。
A 、38, 40, 46, 56, 79, 84B 、40, 38, 46, 79, 56, 84C 、40, 38, 46, 56, 79, 84D 、40, 38, 46, 84, 56, 7918•已知数据表A中每个元素距其最终位置不远,则采用 ___________________ 排序算法最节省时间。
A、堆排序B、插入排序C、快速排序D、直接选择排序19. _______________________________ 下列排序算法中,算法可能会出现下面情况:初始数据有序时,花费时间反而最多。
A、堆排序B、冒泡排序C、快速排序D、SHELL排序20. 对于键值序列(12, 13, 11, 18, 60, 15, 7, 18, 25, 100),用筛选法建堆,必须从键值为________________ 的结点开始。
A 、100 12D 、 15三、填空题(40分)1在顺序表(即顺序存储结构的线性表)中插入一个元素,需要平均动_____________ 个元素• 快速排序的最坏情况,其待排序的初始排列是 ______________________________________________________ •_ 为防止在图中走回,应设4. 一个栈的输入序列为 123,写出不可能是栈的输出序 列 ____________________________________ 。
5. N 个结点的二叉树,采用二叉链表存放,空链域的个数为 _____________________________ .6. 要在一个单链表中 p 所指结点之后插入 s 所指结点时,应执行 _________________________________________ 和 ________________________________________ __________ 的操作. 7.Dijkstra ______________________________________ 算法是按 的次序产生一点到其余各顶点最短路径的算法.8. 在N 个结点完全二叉树中, 其深度是 _________________________________________________ 9. 对二叉排序树进行 _____________________ 遍历,可得到结点的有序排列. 10.设一哈希表表长 M 为100,用除留余数法构造哈希函数,即 H ( K ) =K MOD 3 ( P〈=M ,为使函数具有较好性能, P 应选 _____________________________________________ 11. 单链表与多重链表的区别是 ________________________________________12. __________________________________________________________________ 深度为 6 (根层次为 1 )的二叉树至多有 _______________________________________________ 个结点。
13•已知二维数组 A[0..20][0..10]采用行序为主方式存储,每个元素占4个存储单元,并B 、602.3.\立且A[0][0]的存储地址是1016,则A[10][5] 的存储地址是________________________________14. ___________________________________________________________________________ 循环单链表La中,指针P所指结点为表尾结点的条件是 _____________________________________15. 在查找方法中,平均查找长度与结点个数无关的查找方法16. 队列的特性是_______________________________________17. _________________________________________ 具有3个结点的二叉树有种18. 已知一棵二叉树的前序序列为ABDFCE中序序列为DFBACE 后序序列为_______________________19•已知一个图的邻接矩阵表示,要删除所有从第i个结点出发的边,在邻接矩阵运算是四、构造题:(30分)1. 已知关键字序列为:(75, 33, 52, 41, 12, 88, 66, 27 )哈希表长为10,哈希函数为:H(k)=K MOD 7,解决冲突用线性探测再散列法,构造哈希表,求等概率下查找成功的平均查找长度。
2. 已知无向图如图1所示,(1)给出图的邻接表。
(2)从A开始,给出一棵广度优先生成树。
3. 给定叶结点权值:(1 , 3, 5, 6, 7, 8),构造哈夫曼树,并计算其带权路径长度。
4•从空树开始,逐个读入并插入下列关键字,构造一棵二叉排序树:(24, 88, 42, 97, 22, 15, 7, 13)。
5•对长度为8的有序表,给出折半查找的判定树,给出等概率情况下的平均查找长度。
6.已知一棵树如图2所示,要求将该树转化为二叉树。
五、算法设计题(40分)[算法题可用类PASCAL或类C语言,每题20分]叉树中叶子结点个数1. 已知一棵二叉树采用二叉链表存放,写一算法,要求统计出并输出二叉树中非终端结点(输出无顺序要求)。
2.编写算法,判断带头结点的双循环链表L是否对称。
对称是指:设各元素值a i,a2,...,a n,则有a i=a n」+i即指:a i = a n, a2= a n-i 。