数据结构课后习题答案
数据结构课后题答案
else {
smaller=pb; pb=pb->next; smaller->next = c->next; c->next = smaller; }
return(C); }
西北大学可视化技术研究所
10.已知有单链表表示的线性表中含有三类字 符的数据元素(如字母字符,数字字符和其它 字符),试编写算法来构造三个以循环链表表 示的线性表,使每个表中只含同一类的字符, 且利用原表中的结点空间作为这三个表的结点 空间,头结点可另辟空间。
西北大学可视化技术研究所
西北大学可视化技术研究所
答案:435612不可以 原因 (1)S:1234 X:43 (2)S:5 X: 5 (3)S:6 X: 6 (4)X:21 135426 可以 原因(1)S:1 X:1 (2)S:23 X: 3 (3)S:45 X: 54 (4)X:2 (5)S:6 X: 6
西北大学可视化技术研究所
G. S->next= NULL; 。
西北大学可视化技术研究所
供选择的语句有:
A. P->next=S; B. P->next= P->next->next; C. P->next= S->next;
E. S->next= P->next; F. S->next= L;
G. S->next= NULL;
数据结构习题参考答案
数据结构习题参考答案一、栈和队列1. 栈是一种具有后进先出(Last In First Out)特性的线性数据结构。
常用方法:- push(x): 将元素x压入栈顶;- pop(): 弹出栈顶元素;- top(): 返回栈顶元素;- isEmpty(): 判断栈是否为空;例题解答:(1)题目描述:使用栈实现队列的功能。
解答:使用两个栈,一个用于入队操作,一个用于出队操作。
入队操作:直接将元素压入入队栈中;出队操作:如果出队栈为空,则将入队栈的元素逐个弹出并压入出队栈,此时出队栈的栈顶元素即为要弹出的元素。
复杂度分析:入队操作的时间复杂度为O(1),出队操作的平均时间复杂度为O(1)。
(2)题目描述:判断括号序列是否合法,即括号是否完全匹配。
解答:使用栈来处理括号序列,遇到左括号则入栈,遇到右括号则与栈顶元素进行匹配,如果匹配成功则继续处理剩余字符,如果不匹配则判定为非法序列。
算法步骤:- 初始化一个空栈;- 从左到右遍历括号序列,对于每个字符执行以下操作:- 如果是左括号,则将其入栈;- 如果是右括号,则将其与栈顶元素进行匹配:- 如果栈为空,则判定为非法序列;- 如果栈顶元素与当前字符匹配,则将栈顶元素出栈,继续处理剩余字符;- 如果栈顶元素与当前字符不匹配,则判定为非法序列。
- 遍历结束后,如果栈为空,则括号序列合法;否则,括号序列非法。
复杂度分析:时间复杂度为O(n),其中n为括号序列的长度。
2. 队列是一种具有先进先出(First In First Out)特性的线性数据结构。
常用方法:- enqueue(x): 将元素x入队;- dequeue(): 出队并返回队首元素;- getFront(): 返回队首元素;- isEmpty(): 判断队列是否为空;例题解答:(1)题目描述:使用队列实现栈的功能。
解答:使用两个队列,一个用于入栈操作,一个用于出栈操作。
入栈操作:直接将元素入队入栈队列中;出栈操作:如果出栈队列为空,则将入栈队列的元素逐个出队并入队出栈队列,此时出栈队列的队首元素即为要出栈的元素。
数据结构课后习题及答案
填空题(10 *1’ = 10' )一、概念题2。
2.当对一个线性表经常进行的是插入和删除操作时,采用链式存储结构为宜。
2。
3。
当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,最好采用顺序存储结构。
2。
6。
带头结点的单链表L中只有一个元素结点的条件是L—〉Next->Next==Null。
3。
6。
循环队列的引入,目的是为了克服假溢出.4。
2。
长度为0的字符串称为空串。
4。
5.组成串的数据元素只能是字符。
4。
8.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,又称P为模式。
7.2。
为了实现图的广度优先搜索,除一个标志数组标志已访问的图的结点外,还需要队列存放被访问的结点实现遍历。
5.7。
广义表的深度是广义表中括号的重数7。
8.有向图G可拓扑排序的判别条件是有无回路。
7.9。
若要求一个稠密图的最小生成树,最好用Prim算法求解。
8。
8.直接定址法法构造的哈希函数肯定不会发生冲突。
9。
2。
排序算法所花费的时间,通常用在数据的比较和交换两大操作。
1。
1。
通常从正确性﹑可读性﹑健壮性﹑时空效率等几个方面评价算法的(包括程序)的质量。
1。
2.对于给定的n元素,可以构造出的逻辑结构有集合关系﹑线性关系树形关系﹑图状关系四种。
1。
3。
存储结构主要有顺序存储﹑链式存储﹑索引存储﹑散列存储四种。
1。
4。
抽象数据类型的定义仅取决于它的一组逻辑特性,而与存储结构无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。
1。
5.一个算法具有五大特性:有穷性﹑确定性﹑可行性,有零个或多个输入﹑有一个或多个输入。
2.8.在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:s—〉prior= p—〉prior; s-〉next= p; p-〉prior- next= s;p-〉prior= s;。
2.9。
在单链表中设置头结点的作用是不管单链表是否为空表,头结点的指针均不空,并使得对单链表的操作(如插入和删除)在各种情况下统一。
数据结构课后习题答案
第 1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
【解答】数据元素⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。
【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。
⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。
【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。
【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。
【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。
【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺在一般情况下,一个算法的时间复杂度是()的函数。
【解答】问题规模⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。
【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。
2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。
A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。
⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是()。
数据结构教材课后习题及参考答案习题 (10)[3页]
习题6一.填空题1.树中除根结点外,其他结点有且只有个直接前驱结点,但可以有个直接后继结点。
2.树中结点的度,是指结点拥有的个数;一棵具有n个结点的树,该树中所有结点的度数之和为。
3.深度为h的完全二叉树至少有个结点,至多有个结点,若按层序从1开始编号,则编号最小的叶子结点的编号是。
5.将一棵完全二叉树按层序从1进行编号,对编号为i的结点,如果有左孩子,则左孩子的编号应该是;如果有右孩子,则右孩子的编号应该是。
6.一棵完全二叉树有1001个结点,其深度是,叶子结点个数是。
78.树的先根遍历序列与其对应二叉树的遍历序列相同,树的后根遍历序列与其对应二叉树的遍历序列相同。
9.若二叉树共有n个结点,采用线索链表存储其线索二叉树,那么在所有存储结点里,一共有个指针域,其中有个指针是指向其孩子结点的,个指针是指向其前驱后继结点的。
指向前驱后继结点的指针称为。
10.哈夫曼树又称。
它是n个带权叶子结点构成的所有二叉树中,带权路径长度的二叉树。
11.哈夫曼树中,权值较大的叶结点一定离根结点。
由n个带权值的叶结点生成的哈夫曼树中共有个结点,其中有个分支结点。
12.哈夫曼树中不存在度为的结点。
二.选择题1.有关二叉树下列说法正确的是()A.二叉树的度为2 B.一棵二叉树的度可以小于2C.二叉树中至少有一个结点的度为2 D.二叉树中任何一个结点的度都为2 2.二叉树的第i层上最多含有结点数为()A.2i B.2i-1-1 C.2i-1D.2i-13.一棵具有1025个结点的二叉树的高度为( )。
A.11 B.10 C.11至1025之间D.10至1024之间4.一棵高度为5的二叉树,其结点总数为()。
A.6~17 B.5~16 C.6~32 D.5~315.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点的个数是( )。
A.9 B.11 C.15 D.不能确定6.一棵完全二叉树具有600个结点,则它有( ) 个度为1的结点。
数据结构课后习题答案
第1章绪论5.选择题:CCBDCA6.试分析下面各程序段的时间复杂度。
(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题babadbcabdcddac2.算法设计题(6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。
ElemType Max (LinkList L ){if(L->next==NULL) return NULL;pmax=L->next; //假定第一个结点中数据具有最大值p=L->next->next;while(p != NULL ){//如果下一个结点存在if(p->data > pmax->data) pmax=p;p=p->next;}return pmax->data;(7)设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。
void inverse(LinkList &L) {// 逆置带头结点的单链表 Lp=L->next; L->next=NULL;while ( p) {q=p->next; // q指向*p的后继p->next=L->next;L->next=p; // *p插入在头结点之后p = q;}}(10)已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素。
[题目分析] 在顺序存储的线性表上删除元素,通常要涉及到一系列元素的移动(删第i个元素,第i+1至第n个元素要依次前移)。
本题要求删除线性表中所有值为item的数据元素,并未要求元素间的相对位置不变。
因此可以考虑设头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。
数据结构课后习题答案(耿国华版
第1章绪论2 、(1)×(2)×(3) √3 、(1)A(2)C(3)C5、f or计(算i=下1n程;序中 1 得语句频度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)/66 、编写算法,求一元多项式p。
(x)=a。
+a,x+a₂X2+……、+a Xn得值p(x) 并确定算法中每一语句得执行次数与整个算法得时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数.注意:本题中得输入为a,(i=01,…n)、x 与n,输出为P。
(x)。
算法得输入与输出采用下列方法(1)通过参数表中得参数显式传递(2)通过全局变量隐式传递。
讨论两种方法得优缺点,并在算法中以您认为较好得一种实现输入输出.【解答】(1)通过参数表中得参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。
缺点:形参须与实参对应,且返回值数量有限。
(2)通过全局变量隐式传递优点:减少实参预形参得个数,从而减少内存空间以及传递数据时得时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue({ int,in;floatx,a[]p;pri n tf(hn=”);s c anf(“%f,”&n);printf(“x=”;)sca nf(“%f&x);f or(i=0;i<n; i++)s c anf(%f ,&a[i]; /*执行次数:n 次 */p=a[0];for (i=1;i<=n;i++){ p=p+a [i]*x; /*执行次数:n次*/x= x*x;}prin t f(%f” p);}算法得时间复杂度:T(n)=0(n)通过参数表中得参数显式传递f loat PolyVa lue(float a[ ], float x, i nt n)f 1 oat p, s;int;is p a X0];for(=1;i<= n;i++)/执行次数:n 次*/{s=s+a [i]* p;p=p*x;}re turn(p);算法得时间复杂度:T(n)=O(n)第2章线性表习题1、填空:(1)在顺序表中插入或者删除一个元素,需要平均挪移一半元素,具体挪移得元素个数与插入或者删除得位置有关。
数据结构课后习题及答案
填空题(10 * 1’ = 10’)一、概念题2.2.当对一个线性表经常进行的是插入和删除操作时,采用链式存储结构为宜。
2.3.当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,最好采用顺序存储结构。
2.6.带头结点的单链表L中只有一个元素结点的条件是L->Next->Next==Null。
3.6.循环队列的引入,目的是为了克服假溢出。
4.2.长度为0的字符串称为空串。
4.5.组成串的数据元素只能是字符。
4.8.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,又称P为模式。
7.2.为了实现图的广度优先搜索,除一个标志数组标志已访问的图的结点外,还需要队列存放被访问的结点实现遍历。
5.7.广义表的深度是广义表中括号的重数7.8.有向图G可拓扑排序的判别条件是有无回路。
7.9.若要求一个稠密图的最小生成树,最好用Prim算法求解。
8.8.直接定址法法构造的哈希函数肯定不会发生冲突。
9.2.排序算法所花费的时间,通常用在数据的比较和交换两大操作。
1.1.通常从正确性﹑可读性﹑健壮性﹑时空效率等几个方面评价算法的(包括程序)的质量。
1.2.对于给定的n元素,可以构造出的逻辑结构有集合关系﹑线性关系树形关系﹑图状关系四种。
1.3.存储结构主要有顺序存储﹑链式存储﹑索引存储﹑散列存储四种。
1.4.抽象数据类型的定义仅取决于它的一组逻辑特性,而与存储结构无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。
1.5.一个算法具有五大特性:有穷性﹑确定性﹑可行性,有零个或多个输入﹑有一个或多个输入。
2.8.在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:s->prior= p->prior; s->next= p; p->prior- next= s; p->prior= s;。
2.9.在单链表中设置头结点的作用是不管单链表是否为空表,头结点的指针均不空,并使得对单链表的操作(如插入和删除)在各种情况下统一。
数据结构C语言版严慧敏答案全
1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。
解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由 具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据类型 通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数 据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实 现,这样抽象层次更高,更能为其他用户提供良好的使用接口。 1.3 设有数据结构(D,R),其中
2 2
3.5
n 的增长趋势,并确定 n 在什么范围内,函数 n 2 的值
n 的值。 n 的值较大。
解: n 的增长趋势快。但在 n 较小的时候, 50 n log 2 当 n>438 时, n 1.14 判断下列各对函数
2
50n log 2 n
f n 和 g n ,当 n 时,哪个函数增长更快?
D d1, d 2, d 3, d 4 , R r, r d1, d 2 , d 2, d 3, d 3, d 4
试按图论中图的画法惯例画出其逻辑结构图。 解:
1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均 为自然数且分母不为零的分数) 。 解: ADT Complex{ 数据对象:D={r,i|r,i 为实数} 数据关系:R={<r,i>} 基本操作: InitComplex(&C,re,im) 操作结果:构造一个复数 C,其实部和虚部分别为 re 和 im DestroyCmoplex(&C) 操作结果:销毁复数 C Get(C,k,&e) 操作结果:用 e 返回复数 C 的第 k 元的值 Put(&C,k,e) 操作结果:改变复数 C 的第 k 元的值为 e IsAscending(C) 操作结果:如果复数 C 的两个元素按升序排列,则返回 1,否则返回 0
数据结构课后习题答案(耿国华版
第1章绪论2、(1)×(2)×(3)√3、(1)A(2)C(3)C5、计算下列程序中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)/66、编写算法,求一元多项式p n(x)=a0+a1x+a2x2+……、+a n x n得值p n(x0),并确定算法中每一语句得执行次数与整个算法得时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数.注意:本题中得输入为a i(i=0,1,…n)、x与n,输出为Pn(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){floatp,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章线性表习题1、填空:(1)在顺序表中插入或删除一个元素,需要平均移动一半元素,具体移动得元素个数与插入或删除得位置有关。
数据结构课后题答案(1-4章)
数据结构部分课后习题答案第一章1.1数据的逻辑结构是从具体问题中抽象出来的数学模型,体现了事物的组成和事物之间的逻辑关系。
数据的存储结构主要用来解决各种逻辑结构在计算机中物理存储表示的问题。
1.2事前分析和事后统计事前分析:优点,程序不必运行,所得结果只依赖于算法本身缺点,不够精确事后统计:优点,精确缺点,必须运行程序,所得结果依赖于硬件、环境等因素考虑赋值、运算操作执行的次数第3行赋值2次第6行赋值执行n次,加法执行n次所以,总共2n+2次操作,算法复杂度为O(n)1.4y= y + i * j 执行次数:1.5第二章2.9内存中一片连续空间(不妨假设地址从1到m)提供给两个栈S1和S2使用,怎样分配这部分存储空间,使得对任一个栈,仅当这部分空间全满时才发生上溢。
答:S1和S2共享内存中一片连续空间(地址1到m),可以将S1和S2的栈底设在两端,两栈顶向共享空间的中心延伸,仅当两栈顶指针相邻(两栈顶指针值之差的绝对值等于1)时,判断为栈满,当一个栈顶指针为0,另一个栈顶指针m+1时为两栈均空。
2.10线性表是数据项组成的一种有限且有序的序列,各元素之间呈线性关系。
从逻辑结构来说,栈和队列与线性表相同,都是典型的线性结构。
与线性表不同的是,栈和队列的操作特殊,受到一定的限制,仅允许在线性表的一端或两端进行。
栈是限定仅在一端进行插入删除的线性表,无论插入、删除还是读取都在一端进行,按后进先出的原则。
队列的元素只能从一端插入,从另一端删除,按先进先出的原则进行数据的存取。
2.11共有132种合法序列。
235641序列可以。
154623序列不可以。
对于每一个数来说,必须进栈一次、出栈一次。
我们把进栈设为状态‘1’,出栈设为状态‘0’。
n个数的所有状态对应n个1和n个0组成的2n位二进制数。
由于等待入栈的操作数按照1‥n的顺序排列、入栈的操作数b大于等于出栈的操作数a(a≤b),因此输出序列的总数目=由左而右扫描由n个1和n个0组成的2n位二进制数,1的累计数不小于0的累计数的方案种数。
数据结构课后习题答案-完整版
数据结构课后习题答案-完整版下面是《数据结构课后习题答案-完整版》的内容:---第一章:数组1. 题目:给定一个整数数组,判断是否存在两个元素之和等于目标值。
答案:使用双指针法,首先将数组排序,然后设置左指针指向数组头部,右指针指向数组尾部。
如果左指针和右指针指向的元素之和小于目标值,则左指针右移;如果大于目标值,则右指针左移;如果等于目标值,则找到了两个元素之和等于目标值的情况。
2. 题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数的下标。
答案:使用哈希表,在遍历数组的过程中,将每个元素的值和下标存储在哈希表中。
遍历到当前元素时,检查目标值与当前元素的差值是否在哈希表中,如果存在,则找到了两个数的下标。
---第二章:链表1. 题目:给定一个链表,判断链表中是否存在环。
答案:使用快慢指针法,定义两个指针,一个指针每次向前移动一个节点,另一个指针每次向前移动两个节点。
如果存在环,则两个指针必定会相遇。
2. 题目:给定一个链表,删除链表的倒数第N个节点。
答案:使用双指针法,定义两个指针,一个指针先移动N个节点,然后两个指针同时向前移动,直到第一个指针到达链表尾部。
此时第二个指针指向的节点即为要删除的节点。
---第三章:栈和队列1. 题目:设计一个栈,使得可以在常数时间内获取栈中的最小元素。
答案:使用辅助栈来保存当前栈中的最小元素。
每次压栈操作时,将当前元素与辅助栈的栈顶元素比较,只有当前元素较小才将其压入辅助栈。
2. 题目:设计一个队列,使得可以在常数时间内获取队列中的最大元素。
答案:使用双端队列来保存当前队列中的最大值。
每次入队操作时,将当前元素与双端队列的末尾元素比较,只有当前元素较大才将其压入双端队列。
---第四章:树和二叉树1. 题目:给定一个二叉树,判断它是否是平衡二叉树。
答案:通过递归遍历二叉树的每个节点,计算每个节点的左子树高度和右子树高度的差值。
如果任意节点的差值大于1,则该二叉树不是平衡二叉树。
数据结构课后习题答案
线性表:是具有相同属性的n(n≥0)个数据元素的有限序列。
顺序表:顺序表(Sequential List)是采用顺序存储结构的线性表。
{if(p->data!=q->data) q=q->next;
else {p=p->next; q=y;}
}return p;}
2.10 已知递增有序的两个单链表A和B各存储了一个集合。设计算法实现求两个集合的交集运算C=A∩B。
typedef intDataType;
typedefstructNode
structNode*next;
}LinkList;
intdeleteDupNode(LinkList*L,DataTypeitem)
{LinkList *p,*q,*r;
q=L;p=L->next;
while (p)
if (p->data==item){q->next=p->next;free(p);p=q->next;}
三种经典结构:线性表、树和图。
线性表:有且仅有一个开始结点和一个终端结点,其余的内部结点都有且仅有一个前趋结点和一个后继结点,数据元素间存在着一对一的相互关系。
树:有且仅有一个开始结点,可有若干个终端结点,其余的内部结点都有且仅有一个前趋结点,可以有若干个后继结点,数据元素间存在着一对多的层次关系。
q=L->next->next;L->next->next=NULL;
数据结构课后答案
6.4 补考练习题及参考答案6.4.1 单项选择题1. 递归函数()(1)(1)f n f n n n =-+>的递归出口是_______。
A. (1)f =1B. (1)f =0C. (0)f =0D. ()f n n =答:当n=0时,(1)0f =。
本题答案为B 。
2. 递归函数()(1)(1)f n f n n n =-+>的递归体是________。
A. (1)1f =B. (0)0f =C. ()(1)f n f n n =-+D. ()f n n =答:递归体反映递归过程。
本题答案为C 。
3. 121()...1223(1)f n n n =+++⨯⨯⨯+,递归模型为_____。
A. 121()...1223(1)f n n n =+++⨯⨯⨯- B. 121()...(1)1223(1)f n f n n n=++++-⨯⨯-⨯ C. 1(1)2f = 1()(1)(1)f n f n n n =-+⨯- D. 1()(1)(1)f n f n n n =-+⨯- 答:递归模型由两部分组成,一是递归出口,另一是递归体,上述选项中只有C 符合条件。
本答案为C 。
4.将递归算法转换成对应的非递归算法时,通常需要使用________保存中间结果。
A.队列B.栈C.链表D.树答:递归计算过程是:先进行递归分解,知道递归出口为止,然后根据递归出口的结果反过来求值。
这样通常需要后面的递推式先计算出结果,这正好满足栈的特点。
所以本题答案为B 。
6.4.2填空题1.将转化成递归函数,其递归出口是___①____,递归体是___②___答:①(1)0f = ②()(1)f n f n =-+2.有如下递归过程:void print(int w){int i;if (w!=1){ print(w-1);for(i=1;i<=w;i++)printf(“%3d”,w);printf(“\n”);}}调用语句print(4)的结果是________。
数据结构课后习题部分参考答案
数据结构课后习题部分参考答案第一章一、选择题1.C 2.C 3.A 4.D 5.B二、判断题1.╳2.╳ 3.╳ 4.╳5.∨三、简答题1.常见逻辑结构:集合结构,数据元素之间的关系仅仅是属于同一个集合。
线性结构,除第一个元素只有一个直接后继、最后一个元素只有一个直接前驱,其余元素有且只有唯一一个直接前驱、有且只有唯一一个直接后继,数据元素之间存在一对一的关系。
树形结构,树中只有唯一一个根元素,除根元素之外,其余元素只有一个直接前驱,但可以有多个直接后继元素,数据元素之间存在一对多的关系。
图形结构,元素之间关系任意,数据元素之间存在多对多的关系。
常用的存储结构:顺序存储,把逻辑上相邻的元素存储在物理位置相邻的存储单元中,由此得到的存储表示称为顺序存储结构。
通常用数组实现。
链式存储,对逻辑上相邻的元素不要求其物理位置相邻,元素间的逻辑关系通过附加的指针字段来表示,由此得到的存储表示称为链式存储结构。
通常用指针来实现。
除上述两种方法外,有时为了查找方便还采用索引存储方法和散列存储方法。
索引存储:在存储结点信息的同时,还建立附加的索引表来标识结点的地址。
散列存储:根据元素的关键码确定元素存储位置的存储方式。
2.算法与程序的区别:程序不一定满足有穷性(如操作系统);程序中的指令必须是机器可执行的,算法中的指令则无此限制;算法代表了对问题的解,程序则是算法在计算机上的特定的实现(一个算法若用程序设计语言来描述,它才是一个程序);数据结构+算法=程序。
3.例如有一张学生成绩表,记录了一个班的学生各门课的成绩。
按学生的姓名为一行记成的表。
这个表就是一个数据结构。
每个记录就是一个结点,对于整个表来说,只有一个开始结点和一个终端结点,其他的结点则各有一个也只有一个直接前趋和直接后继。
这几个关系就确定了这个表的逻辑结构——线形结构。
那么我们怎样把这个表中的数据存储到里呢? 用高级语言如何表示各结点之间的关系呢? 是用一片连续的内存单元来存放这些记录(顺序存储)还是随机存放各结点数据再用指针进行链接(链式存储)呢? 这就是存储结构的问题,我们都是从高级语言的层次来讨论这个问题的。
(完整版)数据结构课后习题答案
第1章绪论1 •简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,士1,士2,…},字母字符数据对象是集合C={ ‘ A', ‘ B…,‘ Z,‘ a'b ',…,‘ z ' },学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
2 •试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
答案:例如有一张学生基本信息表,包括学生的学号、姓名、性别、籍贯、专业等。
每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
答案:例如有一张学生基本信息表,包括学生的学号、姓名、性别、籍贯、专业等。
每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列。
对于整个表来说,只有一个开始结点(它的前面无记录)和一个终端结点(它的后面无记录),其他的结点则各有一个也只有一个直接前趋和直接后继。
学生记录之间的这种关系就确定了学生表的逻辑结构,即线性结构。
这些学生记录在计算机中的存储表示就是存储结构。
如果用连续的存储单元(如用数组表示)来存放这些记录,则称为顺序存储结构;如果存储单元不连续,而是随机存放各个记录,然后用指针进行链接,则称为链式存储结构。
即相同的逻辑结构,可以对应不同的存储结构。
3.简述逻辑结构的四种基本关系并画出它们的关系图。
答案:(1)集合结构数据元素之间除了“属于同一集合”的关系外,别无其他关系。
例如,确定一名学生是否为班级成员,只需将班级看做一个集合结构。
(2)线性结构数据元素之间存在一对一的关系。
例如,将学生信息数据按照其入学报到的时间先后顺序进行排列,将组成一个线性结构。
(3)树结构数据元素之间存在一对多的关系。
例如,在班级的管理体系中,班长管理多个组长,每位组长管理多名组员,从而构成树形结构。
(4)图结构或网状结构数据元素之间存在多对多的关系。
例如,多位同学之间的朋友关系,任何两位同学都可以是朋友,从而构成图形结构或网状结构。
其中树结构和图结构都属于非线性结构。
四类基本逻辑结构关系图4.存储结构由哪两种基本的存储方法实现?答案:(1)顺序存储结构顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。
(2)链式存储结构顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。
但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址。
所以链式存储结构通常借助于程序设计语言的指针类型来描述。
5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。
A.动态结构和静态结构 B.紧凑结构和非紧凑结构C.线性结构和非线性结构 D.内部结构和外部结构答案:C(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。
A.存储结构 B.存储实现C.逻辑结构 D.运算实现答案:C(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。
A.数据具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等答案:B(4)以下说法正确的是()。
A.数据元素是数据的最小单位B.数据项是数据的基本单位C.数据结构是带有结构的各数据项的集合D.一些表面上很不相同的数据可以有相同的逻辑结构答案:D解释:数据元素是数据的基本单位,数据项是数据的最小单位,数据结构是带有结构的各数据元素的集合。
(5)算法的时间复杂度取决于()。
A.问题的规模B.待处理数据的初态C.计算机的配置D.A和B答案:D解释:算法的时间复杂度不仅与问题的规模有关,还与问题的其他因素有关。
如某些排序的算法,其执行时间与待排序记录的初始状态有关。
为此,有时会对算法有最好、最坏以及平均时间复杂度的评价。
(6)以下数据结构中,()是非线性数据结构A.树 B.字符串 C.队列 D.栈答案:A6.试分析下面各程序段的时间复杂度。
(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;答案:O(1)解释:程序的执行次数为常数阶。
(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;答案:O(m*n)解释:语句a[i][j]=0;的执行次数为m*n。
(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;答案:O(n2)解释:语句s+=B[i][j];的执行次数为n2。
(4)i=1;while(i<=n)i=i*3;答案:O(log3n)解释:语句i=i*3;的执行次数为⎣log3n⎦。
(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;答案:O(n2)解释:语句x++;的执行次数为n-1+n-2+……+1= n(n-1)/2。
(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;答案:O(n)解释:语句y++;的执行次数为⎣n⎦。
第2章线性表1.选择题(1)顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。
A.110 B.108 C.100 D.120答案:B解释:顺序表中的数据连续存储,所以第5个元素的地址为:100+2*4=108。
(2)在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()。
A.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)B.在第i个结点后插入一个新结点(1≤i≤n)C.删除第i个结点(1≤i≤n)D.将n个结点从小到大排序答案:A解释:在顺序表中插入一个结点的时间复杂度都是O(n2),排序的时间复杂度为O(n2)或O(nlog2n)。
顺序表是一种随机存取结构,访问第i个结点和求第i个结点的直接前驱都可以直接通过数组的下标直接定位,时间复杂度是O(1)。
(3)向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为()。
A.8 B.63.5 C.63 D.7答案:B解释:平均要移动的元素个数为:n/2。
(4)链接存储的存储结构所占存储空间()。
A.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针B.只有一部分,存放结点值C.只有一部分,存储表示结点间关系的指针D.分两部分,一部分存放结点值,另一部分存放结点所占单元数答案:A(5)线性表若采用链式存储结构时,要求内存中可用存储单元的地址()。
A.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续或不连续都可以答案:D(6)线性表L在()情况下适用于使用链式结构实现。
A.需经常修改L中的结点值B.需不断对L进行删除插入C.L中含有大量的结点D.L中结点结构复杂答案:B解释:链表最大的优点在于插入和删除时不需要移动数据,直接修改指针即可。
(7)单链表的存储密度()。
A.大于1 B.等于1 C.小于1 D.不能确定答案:C解释:存储密度是指一个结点数据本身所占的存储空间和整个结点所占的存储空间之比,假设单链表一个结点本身所占的空间为D,指针域所占的空间为N,则存储密度为:D/(D+N),一定小于1。
(8)将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是()。
A.n B.2n-1 C.2n D.n-1答案:A解释:当第一个有序表中所有的元素都小于(或大于)第二个表中的元素,只需要用第二个表中的第一个元素依次与第一个表的元素比较,总计比较n次。
(9)在一个长度为n的顺序表中,在第i个元素(1≤i≤n+1)之前插入一个新元素时须向后移动()个元素。
A.n-i B.n-i+1 C.n-i-1 D.I答案:B(10) 线性表L=(a1,a2,……a n),下列说法正确的是()。
A.每个元素都有一个直接前驱和一个直接后继B.线性表中至少有一个元素C.表中诸元素的排列必须是由小到大或由大到小D.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。
答案:D(11) 创建一个包括n个结点的有序单链表的时间复杂度是()。
A.O(1) B.O(n) C.O(n2) D.O(nlog2n)答案:C解释:单链表创建的时间复杂度是O(n),而要建立一个有序的单链表,则每生成一个新结点时需要和已有的结点进行比较,确定合适的插入位置,所以时间复杂度是O(n2)。
(12) 以下说法错误的是()。
A.求表长、定位这两种运算在采用顺序存储结构时实现的效率不比采用链式存储结构时实现的效率低B.顺序存储的线性表可以随机存取C.由于顺序存储要求连续的存储区域,所以在存储管理上不够灵活D.线性表的链式存储结构优于顺序存储结构答案:D解释:链式存储结构和顺序存储结构各有优缺点,有不同的适用场合。
(13) 在单链表中,要将s所指结点插入到p所指结点之后,其语句应为()。
A.s->next=p+1; p->next=s;B.(*p).next=s; (*s).next=(*p).next;C.s->next=p->next; p->next=s->next;D.s->next=p->next; p->next=s;答案:D(14) 在双向链表存储结构中,删除p所指的结点时须修改指针()。