数据结构课后答案_北邮
北邮算法与数据结构习题参考标准答案
![北邮算法与数据结构习题参考标准答案](https://img.taocdn.com/s3/m/f347ba683968011ca30091d4.png)
}
}
四、判断括号是否配对:
intCorrect( strings )
{
Inistack(Q);
for(i=0;s[i]== ‘=’;i++ )//表达式以‘=’结束
{
switch(s[i] )
=2n–1
所以,梵塔的移动次数为2n–1次。
三、简化的背包问题:
void Pack( intm, int i,int t)//初始值为:11t
{
for (k=i; k<=n;k++)
{
solution[m]=weight[k];
if( t == weight[k])
{
for ( j=1;j<=m;j++) cout<<solution[j];cout<<endl;
{
C=new struct node;C->next=NULL;q=B->next;
While(q)
{
p=A->r= new struct node;r->exp= p->exp+q->exp;
r->inf=p->inf* q->inf;PolyAdd(C,r);
p=p->next;
void Insert (string S, string T, charch)//设块大小为m
{
i=0; p=T;
while ((p->next)&&(!i))
{
for(j=1;j<=m;j++ ) if(p->str[j]==ch) i=j;
北邮算法与数据结构习题参考答案
![北邮算法与数据结构习题参考答案](https://img.taocdn.com/s3/m/068c8fbef111f18583d05abb.png)
北邮算法与数据结构习题参考答案作业参考答案一、(带头结点)多项式乘法 C = A×B:void PolyAdd ( list &C, list R) // R 为单个结点{p=C;while ((!p->next) && (p->next->exp>R->exp)) p=p->next; if ((p->next) || (p->next->exp<R->exp)){ R->next=p->next; p->next=R; } else{ p->next->inf += R->inf; delete R;if ( ! p->next->inf ){ R=p->next; p->next=R->next; delete R; } }}void PolyMul ( list A, list B, list &C ){C=new struct node; C->next=NULL; q=B->next; While ( q ){p=A->next;while ( p ){r = new struct node; r->exp = p->exp + q->exp;r->inf = p-> inf * q->inf; PolyAdd(C, r);p=p->next;}q=q->next;}}二、梵塔的移动次数:已知移动次数迭代公式为:M ( n ) = 2M ( n-1 ) + 1初值为:M ( 0 ) = 0则:M ( n ) = 2 ( 2M ( n-2 ) + 1 ) + 1= 4M ( n-2 ) + 3= 8M ( n-3 ) + 7= 2i M ( n-i ) + 2i– 1若n=i ,则M ( n-n ) = 0,故:M ( n ) = 2n M ( n-n ) + 2n– 1= 2n– 1所以,梵塔的移动次数为2n– 1次。
北京邮电大学测控专业数据结构习题解39页文档
![北京邮电大学测控专业数据结构习题解39页文档](https://img.taocdn.com/s3/m/7fd3039f168884868662d6b5.png)
56、书不仅是生活,而且是现在、过 去和未 来文化 生活的 源泉。 ——库 法耶夫 57、生命不可能有两次,但许多人连一 次也不 善于度 过。— —吕凯 特 58、问渠哪得清如许,为有源头活水来 。—— 朱熹 59、我的努力求学没有得到别的好处, 只不过 是愈来 愈发觉 自己的 无知。 ——笛 卡儿
拉
60、生活的道路一旦选定,就要勇敢地 走到底 ,决不 回头。 ——左
北京邮电大学测控专业数据结构习题解
11、获得的成功越大,就越令人高兴 。野心 是使人 勤奋的 原因, 节制使 人枯萎 。 12、不问收获,只问耕耘。如同种树 ,先有 根茎, 再有枝 叶,尔 后花实 ,好好 劳动, 不要想 太多, 那样只 会使人 胆孝懒 惰,因 为不实 践,甚 至不接 触社会 ,难道 你是野 人。(名 言网) 13、不怕,不悔(虽然只有四个字,但 常看常 新。 14、我在心里默默地为每一个人祝福 。我爱 自己, 我用清 洁与节 制来珍 惜我的 身体, 我用智 慧和知 识充实 我的头 脑。 15、这世上的一切都借希望而完成。 农夫不 会播下 一粒玉 米,如 果他不 曾希望 它长成 种籽; 单身汉 不会娶 妻,如 果他不 曾希望 有小孩 ;商人 或手艺 人不会 工作, 如果他 不曾希 望因此 而有收 益。-- 马钉路 德。
北邮数据结构第六章答案详解 图(1)
![北邮数据结构第六章答案详解 图(1)](https://img.taocdn.com/s3/m/7c3184d7ad51f01dc281f163.png)
1
5
1
54 3
42
5 66
图 6-8 图 G 答案:根据不同算法构造的最小生成树如图 6-9 所示的图(a)和(b)
2
④
⑤ 5
1
①
4 3
②
③
6
2
⑤
③ 5
1
①
4 3
④
②
6
(a) Prim 生成树
(b) Kruskal 生成树
图 6-9 最小生成树
5、算法设计
(1)以邻接表为存储结构,设计实现深度优先遍历的非递归算法。
int top = -1; cout<<v<<’\t’; bVisited[v] = true; stack[++top] = v;
//访问结点 v //设置访问标记 //结点 v 入栈
while (top!=-1)
{
v=stack[top];
ArcNode<T> *p = adjlist[v]. firstarc; ①
)
A.1
B. n/2
C.n-1
D.n
解析:若超过 n-1,则路径中必存在重复的顶点
答案:C
(5) 若一个图中包含有 k 个连通分量,若按照深度优先搜索的方法访问所有顶点,则必
须调用(
)次深度优先搜索遍历的算法。
A.k
B.1
C.k-1
D.k+1
解析:一次深度优先搜索可以访问一个连通分量中的所有结点,因此 k 个连通分量需要 调用 k 次深度优先遍历算法。
④
} if (p==NULL) top--;
⑤//若是找不到未访问的结点,出栈
北京邮电大学测控专业数据结构习题解
![北京邮电大学测控专业数据结构习题解](https://img.taocdn.com/s3/m/170e921ef46527d3250ce04b.png)
北京邮电大学自动化学院
13
第7章 思考题(不要求做)
3、某带权图的邻接矩阵表示为:
试完成下列要求:
(1)写出在该图上从顶 1
点1出发进行深度优先遍 2
历的顶点序列。
3
(2)画出该图的带权邻 4
接表;
5
6
(3)画出按普里姆算法 7
构造最小生成树的示意
图。
8
1 234
0 3 5
键字非递减排序,第一趟排序结果为{14,5,19,20,11, 19},问采用的排序算法是 希尔排序
(A)简单选择排序
(B)快速排序
(C)希尔排序
(D)二路归并排序
4、在所有排序方法中,关键字比较的次数与记录的初始排 列次序无关的是 选择排序
( A)希尔排序
(B)冒泡排序
( C)插入排序
6
15
第8章 作业
一、单项选择题
1、采用顺序查找法查找长度为n的线性表时,每个元素的平均查找长度
为C
。
(A)n (B)n/2 (C)(n+1)/2 (D) (n-1)/2
2、在一个长度为12的有序表,按折半查找法对该表进行查找,在表内各
元素等概率情况下查找成功所需的平均比较次数为 B
B、与处理冲突方法无关与表的长度有关
C、与处理冲突方法有关且与表的长度有关
D、与处理冲突方法无关且与表的长度无关
北京邮电大学自动化学院
17
二、填空题
第8章 作业
1、设线性表(a1,a2,…,a500)元素的值由小到大排列, 对一个给定的k值用折半法查找线性表,在查找不成功的情况
每次使两个相邻的有序表合并成一个有序表的排序方法叫做
(完整word)北邮C++数据结构课后习题 习题4参考答案
![(完整word)北邮C++数据结构课后习题 习题4参考答案](https://img.taocdn.com/s3/m/a45994080242a8956aece463.png)
习题41.填空题(1)已知二叉树中叶子数为50,仅有一个孩子的结点数为30,则总结点数为(___________)。
答案:129(2)4个结点可构成(___________)棵不同形态的二叉树。
答案:12(3)设树的度为5,其中度为1~5的结点数分别为6、5、4、3、2个,则该树共有(___________)个叶子。
答案:31(4)在结点个数为n(n〉1)的各棵普通树中,高度最小的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。
高度最大的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。
答案:2 n—1 1 n 1 n-1(5)深度为k的二叉树,至多有(___________)个结点。
答案:2k-1(6)有n个结点并且其高度为n的二叉树的数目是(___________)。
答案:2n—1(7)设只包含根结点的二叉树的高度为1,则高度为k的二叉树的最大结点数为(___________),最小结点数为(___________)。
答案:2k-1 k(8)将一棵有100个结点的完全二叉树按层编号,则编号为49的结点为X,其双亲PARENT(X)的编号为().答案:24(9)已知一棵完全二叉树中共有768个结点,则该树中共有(___________)个叶子结点。
答案:384(10)已知一棵完全二叉树的第8层有8个结点,则其叶子结点数是(___________).答案:68(11)深度为8(根的层次号为1)的满二叉树有(___________)个叶子结点。
答案:128(12)一棵二叉树的前序遍历是FCABED,中序遍历是ACBFED,则后序遍历是(___________).答案:ABCDEF(13)某二叉树结点的中序遍历序列为ABCDEFG,后序遍历序列为BDCAFGE,则该二叉树结点的前序遍历序列为(___________),该二叉树对应的树林包括(___________)棵树。
北邮数据结构与算法课后答案 第7章
![北邮数据结构与算法课后答案 第7章](https://img.taocdn.com/s3/m/bc5da26eddccda38376baf88.png)
于 n/2 则在后半区间继续查找。
int fun (Stable *L, int low, int high)
/*以第一个元素为基准分割下标在区间[low, high]内的元素序列*/
{L->elem[0]=L->elem[low] ;
K=L->elem[0].key;
while(low<high)
第7章
1.选择题
(1)A (2)C (3)C (4)D (5)D (6)C (7)B (8)C (9)D (10)C
2.判断题
(1)√ (2)Ⅹ (3)√ (4)Ⅹ (5)Ⅹ (6)√ (7)Ⅹ (8)√ (9)√ (10)√
3.简答题
(1)以关键字序列(tim,kay,eva,roy,dot,jon,kim,ann,tom,jim,guy,amy)为例,手工执行以下排序算法
j++;
}
} 4.已知记录序列 a[1..n]中的关键字各不相同,可按如下所述实现计数排序:另设数组 c[1..n],对每个 记录 a[i],统计序列中关键字比它小的记录个数存于 c[i],则 c[i]=0 的记录必为关键字最小的记录,然后依 c[i]值的大小对 a 中记录进行重新排列,试编写实现上述排序的算法。
{if (max=i) {w=r[min];r[min]=r[n-i+1];r[N-i+1]=w;} else {w=r[max];r[max]=r[n-i+1];r[N-i+1]=w;}
} i++; } } 【解答】这是一个双向选择排序算法,每次选择关键码最小的记录放在前面,同时选择关键码最大的记录 放在后面。比较 n*(n-1)/2 次。最好情况移动记录 0 次,最坏情况大约移动记录 3n 次。 (6)请回答以下关于堆的问题: 1)堆的存储结构是顺序的,还是链式的? 2)设有一个大顶堆,即堆中任意结点的关键码均大于它的左孩子和右孩子的关键码。其具有最大 值的元素可能在什么地方? 3)对 n 个元素进行初始建堆的过程中,最多做多少次数据比较? 【解答】1)堆的存储结构是顺序的。 2)堆顶。 3)不超过 4n。
北邮数据结构与算法课后答案第7章
![北邮数据结构与算法课后答案第7章](https://img.taocdn.com/s3/m/a621f1d86037ee06eff9aef8941ea76e58fa4a1d.png)
北邮数据结构与算法课后答案第7章第7章1.选择题(1)A (2)C (3)C (4)D (5)D (6)C (7)B (8)C (9)D (10)C2.判断题(1)√ (2)Ⅹ (3)√ (4)Ⅹ (5)Ⅹ (6)√ (7)Ⅹ (8)√ (9)√ (10)√3.简答题(1)以关键字序列(tim,kay,eva,roy,dot,jon,kim,ann,tom,jim,guy,amy)为例,手工执行以下排序算法(按字典序比较关键字的大小),写出每一趟排序结束时的关键字状态:1)直接插入排序;2)冒泡排序;3)直接选择排序;4)快速排序;5)归并排序;6)基数排序。
【解答】略。
(2)已知序列{50,18,12,61,8,17,87,25},请给出采用堆排序对该序列做升序排序时的每一趟结果。
【解答】堆排序过程如下图示:1887 12178255061618712178185025(3)有n个不同的英文单词,它们的长度相等,均为m,若n>>50,m<5,试问采用什么排序方法时间复杂度最小?为什么?【提示】采用基数排序。
基数排序是一种借助多关键码排序思想对单关键码进行排序的方法,它适合n很大,而关键码较小的序列。
本题中英文单词数目n>>50,而单词长度m<5,因此采用基数排序方法最佳。
(4)如果只想得到一个含有n个元素的序列中第k(k<<n)小元素之前的部分排序序列,最好采用什么排序方法?为什么?如有这样一个序列:{57,11,25,36,18,80,22}得到其第3个最小元素之前的部分序列{11,18,22},使用所选择的算法实现时,要执行多少次比较?< p="">【解答】采用堆排序。
简单选择排序和冒泡排序可以在一趟排序后选出一个最大(或最小)元素,要比较n-1次,选次大元素要再比较n-2次,…其时间复杂度是O(n2)。
当k<<n时,从n个元素中选k 个元素不能使用这种方法。
北邮算法与数据结构习题参考答案
![北邮算法与数据结构习题参考答案](https://img.taocdn.com/s3/m/eda08b0ff705cc1754270964.png)
作业参考答案一、〔带头结点〕多项式乘法 C = A×B:void PolyAdd ( list &C, list R) // R 为单个结点{p=C;while ((!p->next) && (p->next->exp>R->exp)) p=p->next; if ((p->next) || (p->next->exp<R->exp)){ R->next=p->next; p->next=R; } else{ p->next->inf += R->inf; delete R;if ( ! p->next->inf ){ R=p->next; p->next=R->next; delete R; } }}void PolyMul ( list A, list B, list &C ){C=new struct node; C->next=NULL; q=B->next;While ( q ){p=A->next;while ( p ){r = new struct node; r->exp = p->exp + q->exp;r->inf = p-> inf * q->inf; PolyAdd(C, r);p=p->next;}q=q->next;}}二、梵塔的移动次数:已知移动次数迭代公式为:M ( n ) = 2M ( n-1 ) + 1初值为:M ( 0 ) = 0则:M ( n ) = 2 ( 2M ( n-2 ) + 1 ) + 1= 4M ( n-2 ) + 3= 8M ( n-3 ) + 7= 2i M ( n-i ) + 2i– 1假设n=i ,则M ( n-n ) = 0,故:M ( n ) = 2n M ( n-n ) + 2n– 1= 2n– 1所以,梵塔的移动次数为2n– 1次。
北邮C++数据结构课后习题 习题6参考答案
![北邮C++数据结构课后习题 习题6参考答案](https://img.taocdn.com/s3/m/56537aa07f1922791688e8c4.png)
习题61.填空题(1)由10000个结点构成的二叉排序树,在等概率查找的条件下,查找成功时的平均查找长度的最大值可能达到(___________)。
答案:5000.5(2)长度为11的有序序列:1,12,13,24,35,36,47,58,59,69,71进行等概率查找,如果采用顺序查找,则平均查找长度为(___________),如果采用二分查找,则平均查找长度为(___________),如果采用哈希查找,哈希表长为15,哈希函数为H(key)=key%13,采用线性探测解决地址冲突,即d i=(H(key)+i)%15,则平均查找长度为(保留1位小数)(___________)。
答案:6,3,1.6(3)在折半查找中,查找终止的条件为(___________)。
答案:找到匹配元素或者low>high?(4)某索引顺序表共有元素275个,平均分成5块。
若先对索引表采用顺序查找,再对块元素进行顺序查找,则等概率情况下,分块查找成功的平均查找长度是(___________)。
答案:31(5)高度为8的平衡二叉树的结点数至少是(___________)。
答案: 54 计算公式:F(n)=F(n-1)+F(n-2)+1(6)对于这个序列{25,43,62,31,48,56},采用的散列函数为H(k)=k%7,则元素48的同义词是(___________)。
(7)在各种查找方法中,平均查找长度与结点个数无关的查找方法是(___________)。
答案:散列查找(8)一个按元素值排好的顺序表(长度大于2),分别用顺序查找和折半查找与给定值相等的元素,平均比较次数分别是s和b,在查找成功的情况下,s和b的关系是(___________);在查找不成功的情况下,s和b的关系是(___________)。
答案:(1)(2s-1)b=2s([log2(2s-1)]+1)-2[log2(2s-1)]+1+1(2)分两种情况考虑,见解答。
(完整版) 《数据结构》教材课后习题+答案
![(完整版) 《数据结构》教材课后习题+答案](https://img.taocdn.com/s3/m/a10462b277232f60dccca154.png)
第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
3.简述逻辑结构的四种基本关系并画出它们的关系图。
4.存储结构由哪两种基本的存储方法实现?5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。
A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。
A.存储结构B.存储实现C.逻辑结构D.运算实现(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。
A.数据具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等(4)以下说法正确的是()。
A.数据元素是数据的最小单位B.数据项是数据的基本单位C.数据结构是带有结构的各数据项的集合D.一些表面上很不相同的数据可以有相同的逻辑结构(5)以下与数据的存储结构无关的术语是()。
A.顺序队列 B. 链表 C. 有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构A.树B.字符串C.队D.栈6.试分析下面各程序段的时间复杂度。
(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(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.选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。
《数据结构》课后参考答案
![《数据结构》课后参考答案](https://img.taocdn.com/s3/m/7153132511a6f524ccbff121dd36a32d7375c7a7.png)
《数据结构》课后参考答案第一题:1. 什么是数据结构?数据结构是一种组织和存储数据的方式,它涉及到数据的逻辑关系、数据元素之间的操作和存储方式等。
数据结构可以帮助我们更有效地组织和管理数据,提高程序的运行效率。
第二题:2. 请简述线性表和链表的区别。
线性表是一种线性结构,其中的数据元素按照线性的顺序排列。
线性表可以使用数组实现,也可以使用链表实现。
链表是一种动态数据结构,它通过节点之间的指针连接来存储数据元素。
主要区别:- 存储方式:线性表使用静态的连续内存空间存储,而链表使用动态的节点存储,并通过指针连接节点。
- 插入和删除操作:线性表需要移动数组中的元素,而链表只需要修改指针指向即可。
- 访问效率:线性表可以通过下标直接访问元素,访问效率高;链表需要从头节点开始逐个遍历,访问效率较低。
第三题:3. 请描述栈和队列的特点及其应用场景。
栈和队列都是常用的线性数据结构,它们在不同的场景中有着不同的特点和应用。
栈的特点:- 先进后出(LIFO)的数据结构。
- 只能在栈顶进行插入和删除操作。
- 用途广泛,如函数调用、表达式求值、计算机内存的管理等。
队列的特点:- 先进先出(FIFO)的数据结构。
- 可以在队尾插入元素,在队头删除元素。
- 用途广泛,如任务调度、消息传递、广度优先搜索等。
第四题:4. 请简述树和图的区别以及它们的应用场景。
树和图都是常用的非线性数据结构,它们之间有着一些区别和各自的应用场景。
树的特点:- 由节点和边组成的层次结构。
- 每个节点最多有一个父节点和多个子节点。
- 常用的树结构有二叉树、平衡二叉树、B树等。
- 应用场景包括文件系统、数据库索引等。
图的特点:- 由节点和边组成的非线性结构。
- 节点之间的关系可以是任意的。
- 常用的图结构有有向图、无向图、加权图等。
- 应用场景包括社交网络、路由算法、拓扑排序等。
综上所述,数据结构是计算机科学的重要基础,它为我们解决实际问题提供了有力的工具和方法。
北邮C++数据结构课后习题 习题5参考答案
![北邮C++数据结构课后习题 习题5参考答案](https://img.taocdn.com/s3/m/65a2f170581b6bd97f19eac4.png)
习题51.填空题(1)n个顶点的无向图,最多能有(___________)条边。
答案:[n*(n-1)]/2(2)有n个顶点的强连通图G至少有(___________)条弧。
答案:n(3)G为无向图,如果从G的某个顶点出发,进行一次广度优先遍历,即可访问图的每个顶点,则该图一定是(___________)图。
答案:连通(4)若采用邻接矩阵结构存储具有n个顶点的图,则对该图进行广度优先遍历的算法时间复杂度为(___________)。
答案:O(n2)(5)n个顶点的连通图的生成树有(___________)条边。
答案:n-1(6)图的深度优先遍历类似于树的(___________)遍历;图的广度优先遍历类似于树的(___________)遍历。
答案:前序层序(7)对于含有n个顶点e条边的连通图,用普里姆算法求最小生成树的时间复杂度为(___________)。
答案:O(n2)(8)已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为(___________)。
答案:O(n+e)(9)一棵具有n个顶点的生成树有且仅有(___________)条边。
答案:n-12.单选题(1)在一个无向图中,所有顶点的度数之和等于所有边数的()倍。
A. 1/2B. 1C. 2D. 4(2)在一个具有n个顶点的有向图中,若所有顶点的出度数之和为S,则所有顶点的度数之和为()。
A. SB. S-1C. S+1D. 2S(3)具有n个顶点的有向图最多有()条边。
A. nB. n(n-1)C. n(n+1)D. 2n(4)在一个无向图中,所有顶点的度数之和等于所有边数的()倍。
A.3B.2C.1D.1/2(5)若一个图中包含有k个连通分量,若按照深度优先搜索的方法访问所有顶点,则必须调用()次深度优先搜索遍历的算法。
A. kB. 1C. k-1D. k+1(6)若一个图的边集为{<1,2>,<1,4>,<2,5>,<3,1>,<3,5>,<4,3>},则从顶点1开始对该图进行深度优先遍历,得到的顶点序列可能为()。
北邮C++数据结构课后习题 习题3参考答案
![北邮C++数据结构课后习题 习题3参考答案](https://img.taocdn.com/s3/m/2e9b3575844769eae009edc4.png)
习题31.填空题(部分答案)(1)栈的进出原则是(___________),队列的进出原则是(___________)。
答案:后进先出(LIFO)先进先出(FIFO)(2)设32位计算机系统中,空栈S存储int型数据,栈顶指针为1024H。
经过操作序列push(1),push(2),pop,push(5),push(7),pop,push(6)之后,栈顶元素为(___________),栈底元素为(___________),栈的高度为(___________),输出序列是(___________),栈顶指针为(___________)H。
答案:6 1 3 2,7 1030(3)两栈共享存储空间,其数组大小为100,数组下标从0开始。
top1和top2分别为栈1和栈2的栈顶元素下标,则栈1为空的条件为(___________),栈2为空的条件为(___________),栈1或栈2满的条件为(___________)。
答案:top1==-1 top2==100 top1+1==top2(4)一个队列的入队顺序是1234,则队列的输出顺序是(___________)。
答案:1234(5)设循环队列数组大小为100,队头指针为front,队尾指针为rear;约定front指向队头元素的前一个位置,该位置永远不存放数据。
则入队操作时,修改rear=(___________),出队操作修改front=(___________),队空的判别条件为(___________),队满的判别条件为(___________)。
若front=20,rear=60,则队列长度为(___________),若front=60,rear=20,则队列长度为(___________)。
答案:(rear+1)%100 (front+1)%100 rear==front (rear+1)%100=front 40 60(6)朴素模式匹配算法中,每个串的起始下标均为1,变量i=100,j=10,分别表示主串和模式串当前比较的字符元素下标,若本次比较两字符不同,则i回溯为(___________),j 回溯为(___________)。
数据结构(第二版)课后习题答案
![数据结构(第二版)课后习题答案](https://img.taocdn.com/s3/m/2fd273fc0d22590102020740be1e650e53eacf43.png)
数据结构(第二版)课后习题答案第一章:数据结构概述数据结构是计算机科学中非常重要的一个概念,它用于组织和管理计算机内部存储的数据。
数据结构的设计直接影响到程序的运行效率和对真实世界问题的建模能力。
第二版的《数据结构》教材旨在帮助读者更好地理解和应用数据结构。
为了提高学习效果,每章节后都附有一系列习题。
本文将为第二版《数据结构》教材中的部分习题提供详细的答案和解析。
第二章:线性表2.1 顺序表习题1:请问如何判断顺序表是否为空表?答案:当顺序表的长度为0时,即为空表。
解析:顺序表是用一块连续的内存空间存储数据元素的线性结构。
当顺序表中没有元素时,长度为0,即为空表。
习题2:如何求顺序表中第i个元素的值?答案:可以通过访问顺序表的第i-1个位置来获取第i个元素的值。
解析:顺序表中的元素在内存中是连续存储的,通过下标访问元素时,需要将下标减1,因为数组是从0开始编号的。
2.2 链表习题1:请问链表中的结点包含哪些信息?答案:链表的结点一般包含两部分信息:数据域和指针域。
解析:数据域用于存储数据元素的值,指针域用于存储指向下一个结点的指针。
习题2:如何删除链表中的一个结点?答案:删除链表中的一个结点需要将其前一个结点的指针指向其后一个结点,然后释放被删除结点的内存空间。
解析:链表的删除操作相对简单,只需要通过修改指针的指向即可。
但需要注意释放被删除结点的内存空间,防止内存泄漏。
第三章:栈和队列3.1 栈习题1:如何判断栈是否为空?答案:当栈中没有任何元素时,即为空栈。
解析:栈是一种先进后出(Last In First Out,LIFO)的数据结构,栈顶指针指向栈顶元素。
当栈中没有元素时,栈顶指针为空。
习题2:请问入栈和出栈操作的时间复杂度是多少?答案:入栈和出栈操作的时间复杂度均为O(1)。
解析:栈的入栈和出栈操作只涉及栈顶指针的改变,不受栈中元素数量的影响,因此时间复杂度为O(1)。
3.2 队列习题1:请问队列可以用哪些方式实现?答案:队列可以用数组或链表来实现。
数据结构课后答案_北邮
![数据结构课后答案_北邮](https://img.taocdn.com/s3/m/44bf282258fb770bf78a55fd.png)
(5)顺序表多采用(___________)实现的,是一种随机存取结构,对表中任意结点存取操作的时间复杂度为(___________)。而查找链表中的结节,需要从头指针起顺着链扫描才能得到,平均时间复杂度为(___________)。因此,若线性表的操作主要是进行查找,很少进行插入或删除操作时,采用(___________)表比较合适。
#include"vector"
usingstd::vector;
//定义自然数类classNatural Nhomakorabeaumber{
public:
NaturalNumber(unsignedlongintn=0):num(n){}
unsignedlongintGreatestCommonDivisor(NaturalNumber & nn);//求解最大公约数
C.随机存取顺序存取D.索引存取散列存取
(2)在双向链表p所指结点之前插入s所指结点的操作是()。
A. p->left=s; s->right=p; p->left->right =s; s->left=p->left;
B. p->right=s; p->right->left=s; s->left=p; s->right=p->right;
m = n; n = r; r = m % n;
}
returnn;
}
//返回最大公约数
unsignedlongintNaturalNumber :: GreatestCommonDivisor(NaturalNumber & nn)
{
returnEUCLID(nn);
北邮C++数据结构课后习题 习题2参考答案
![北邮C++数据结构课后习题 习题2参考答案](https://img.taocdn.com/s3/m/2e44953e69eae009581becc4.png)
习题21.填空题(1)在一个单链表中,已知每个结点包含data和next两个域,q所指结点是p所指结点的直接前驱,若在q和p之间插入s所指结点,则执行(___________)和(___________)操作。
答案:q->next = s; s->next = p; 或s->next=q->next; q->next = s;(2)表长为n的顺序表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均个数为(___________),删除一个元素需要移动元素的平均个数为(___________)。
答案:n/2 (n-1)/2(3)表长为0的线性表称为(___________)。
答案:空表(4)动态内存管理是操作系统的基本功能之一,其作用是响应用户程序对内存的(___________)和(___________)请求。
答案:申请释放(5)顺序表多采用(___________)实现的,是一种随机存取结构,对表中任意结点存取操作的时间复杂度为(___________)。
而查找链表中的结节,需要从头指针起顺着链扫描才能得到,平均时间复杂度为(___________)。
因此,若线性表的操作主要是进行查找,很少进行插入或删除操作时,采用(___________)表比较合适。
答案:数组 O(1) O(n) 顺序(6)在链表某个位置上进行插入和删除操作,只需要修改(___________)即可,而无须移动大量元素,操作的时间复杂度为(___________)。
而在顺序表中进行插入和删除操作,往往要移动大量元素,平均移动元素的数目为(___________),平均时间复杂度为(___________)。
因此,若对线性表进行频繁的插入和删除操作时,采用(___________)表相对合适。
若插入和删除主要发生在表头和表尾,则采用(___________)表更为合适。
北邮C++数据结构课后习题 习题7参考答案
![北邮C++数据结构课后习题 习题7参考答案](https://img.taocdn.com/s3/m/345121f95fbfc77da269b1fb.png)
(5)对n个待排序元素序列进行快速排序,所需最好时间是(___________),最坏时间是(___________)。
答案:O(nlogn) O(n2)
(6)利用简单选择排序对n个元素进行排序,最坏情况下,元素交换的次数为(___________)。
答案:n-1
(7)如果将序列{50,16,23,68,94,70,73}建成堆,只需把16与(___________)交换。
答案:50
(8)对于键值序列{12,13,11,18,60,15,7,18,25,100},用筛选法建堆,必须从键值为(___________)的结点开始。
答案:60
(9)采用改进的冒泡排序对有n个记录的表A按键值递增排序,若L的初始状态是按键值递增,则排序过程中记录的比较次数为(___________)。若A的初始状态为递减排序,则记录的交换次数为(___________)。
(1)(19,78,32,66,26,58,46,95,89,31);
(2)(113,98,69,35,68,25,43,19,6,31,58,46,95,89,78)
(2)(16,19,25,31,55,29,43,35,113,98,68,69)
A.插入B.冒泡C.二路归并D.堆
(10)就平均性能而言,最快的排序方法是()。
A.冒泡排序B.希尔排序C.快速排序D.插入排序
(11)下面哪一种排序算法是基于比较的排序()。
A.计数排序B.桶排序C.基数排序D.插入排序
3.判断以下序列是否为小(顶)根堆?若否,则以最少的移动次数将他们调整为小(顶)根堆。(要求画出最后的堆结构和线性序列)
A. {38,46,79,56,40,84}B. {38,79,56,46,40,84}
北邮C++数据结构课后习题 习题3参考答案
![北邮C++数据结构课后习题 习题3参考答案](https://img.taocdn.com/s3/m/2e9b3575844769eae009edc4.png)
习题31.填空题(部分答案)(1)栈的进出原则是(___________),队列的进出原则是(___________)。
答案:后进先出(LIFO)先进先出(FIFO)(2)设32位计算机系统中,空栈S存储int型数据,栈顶指针为1024H。
经过操作序列push(1),push(2),pop,push(5),push(7),pop,push(6)之后,栈顶元素为(___________),栈底元素为(___________),栈的高度为(___________),输出序列是(___________),栈顶指针为(___________)H。
答案:6 1 3 2,7 1030(3)两栈共享存储空间,其数组大小为100,数组下标从0开始。
top1和top2分别为栈1和栈2的栈顶元素下标,则栈1为空的条件为(___________),栈2为空的条件为(___________),栈1或栈2满的条件为(___________)。
答案:top1==-1 top2==100 top1+1==top2(4)一个队列的入队顺序是1234,则队列的输出顺序是(___________)。
答案:1234(5)设循环队列数组大小为100,队头指针为front,队尾指针为rear;约定front指向队头元素的前一个位置,该位置永远不存放数据。
则入队操作时,修改rear=(___________),出队操作修改front=(___________),队空的判别条件为(___________),队满的判别条件为(___________)。
若front=20,rear=60,则队列长度为(___________),若front=60,rear=20,则队列长度为(___________)。
答案:(rear+1)%100 (front+1)%100 rear==front (rear+1)%100=front 40 60(6)朴素模式匹配算法中,每个串的起始下标均为1,变量i=100,j=10,分别表示主串和模式串当前比较的字符元素下标,若本次比较两字符不同,则i回溯为(___________),j 回溯为(___________)。
北邮数据结构与算法课后答案 第6章
![北邮数据结构与算法课后答案 第6章](https://img.taocdn.com/s3/m/fe24332d482fb4daa58d4b89.png)
void PrintNode (BiSTree T)
{if(T)
{PrintNode(T->rchild);
printf( T->data) ;
PrintNode(T->lchild);
}
} 5.已知一棵二叉排序树上所有关键字中的最小值为-max,最大值为 max,又知-max<x<max。编写递 归算法,求该二叉排序树上的小于 x 且最靠近 x 的值 a 和大于 x 且最靠近 x 的值 b。 【提示】解决本题的关键是递归函数的参数设置,采用逐渐缩小查找区间的方法来实现。
ASLSUCC=(1+2+…+12)/12=6.5 这种情况就退化成为顺序查找。
(3)试推导含有 12 个结点的平衡二叉树的最大深度,并画出一棵这样的树。 令 Fk 表示含有最少结点的深度为 k 的平衡二叉树的结点数目。那么,可知道 F1=1,F2=2,.....Fn=Fn-2+Fn-1+1. 含有 12 个结点的平衡二叉树的最大深度为5.例如:
typedef struct BiTNode
{datatype data;
int lsize;
struct BiTNode *lchild, *rchild; }BiTNode ,*BiTree;
/*增设 lsize 域的二叉树的类型定义*/
BiTree Index (BiTree T, int k)
/*结点的平衡因子*/ /*带平衡因子域的平衡二叉树的类型定义*/ /*求平衡二叉树 T 的高度*/
p=t;
while(p) {level++; if(p->bf<0) p=p->rchild; else p=p->lchild; }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{ return EUCLID(nn); } //返回最小公倍数 unsigned long int NaturalNumber :: LeaseCommonMultiple(NaturalNumber & nn) { unsigned long int temp = EUCLID(nn); return num * nn.GetNumber() / temp; } int NaturalNumber :: GetFactors( vector <unsigned long int> & factors ) { int t=0; int m = sqrt((double)num); vector <unsigned long int> bigfactors; for (unsigned long int i=1;i<m;i++) { if ( 0 == num%i ) {t+=2; factors.push_back(i);bigfactors.push_back(num/i);} } if ( m*m == num ) { t++; factors.push_back(m);} vector <unsigned long int> ::iterator it=bigfactors.end(); if (bigfactors.size()) do { it--; factors.push_back(*it); }while (it!=bigfactors.begin()); return t; } void main() { NaturalNumber p(1); int xx = p.GreatestCommonDivisor(NaturalNumber(120)); int yy = p.LeaseCommonMultiple(NaturalNumber(120)); vector <unsigned long int> f; int t = p.GetFactors(f); }
i 0 j i 1 i 0 n 2 n 1 n2
(n 1)n 2
3. 分析以下程序段的时间复杂度。 (1)for (i=l; i<=n; i++) { k++; for (j=1; j<=n; j++) m += k; } (3)i=1; while (i<=n) i *= 2; (5)k=100,i=10; do { if (i<n) break; i++; }while (i<k); (7)y=0; while (y*y*y <= n) y++; (8)int i=0; while(i<n && a[i]!=k) i++; return i==n?-1:i ;
习题 2
1. 填空题 (1)在一个单链表中,已知每个结点包含 data 和 next 两个域,q 所指结点是 p 所指结点的 直接前驱,若在 q 和 p 之间插入 s 所指结点,则执行(___________)和(___________)操 作。
答案:q->next = s; s->next = p; 或 s->next=q->next; q->next = s; (2)表长为 n 的顺序表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元 素所需移动元素的平均个数为(___________) ,删除一个元素需要移动元素的平均个数为 (___________) 。 答案:n/2 (n-1)/2 (3)表长为 0 的线性表称为(___________) 。 答案:空表 (4)动态内存管理是操作系统的基本功能之一,其作用是响应用户程序对内存的 (___________)和(___________)请求。 答案:申请 释放 (5)顺序表多采用(___________)实现的,是一种随机存取结构,对表中任意结点存取操 作的时间复杂度为(___________)。而查找链表中的结节,需要从头指针起顺着链扫描才 能得到,平均时间复杂度为(___________)。因此,若线性表的操作主要是进行查找,很 少进行插入或删除操作时,采用(___________)表比较合适。 答案:数组 O(1) O(n) 顺序 (6)在链表某个位置上进行插入和删除操作,只需要修改(___________)即可,而无须移 动大量元素,操作的时间复杂度为(___________)。而在顺序表中进行插入和删除操作, 往往要移 动大量元素,平均移动 元素的数目为 ( ___________ ),平 均时间复杂 度为 (___________)。因此,若对线性表进行频繁的插入和删除操作时,采用(___________) 表相对合适。若插入和删除主要发生在表头和表尾,则采用(___________)表更为合适。 答案:指针 O(1) 表长的一半 O(n) 链 循环链 (7)静态链表一般采用(___________)存储的链表结构。 答案:数组 (8) 对于 32 位计算机环境, 若单链表中的数据类型为整性, 则其存储密度为 (___________) , 而若为双链表,则存储密度为(___________)。若采用顺序表存储数据,则其存储密度为 (___________) 。 答案:50% 33% 1 ( 9 ) 向 量 是 最 常 用 的 容 器 , STL 中 向 量 使 用 ( ___________ ) 实 现 , 因 此 向 量 具 有 (___________)表的所有特点,可以快速随机存取任意元素。 答案:数组 顺序 (10)操作系统在运行之初,有一块很大的连续内存块供用户程序申请,通常称之为内存池 或(___________)。 答案:堆 (11)循环链表与单链表的区别仅仅在于其尾结点的链域值不是(___________) ,而是一个 指向(___________)的指针。 答案:NULL(或空指针) 头结点 2. 选择题 (1)线性表的顺序存储结构是一种( )的存储结构,线性表的链式存储结构是一 种( )的存储结构。 A. 随机存取 索引存取 B. 顺序存取 随机存取 C. 随机存取 顺序存取 D. 索引存取 散列存取 (2)在双向链表 p 所指结点之前插入 s 所指结点的操作是( ) 。 A. p->left=s; s->right=p; p->left->right =s; s->left=p->left; B. p->right=s; p->right->left=s; s->left=p; s->right=p->right;
#include "math.h" #include "vector" using std::vector; //定义自然数类 class NaturalNumber{ public: NaturalNumber(unsigned long int n=0):num(n){} unsigned long int GreatestCommonDivisor(NaturalNumber & nn);//求解最大公约数 unsigned long int LeaseCommonMultiple(NaturalNumber & nn);//求解最小公约数 int GetFactors(vector <unsigned long int> & factors); 中,函数返回因子个数 unsigned long int GetNumber(){return num;} //……其它外部接口 private: unsigned long int EUCLID(NaturalNumber & n); //欧几里德算法求解最大公约数 unsigned long int num; //存储真正的自然数 }; //返回欧几里德算法求解最大公约数 unsigned long int NaturalNumber :: EUCLID(NaturalNumber & nn) { unsigned long int m = (num > nn.num) ? num : nn.num; //较大的自然数赋值给m unsigned long int n = (num < nn.num) ? num : nn.num; //较小的自然数赋值给n unsigned long int r = m % n; while (r != 0){ m = n; n = r; r = m % n; } return n; } //返回最大公约数 unsigned long int NaturalNumber :: GreatestCommonDivisor(NaturalNumber & nn) //求所有因子,存储在factors
习题 1
1. 填空题 (1) (___________)是指数据之间的相互关系,即数据的组织形式。通常人们认为它包含 三个方面的内容,分别为数据的(___________) 、 (___________)及其运算。 答案:数据结构 逻辑结构 存储结构 (2) (___________)是数据的基本单位,在计算机程序中通常作为一个整体进行处理。 答案:数据元素 (3) 数据元素之间的不同逻辑关系代表不同的逻辑结构, 常见的逻辑结构有 (___________) 、 (___________) 、 (___________)和(___________) 。 答案:集合 线形结构 树结构 图结构 (4)数据的存储结构考虑的是如何在计算机中存储各个数据元素,并且同时兼顾数据元素 间的逻辑关系。基本的存储结构通常有两大类: (___________)和(___________) 。 答案:顺序存储结构 链式存储结构 (5)通常一个问题可以有多种不同的算法,但每个算法必须满足 5 个准则:输入、输出、 (___________) 、 (___________)和(___________) 。 答案:有穷性 确定性 可行性 (6)通常通过衡量算法的(___________)复杂度和(___________)复杂度来判定一个算 法的好坏。 答案:时间 空间 (7)常见时间复杂性的量级有:常数阶 O(___________) 、对数阶 O(___________) 、线 性阶 O(___________) 、线性对数阶 O(___________) 、平方阶 O(___________) 、和指数 阶 O(___________) 。通常认为,当问题规模较大时,具有(___________)量级的算法是 不可计算的。 答案:1 logn n nlogn n2 2n 指数 (8)STL 提供的标准容器有顺序容器、 (___________)和(___________) 。 答案:排序容器 哈希容器 (9)算法可认为是 STL 的精髓,所有算法都是采用(___________)的形式提供的。 答案:函数模版 (10) 通常认为 STL 由空间管理器、 迭代器、 泛函、 适配器、 (___________) 和 (___________) 等六部分构成,其中前面四部分服务于后面两部分。 答案:容器 算法 2. 选择题 (1)以下结构中, ( )属于线性结构。 A. 树 B. 图 C. 串 D. (2)算法描述的方法有很多种,常常将( )称为算法语言。 A. 自然语言 B. 流程图 C. 伪代码 D. (3)现实生活中的家族谱,可认为是一种( )结构。 A. 树 B. 图 C. 集合 D. (4)手机中存储的电话号码簿,可认为是一种( )结构。 A. 树 B. 图 C. 集合 D. (5)NP 问题是( ) 。