数据结构(第二次作业)
数据结构第二次作业答案(C语言版)07
数据结构第二次作业答案(C语言版)07数据结构第二次作业答案(C语言版)-07数据结构第二次作业答案学号:姓名:评分: . 一. 单项选择题(20分)( )1. 某二叉树的先序序列和后序序列正好相反,则该二叉树一定是____b____的二叉树。
a. 空或只有一个结点b. 高度等于其结点数(空树高度为0) c. 任一结点无左孩子 d. 任一结点无右孩子( )2. 设图的顶点数=n, 边数=e,若用邻接表表示图,那么求最短路径的Dijkstra算法的时间复杂度为_____b____。
a.O(n_e)b.O(n2)c.O(n+e)d.O(n3)( )3. 一棵左右子树均不为空的二叉树在后序线索化后(不带头结点的线索化),其空指针域数为____b_____。
a、0b、1c、2d、不确定 ( )4. 下面程序段的时间复杂度是____d_____。
i=1; while(i_lt;=n) i=i_2;a. O(n)b. O(n2)c. O(2n)d. O(log2n)( )5. 在有n(_gt;0)个结点且为完全二叉树的二叉排序树中查找一个键值,其平均比较次数的数量级为_____b______。
a. O(n)b. O(log2n)c. O(nlog2n)d. O(n2)( )6. 采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分为____b____个结点最佳。
a. 10 b. 25 c. 6 d. 625( )7. 下列排序算法中时间复杂度不受数据初始状态影响,恒为O(n2)的是____c______。
a、堆排序b、起泡排序c、直接选择排序d、快速排序( )8. 已知数据表中的每个元素距其最终位置不远,则采用____b___排序算法最省时间。
a.堆排序b.插入排序c.快速排序d.直接选择排序( )9. 假设图的顶点数=n, 边数=e,那么当用邻接表表示图时,拓扑排序算法的时间复杂度为____b_____。
数据结构习题二答案
数据结构习题二答案问题一:链表的基本操作链表是一种常见的线性数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。
链表的基本操作包括:1. 创建节点:定义一个节点类,包含数据域和指向下一个节点的指针域。
2. 插入操作:在链表的指定位置插入一个新的节点。
3. 删除操作:删除链表中的指定节点。
4. 遍历操作:从头节点开始,依次访问链表中的每个节点。
问题二:二叉树的遍历二叉树是一种特殊的树形数据结构,其中每个节点最多有两个子节点。
二叉树的遍历方式有:1. 前序遍历:首先访问根节点,然后递归地遍历左子树,最后递归地遍历右子树。
2. 中序遍历:首先递归地遍历左子树,然后访问根节点,最后递归地遍历右子树。
3. 后序遍历:首先递归地遍历左子树,然后递归地遍历右子树,最后访问根节点。
问题三:图的表示图是一种复杂的非线性数据结构,由顶点和边组成。
图的表示方法有:1. 邻接矩阵:使用一个二维数组来表示图,其中矩阵的元素表示两个顶点之间的边是否存在。
2. 邻接表:使用链表来表示每个顶点的邻接顶点。
问题四:排序算法排序算法是将一组数据按照特定顺序重新排列的过程。
常见的排序算法包括:1. 冒泡排序:通过重复遍历待排序的数列,比较每对相邻元素的大小,并在必要时交换它们的位置。
2. 选择排序:从未排序序列中找到最小(或最大)的元素,存放到排序序列的起始位置,然后从剩余未排序元素中继续寻找最小(或最大)元素,以此类推。
3. 快速排序:选择一个元素作为“基准”,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再递归地对这两部分数据分别进行快速排序。
总结数据结构习题二涵盖了链表、二叉树、图和排序算法等基本概念和操作。
掌握这些基础知识对于深入理解计算机科学和进行高效的程序设计至关重要。
希望以上答案能够帮助你更好地理解和应用这些概念。
请注意,这只是一个示例答案,具体的习题答案需要根据实际的习题内容来编写。
数据结构 第二次作业 测验答案 慕课答案 作业二 UOOC优课 课后练习 深圳大学
数据结构第二次作业一、单选题 (共100.00分)1. 数组的存储方式有以下两种()A. 顺序表和链表B. 堆栈和队列C. 行优先和列优先D. 对称矩阵和三角矩阵正确答案:C2. 广义表的表头是指()A. 表中第一个元素B. 表中最后一个元素C. 除表中第一个元素以外,其余元素组成的子表D. 除表中最后一个元素以外,其余元素组成的子表正确答案:A3. 广义表的表尾是指()A. 表中第一个元素B. 表中最后一个元素C. 除表中第一个元素以外,其余元素组成的子表D. 除表中最后一个元素以外,其余元素组成的子表正确答案:C4. 已知二维数组有4行5列,首元素的数组下标为a00,则数组最后一个元素的数组下标是()A. a44B. a55C. a45D. a34正确答案:D5. 已知对称矩阵有4行4列,必定与元素a23相等的元素是()A. a32B. a33C. a00D. a22正确答案:A6. 已知矩阵A有4行5列,矩阵首元素下标为[0,0],每个元素使用4个字节,现用一维数组B存储该矩阵,数组B的内存首址为10000,若采用行序为主,矩阵元素A[3, 2]在内存的地址是()A. 10052B. 10068C. 10005D. 10020正确答案:B7. 已知广义表L=((x,y,z),a,(u,t,w)),假设head表示取表头运算,tail表示取表尾运算,求head(tail(L))的结果是()A. uB. (x)C. aD. (u, t, w)正确答案:C8. 以下哪一种是串在计算机中的常见表示方式()A. 定长顺序B. 堆分配C. 块链D. 前三种都是正确答案:D9. 在数据结构中,串可以等同于()的处理A. 整数串B. 浮点数串C. 字符串D. 多种类型的数组正确答案:C10. 以下哪一种是串匹配的常用算法()A. 普里姆算法B. 克鲁斯卡尔算法C. KMP算法D. 关键路径算法正确答案:C已知主串为abcbcaddabc,模式串为cad,假设串位置从1开始,则串匹配位置是()A. 3B. 5C. 7D. 不存在正确答案:B12. 已知串S的内容为1+2+3,以下描述哪一个是正确的()A. 串S的长度是6B. 串S的运算结果是6C. 整数1是串S的子串D. 符号+是串S的子串正确答案:D以下描述哪一个是正确的()A. 串是字符有限序列B. 串是整数、浮点数、字符等多种数据的有限序列C. 只包含空格的串称为空串D. 串只能使用顺序表存储正确答案:A串函数Sub(S, x, y)表示在串S中,从x位置开始,取出y个字符,串位置从1开始计算。
奥鹏东北大学 21春学期《数据结构Ⅱ》在线平时作业2 (544).doc
下列程序段 for(i=1;i<=n;i++) A[I,j]=0; 的时间复杂度是A.O(1)B.O(0)C.O(1n)D.O(n)【参考答案】: D2.以下数据结构中,属于线性结构的是A.广义表B.二叉树C.稀疏矩阵D.串【参考答案】: A3.某二叉树的先序序列和后序序列正好相反,则该二叉树的特点一定是A.空或只有一个结点B.高度等于其结点数C.任一结点无左孩子D.任一结点无右孩子【参考答案】: B在一个单链表中,已知q结点是p结点的前驱结点,若在q 和p之间插入结点s,则执行操作A. s->next=p->next;p->next=s;B. s->next=p; q->next=sC.q->next=s;s->next=p;D.p->next=s;s->next=q;【参考答案】: B5.在以单链表为存储结构的线性表中,数据元素之间的逻辑关系用A. 数据元素的相邻地址表示B. 数据元素在表中的序号表示C.指向后继元素的指针表示D.数据元素的值表示【参考答案】: C已知一个散列表如图所示,其散列函数为H(key)=key%11,采用二次探查法处理冲突,则下一个插入的关键字49的地址为A.2B.3C.8D.9【参考答案】: C7.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为A.1和 5B.2和4C.4和2D.5和1【参考答案】: B8.引入二叉线索树的目的是A.加快查找结点的前驱或后继的速度B.为了能在二叉树中方便的进行插入与删除C.为了能方便的找到双亲D. 使二叉树的遍历结果唯一【参考答案】: A9.下面说法错误的是(1)算法原地工作的含义是指不需要任何额外的辅助空间(2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界(4)同一个算法,实现语言的级别越高,执行效率就越低A.(1)B.(1),(2)C.(1),(4)D.(3)【参考答案】: C10.有关二叉树下列说法正确的是A.二叉树的度为2B.一棵二叉树的度可以小于2C.二叉树中至少有一个结点的度为2D.二叉树中任何一个结点的度都为2【参考答案】: B11.按排序过程中依据的原则分类,快速排序属于A.插入类的排序方法B.选择类的排序方法C.交换类的排序方法D.归并类的排序方法【参考答案】: C12.若一棵二叉树有11个叶子结点,则该二叉树中度为2的结点个数是A.10B.11C.12D.15【参考答案】: A13.若在9阶B-树中插入关键字引起结点分裂,则该结点在插入前含有的关键字个数为A.4B.5C.8D.9【参考答案】: C14.对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为A.O(n) O(n)B. O(n) O(1)C.O(1) O(n)D.O(1) O(1)【参考答案】: C15.判断两个串大小的基本准则是A.两个串长度的大小B.两个串中首字符的大小C.两个串中大写字母的多少D.对应的第一个不等字符的大小【参考答案】: D16.已知二叉树的先序序列为ABDECF,中序序列为DBEAFC,则后序序列为A. DEBAFCB.DEFBCAC. DEBCFAD. DEBFCA【参考答案】: B17.在关键字序列(12,23,34,45,56,67,78,89,91)中二分查找关键字为45、89和12的结点时,所需进行的比较次数分别为A. 4,4,3B. 4,3,3C.3,4,4D. .3,3,4【参考答案】: B18.若采用孩子兄弟链表作为树的存储结构,则树的后序遍历应采用二叉树的A.层次遍历算法B.前序遍历算法C.中序遍历算法D.后序遍历算法【参考答案】: C19.如果在排序过程中,每次均将一个待排序的记录按关键字大小加入到前面已经有序的子表中的适当位置,则该排序方法称为A.插入排序B.归并排序C.冒泡排序D.堆排序【参考答案】: A20.将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是A.nB.2n-1C.2nD.n-1 【参考答案】: A。
2017年春数据结构(第二版)在线作业二及满分答案【最新版】
数据结构(第2版)_在线作业_2一、单选题1.(5分)已知有向图如下,则该图的一种拓扑序列为()。
∙ A. 1-4-6-2-5-3∙ B. 1-4-2-3-6-5∙ C. 1-2-4-6-3-5∙ D. 1-2-3-4-5-6纠错得分: 5知识点: 5.6 拓扑排序展开解析2.(5分)设有数据逻辑结构为:Data=(D,R);D={d1,d2,d3,d4,d5,d6,d7,d8,d9,d10}R={<d1,d2>,<d1,d3>,<d1,d4>,<d2,d5>,<d2,d6>,<d3,d7>,<d3,d8>,<d3,d9>,<d4,d10>}试分析该数据结构属于哪种逻辑结构?()∙ A. 非线性逻辑结构∙ B. 网络结构∙ C. 线型逻辑结构∙ D. 树结构纠错得分: 5知识点: 1.2 基本概念和术语展开解析3.(5分)在一个单链表中,若要在p所指向的结点之后插入一个新结点,则需要相继修改()个指针域的内容。
∙ A. 4∙ B. 1∙ C. 2∙ D. 3纠错得分: 5知识点: 2.3 链接存储结构线性表展开解析4.(5分)快速排序在()情况下优势最明显。
∙ A. 数据完全无序∙ B. 数据中关键字存在大量重复∙ C. 数据基本有序∙ D. 数据量巨大纠错得分: 5知识点: 7.4 快速排序展开解析5.(5分)一个无序数据序列12,36,41,20,80,55 采用顺序表存储数据,采用堆排序算法建立的初始大根堆为()。
∙ A. 80,36,15,20,12,41∙ B. 80,36,20,12,55,41∙ C. 80,12,55,20,36,41∙ D. 80,12,20,55,36,41纠错得分: 5知识点: 7.3 堆排序展开解析6.(5分)假设以I和O分别表示入栈和出栈操作,栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列。
四川大学网络教育《数据结构》第二次作业答案
首页- 我的作业列表- 《数据结构》第二次作业答案欢迎你,你的得分:76.0完成日期:2014年01月09日18点12分说明:每道小题括号里的答案是您最高分那次所选的答案,标准答案将在本次作业结束(即2014年03月13日)后显示在题目旁边。
一、单项选择题。
本大题共25个小题,每小题2.0 分,共50.0分。
在每小题给出的选项中,只有一项是符合题目要求的。
若有序表为(b, c, d, e, f, g, q, r, s, t),则在二分查找关键字b的过程中,先后进行比较的关键字依次为()。
1( A )f,c,bf,d,bg,c,bg,d,b在对n个关键字进行直接选择排序的过程中,每一趟都要从无序区选出最小关键字元素,则在进行第i趟排序之前,无序区中元素的个数为()。
2( D )ii+1n-in-i+1若用邻接矩阵表示一个有向图,则其中每一列包含的″1″的个数为()。
3( A )图中每个顶点的入度图中每个顶点的出度图中每个顶点的度图中连通分量的数目一散列表长度m为100,采用除留余数法构造散列函数,即H(K)=K%P (P<=m),,为使散列函数具有较好的性能,P的选择应是()。
4( D )991009793二维数组A[8][9]按行优先顺序存储,若数组元素A[2][3]的存储地址为1087,A[4][7]的存储地址为1153,则数组元素A[6][7]的存储地址为()。
5( A )1207120912111213对关键字序列(56, 23, 78, 92, 88, 67, 19, 34)进行增量为3的一趟希尔排序的结果为()。
6( D )(19, 23, 56, 34, 78, 67, 88, 92) )(23, 56, 78, 66, 88, 92, 19, 34)(19, 23, 34, 56, 67, 78, 88, 92)(19, 23, 67, 56, 34, 78, 92, 88对线性表,在下列哪种情况下应当采用链表表示?( )7( A )经常需要随机地存取元素经常需要进行插入和删除操作表中元素需要占据一片连续的存储空间表中元素的个数不变一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是( )。
数据结构样卷二参考答案
样卷二参考答案:一简答题1.算法是解决特定问题的操作序列,可以用多种方式描述。
程序是算法在计算机中的实现,与具体的计算机语言有关。
2.主要与哈希函数、装填因子α有关。
如果用哈希函数计算的地址分布均匀,则冲突的可能性较小,如果装填因子α较小,则哈希表较稀疏,发生冲突的可能性较小。
3.图中结点可能有多个前驱,设置访问标志数组主要是为了避免重复访问同一个结点。
4.头指针指向头结点,头结点的后继域指向首元素结点。
5.当队尾到达数组最后一个单元时,就认为队满,但此时数组前面可能还有空单元,因此叫假溢出。
解决的方法是采用循环队列,即令最后一个单元的后继是第一个单元。
二判断题1.(√) 2.(×)3.(×)4.(√) 5.(×)6.(√) 7.(×) 8.(√) 9.(×) 10.(×)三单项选择题1. D 2.B 3.C 4. C 5. B 6. A 7.C 8.D 9. C 10.C 四填空题1. high low low high2. S->next=R->next ; R->next=S ;3.时间空间4. A[2, 3]5. 2h-1五构造题1.(4分)2.(6分)ASL= ( 1×4 + 2×2 + 3 ) / 7 = 11 / 7succ3.(6分)4.(4分)已知权值集合为:{ 5,7,2,3,6,9 },要求给出哈夫曼树,并计算其带权路径长度WPL。
WPL = 2×( 9 + 6 + 7 ) + 3×5 + 4×( 2 + 3 ) = 79六算法分析题解:(1)在二叉排序树中插入关键字为K的结点(2) h = log2 ( n+1 ) 或 h = [ log2n ] + 1 (方括号表示向下取整)(3)O ( log2 ( n+1 ) ) 或 O ( log2n )七算法设计题略。
数据结构第二次
《数据结构》实验报告学生姓名学生班级学生学号指导老师一、实验内容单链表的建立、插入以及删除等基本操作二、需求分析(1)建立一个线性表;(2)依次输入数据元素1,2,3,4,5,6,7,8,9,10;(3)删除数据元素5;(4)依次显示当前线性表中的数据元素。
三、概要设计插入删除四、详细设计插入:if((q = (SLNode *)malloc(sizeof(SLNode))) == NULL) exit(1);q->data = x;q->next = p->next; /*给指针q->next赋值*/p->next = q; /*给指针p->next重新赋值*/ return 1;删除:while(p->next != NULL && p->next->next!= NULL && j < i - 1)/*最终让指针p指向数据元素ai-1结点*/{p = p->next;j++;}if(j != i - 1){printf("插入位置参数错!");return 0;}s = p->next; /*指针s指向数据元素ai结点*/*x = s->data; /*把指针s所指结点的数据元素域值赋予x*/p->next = s->next; /*把数据元素ai结点从单链表中删除指*/free(s); /*释放指针s所指结点的内存空间*/return 1;}输出结果五、遇到的问题及解决方法、在调试过程中不懂单链表的性质,经过查找书籍发现,要先交换指针。
六、心得体会通过这个实验课,让我了解了单链表的性质,以及单链表的删除以及插入。
更加深入理解指针。
数据结构作业二答案
作业二栈和队列一、填空题(每空1分,共15分)1. 栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。
不允许插入和删除运算的一端称为栈底。
2. 队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。
只能在队尾插入和队首删除元素。
3. 在具有n个单元的循环队列中,队满时共有n-1个元素。
4. 向栈中压入元素的操作是先移动栈顶指针,后存入元素。
5. 从循环队列中删除一个元素时,其操作是先移动队首指针,后取出元素。
二、判断正误(判断下列概念的正确性,并作出简要的说明。
)(每小题1分,共10分)(×)1. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
错,线性表是逻辑结构概念,可以顺序存储或链式存储,与元素数据类型无关。
(√)2. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。
(√)3. 对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。
正确,都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
(×) 4. 栈和链表是两种不同的数据结构。
错,栈是逻辑结构的概念,是特殊殊线性表,而链表是存储结构概念,二者不是同类项。
(×) 5. 栈和队列是一种非线性数据结构。
错,他们都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
(√)6. 栈和队列的存储方式既可是顺序方式,也可是链接方式。
(√)7. 两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
(×)8. 队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。
错,后半句不对。
(×)9. 一个栈的输入序列是12345,则栈的输出序列不可能是12345。
错,有可能。
三、单项选择题(每小题1分,共20分)(B)1.栈中元素的进出原则是A.先进先出B.后进先出C.栈空则进D.栈满则出(C)2.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为A.i B.n=i C.n-i+1 D.不确定解释:当p1=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的(事实上题目已经表明了),那么输入顺序必定是1,2,3,…,n,则出栈的序列是n,…,3,2,1。
2019级春数据结构第二次作业
题号题目内容答案答题时间1"空串与空格串是相同的,这种说法____。
A.正确B.不正确"B02"串是一中特殊的线性表,其特殊性体现在____。
A.可以顺序存储B.数据元素是一个字符C.可以链接存储D.数据元素可以是多个字符"B03"设有两个串p和q,求q在p中首次出现的位置的运算称作____。
A.连接B.模式匹配C.求子串D.求串长"B04"设串s1=’ABCDEFG’,s2=’PQRST’,函数con (x,y)返回x和y串的连接串,subs(s,i,j)返回串s的从序号i的字符开始的j个字符组成的子串,len(s)返回串s的长度,则con (subs (s1,2,len (s2)), subs (s1,len (s2),2))的结果串是____。
A.BCDEFB.BCDEFGC.BCPQRSTD.BCDEFEF"D05"常对数组进行的两种基本操作是____。
A.建立与删除B.索引和修改C.对数据元素的存取和修改D.查找与索引"C06"二维数组M的成员是6个字符(每个字符占一个存储单元,即一个字节)组成的串,行下标i的范围从0到8,列下标j的范围从0到9,则存放M 至少需要①_ _个字节;M 数组的第8列和第5行共占②____个字节。
A.90B.180C.240D.540E.108F.114G.54H.60"DE07"二维数组A中,每个元素的长度为3个字节,行下标i从0到7,列下标j从0到9,从首地址SA开始连续存放在存储器内,存放该数组至少需要的字节数是____。
A.80B.100C.240D.270"C08"由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树,这种说法____。
A.正确B.错误"B09"假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为个。
数据结构和其算法第二次作业
数据结构和其算法第二次作业在学习计算机科学的道路上,数据结构和算法就像是基石,为我们构建起高效、稳定的程序大厦提供了坚实的支撑。
这次的第二次作业,让我对数据结构和算法有了更深入的理解和体会。
我们先来谈谈数据结构。
数据结构是指数据元素之间的关系和组织方式。
常见的数据结构有数组、链表、栈、队列、树和图等。
数组是一种最简单也最常用的数据结构。
它就像是一排整齐排列的盒子,每个盒子都有一个固定的位置,通过索引可以快速访问其中的元素。
但是,数组的长度一旦确定就很难改变,如果要插入或删除元素,可能会涉及到大量的数据移动,效率较低。
链表则不同,它像是一串珠子,每个珠子通过指针连接到下一个珠子。
链表的插入和删除操作非常方便,只需要修改指针的指向即可,但访问特定位置的元素就需要从头开始遍历,速度相对较慢。
栈是一种“后进先出”的数据结构,想象一下往一个桶里放东西,最后放进去的会最先被拿出来。
栈在函数调用、表达式求值等场景中发挥着重要作用。
队列则是“先进先出”,就像排队买票,先来的先得到服务。
它常用于任务调度、消息传递等方面。
树是一种层次结构的数据结构,比如二叉树、二叉搜索树等。
二叉搜索树的特点是左子树的所有节点值小于根节点值,右子树的所有节点值大于根节点值,这使得查找、插入和删除操作的效率都比较高。
图则是由顶点和边组成,可以用来表示各种复杂的关系,比如交通网络、社交关系等。
说完数据结构,再来说说算法。
算法是解决特定问题的一系列步骤。
好的算法应该具有正确性、可读性、健壮性和高效性等特点。
比如排序算法,常见的有冒泡排序、插入排序、选择排序、快速排序和归并排序等。
冒泡排序就像水里的泡泡,每次比较相邻的两个元素,如果顺序不对就交换位置,一轮下来最大的元素就“浮”到了末尾。
插入排序则是将待排序的元素依次插入到已排序的部分中。
选择排序是每次选择未排序部分的最小元素放到已排序部分的末尾。
快速排序是一种分治的算法,通过选择一个基准元素,将数组分成两部分,然后对这两部分分别进行排序。
数据结构第二次作业答案
数据结构第二次作业答案一、单项选择题1。
C 2. B 3。
A 4. A 5。
D 6。
A7。
D 8。
C 9. D 10. C 11. D 12。
C 13. A二、填空题1。
存储 2. 先进先出 3。
栈顶指针 4。
队尾5。
一 6。
局部变量 7。
表尾 8。
重数9. 3 10。
6 11。
6 12. 2h+1—1三、判断题1。
错 2. 对 3。
对 4. 对 5。
错 6。
对 7. 对 8. 错 9. 错四、运算题1.叶子结点数: 5单分支结点数:3两分支结点数:2三分支结点数:12.元素 34 56 58 63 94比较次数 2 1 3 4 43。
左子树为空的所有单支结点:15,23,42,44右子树为空的所有单支结点:304.插入时造成不平衡的结点个数:45。
结点 a b c d e出度 1 1 2 1 2入度 2 2 1 1 16。
(1) 1,3,4,6,5,2 (3分)(2) 1,3,2,4,5,6 (3分)五、算法分析题1.利用"栈”作为辅助存储,将队列中的元素逆置(即相反次序放置)。
2.(1) q = q-〉lLink(2) return 1(3) return 03。
1→21→32→34.(1) return PT(2) (PT=ParentPtr(BT-〉right,BT,X))(3) return NULL 或return 0六、算法设计题1.float poly(float x, float A[], int n) { if(!n) return A[0];else return x*poly(x, A, n-1)+A[n];}2。
int BTreeHeight(BinTreeNode* BT){if(BT==NULL)//对于空树,返回-1并结束递归return –1;else{//计算左子树的高度int h1=BTreeHeight(BT—>left); //计算右子树的高度int h2=BTreeHeight(BT-〉right); //返回树的高度if(h1〉h2) return h1+1;else return h2+1;}}3.int BTreeLeafCount(BinTreeNode* BT){if(BT==NULL) return 0;else if(BT->left==NULL && BT—>right==NULL) return 1;else return BTreeLeafCount(BT—>left)+BTreeLeafCount(BT->right);}数据结构第三次作业答案一、单项选择题1。
数据结构 ( 第2次 )
第2次作业一、单项选择题(本大题共60分,共 20 小题,每小题 3 分)1. 按克鲁斯卡尔算法建的最小生成树()。
A.只有一种B.有多种C.不确定2. 以下关于单链表的叙述中,错误的是()。
A.在单链表中插入一个结点必须先找到其前驱结点B.在单链表中删除一个结点必须先找到其前驱结点C.在单链表中只能通过结点的next指针向后查找结点D.在单链表中查找第i个结点的时间复杂度是O(1)3. 输入序列为ABC,可以变为CBA时,经过的栈操作为()。
A.push,pop,push,pop,push,popB.push,push,push,pop,pop,popC.push,push,pop,pop,push,popD.push,pop,push,push,pop,pop4.如图所示,可得到一个拓扑排序序列()。
A.v1,v6,v4,v3,v2,v5B.v1,v2,v6,v4,v3,v5C.v1,v2,v6,v3,v4,v5D.v1,v4,v6,v3,v2,v55. 下列排序方法中,哪一个是稳定的排序方法?()A.简单选择排序B.堆排序C.希尔排序D.快速排序6. 一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有()结点。
A.2hB.2h-1C.2h+1D.h+17. 平衡二叉树的平衡因子的取值可能是()。
A.B.2C.3D.48. 一个有n个顶点的无向图最多有()条边。
A. nB.n(n-1)C.n(n-1)/2D.2n9. 在迷宫求解问题中,用()作为转换过程中的数据存储结构。
A.线性表B.栈C.D.单链表10. 计算机算法指的是()。
A.计算方法B.排序方法C.解决问题的步骤序列D.调度方法11. 基数排序是()。
A.稳定的B.不稳定的C.看具体情况D.12. 对(70.83.100.65.10.32.7.9)进行简单选择排序,排序后第一趟结果为()。
A.7.83.100.65.10.32.70.9B.7.9.100.65.10.32.70.83C.7.9.10.65.100.32.70.83D.7.9.10.32.100.65.70.8313. 对于一个有向图的逆邻接链表表示,第i 个链表中有x个结点,则顶点i 的出度为()。
数据结构-2003_数据结构与算法大作业二
数据结构与算法大作业二电子工程系无23班邓创021372算法分析首先把本问题抽象为一个带权图的问题。
如图,由6个地点组成的销售网络。
其中的路径上的权值已标注。
题目要求在每一个点设置一种主销产品,两种辅销产品。
对下图来说,不妨设节点n主销第n种产品。
这样确定主销产品后,对辅销产品的确定也很方便。
即对节点n(1≤n≤6)主销第n种产品后,辅销第I n 和J n 种产品。
且满足条件:I n≠J n,且各个I,各个J互不相等。
例如如下是一个满足条件的销售方案。
并且可以验证,这是一个满足条件的最优解。
从以上分析可以发现,该问题已经抽象为一个全排列问题。
即n的两个不同全排列,并满足对应项不相等的条件。
在所有的这些全排列中计算∑D(n,I n)+D(n,J n) ,并选取结果最小的那个方案即可。
由以上分析可以得到本问题的算法。
即利用枚举法或者回溯法搜索出所有的n的全排列,再将其符合条件的2个排列组合起来,最后利用求和公式计算。
但这样的算法效率实在太低,在实际问题的解决中毫无意义。
因此我们退一步求其次,利用较小的时空代价获得一个较优解。
我们改进算法如下:首先只考虑第一辅销。
在这种情况下,由于是求n的一个全排列,因此比同时考虑两个全排列要简单得多。
我们也可以在利用回溯搜索排列时加入一些限制条件来优化算法,尽量获得最高的效率。
因此,在仅仅考虑第一辅销的时候,最优解是可以求出来的。
在考虑第二辅销。
这时候,由于第一辅销已经确定,第二辅销的搜索会增加一些限制条件。
因此在搜索过程中有可能找不到最优解。
然而根据理论计算,在这样的限制条件下再次回溯搜索出的局部最优解在整个问题来说,也应该是较优的。
这样便符合了题目寻找较优解的条件,并且搜索次数,时空代价都大大减少。
是一个可行的算法。
下面给出算法的具体步骤:1.利用floyd算法求出图中任意两点间的最短距离。
2.利用回溯法求解第一辅销的分布方案。
3.在第一辅销分布方案确定的条件下再次利用回溯法寻找第二辅销方案。
国家开放大学电大《数据结构》网络课形考任务2作业及答案
国家开放大学电大《数据结构》网络课形考任务2作业及答案档任务2一、单项选择题(每小题2分,共50分)题目1 若让元素1,2,3依次进栈,则出栈顺序不可能为()。
选择一项: A、3,1,2 B、3,2,1 C、2,1,3 D、1,3,2 题目2 一个队列的入队序列是1,2,3,4。
则队列的输出序列是()» 选择一项: A、1,4,3,2 B、4,3,2,1 C、3,2,4,1 D、1,2,3,4 题目3 向顺序栈中压入新元素时,应当()。
选择一项: A、先后次序无关紧要 B、先存入元素,再移动栈顶指针 C、同时进行 D、先移动栈顶指针,再存入元素题目4 在一个栈顶指针为top的链栈中,将一个p指针所指的结点入栈,应执行()、选择一项: A、 p->next=top->next;top->next=p: B、 p->next=top->next;top=top->next; C、 p->next=top:top=p: D、 top->next=p; 题目5 在一个栈顶指针为top的链栈中删除一个结点时,用x保存被删结点的值,则执行()。
选择一项: A、 x=top->data;top=top->next: B、top=top->next;x=top->data; C、 x=top->data: D、 x=top:top=top->next; 题目6 判断一个顺序队列(最多元素为m)为空的条件是()» 选择一项: A、 front=rear B、 front=rear+l C、 rear=m-l D、 rear=m 题目7 判断一个循环队列为满的条件是()next; B、 r=r->next; C、 r=f->next; D、 f=r->next; 题目13 在一个链队中,假设f和r分别为队头和队尾指针,则插入s所指结点的运算为()» 选择一项: A、 r->next=s;r=s; B、 s->next=f;f=s; C、 s->next=r;r=s; D、 f->next=s;f=s:题目14 数组a经初始化char a[ ]= “English” :a[7]中存放的是()。
数据结构第二次作业
//数据结构第二次作业.cpp :定义控制台应用程序的入口点。
//#in elude <iostream>using namespacestd;const int Stacksize = 50; template < class T>class SeqStack //定义共享栈模板类 {public :SeqStack(){ top1 = -1, top2 = Stacksize; }; voidpush1( T x);void push2( T x);T Po p1();T Pop 2();T GetT op 1();T GetT op 2();bool Empty1(){ I//定义栈的最大高度 //有参构造函数return ( NULL== top 1) ? true : false ;}bool {Emp ty2()return (Stacksize == top2) ? true : false ;}private :T data1[Stacksize]; T data2[Stacksize];int top1, top2; };//定义数组//共享栈指针template <class T> ____________________ void SeqStack<T>::push1( T x) { I//if (topi >= Stacksize - 1)throw"cout << "pushi:" ; I top i++; datai[t opi] = x; _______________cout << datai[t opi] << en dl;上溢"; template <class T> void SeqStack<T>::push2( T x) { I//if (top2 <= 0)throw" 」 cout << "push2:" ; I top 2--; _____________ data2[t op2] = x; __________cout << data2[t op2] << en dl; 上溢";template <class T>T SeqStack<T>:: Pop 1(){ I ______________//if (Emp ty1())throw" 下溢";cout << "pop 1:" << data1[top1] << endl;top 1--; ______________________return data1[top1 + 1];template <class T>T SeqStack<T>:: Pop2(){//if (Emp ty2())throw" 下溢";cout << "pop2:" << data2[top2] << endl; top 2++;Ireturn data2[top2 - 1];} Itempi ate <class T>SeqStack<T>::GetTo p1()//if (Emp ty1())throw" 下溢";cout << "GetTop1:" << data1[top1] << endl; returndata1[top 1];tempi ate <class T>T{SeqStackvT>::GetTo p2()//if (Emp ty2())throw" cout << "GetTo p2:" return data2[top2];下溢";I<< data2[t op2] << endl;template <class T> 」structNode{ IT date;[struct Node<T>* next;//栈的链式存储结构};___________________tempi ate <class T> class LinkStack{public : ILinkStack( T a[], int n); ~LinkStackO;//void Out put(i nt n); voidPush( T x);T Pop();//定义链栈模板类T GetT op ();bool Empoty(){return (NULL== top) ? true : false ; }private :struct Node<T>*t op; };template <class T>LinkStack <T>::LinkStack( T a[], int n) { 1Node<T>*front =new Node<T>; Node<T>*r = front;for ( int i = 0; i <{ I _________________NodeT>*s = new Node<T>; s->date= a[i];r->n ext = s;r = s;Node<T>*p = new Node<T>;p->date = x; _______________________________cout << "Push:" << p->date << endl; p->n ext = top;top = p;} Itemplate <class T>T LinkStack <T>::Pop(){ I__________________ //if (Em po ty())throw" 下溢";T x = top->date;Node<T>* p = top;top = top->n ext; ___________________ cout << "Pop:" << X << endl; delete p;return x;}template <class T>LinkStack <T>::~LinkStack() |{while (top){ _______________NodeT>* p = top; top = top->n ext;delete p; |,} I}K const int QueueSize = 100; tempi ate <class T>n; i++) } ________r->n ext = } Itemplate <classvoid LinkStack{ I NULL IT> <T>::Push( T x)class CircleQueue//循环队列模板类{public : CircleQueue(){ front = rear = 0; }void EnQueue(T x);//void Out put(i nt n);T DeQueueO;T GetFro nt();int GetLength();bool Empty(){return front == rear ? private :T date[QueueSize];int front;int rear;}; ___________________template <class T> ___________________________void CircleQueue <T>::EnQueue(T x) |{} lI template <class T> T CircleQueue <T>::DeQueue() |{ l __________________if (rear == front) throw "上溢 “ ;_front = (front + 1) % QueueSize;cout << "DeQueue:" << date[fro nt] << en dl; return date[front]; }template <class T> T CircleQueue <T>::GetFront() { l//if (rear == fron t)throw"上溢"; cout << "GetFro nt:" << date[(fro nt + 1) % QueueSize] << endl; returndate[(front + 1) % QueueSize];}l > template <class T> int CircleQueue <T>::GetLength(){ lcout << "Le ngth:" << (rear - front + QueueSize) % QueueSize << en dl; return (rear - front + QueueSize) % QueueSize; tempi ate <class T> class LinkQueue{public : I true ; false ; }throw"上溢"; if ((rear + 1) % QueueSize == front) _____________ 'rear = (rear + 1) % QueueSize;date[rear]= x; |cout << "En Queue:" << date[rear] << en di;//链队列模板类Lin kQueue()I front = rear = new Node<T>;fron t-> next = NULp_____________________________________ I} I 「~Lin kQueue();void EnQueue(T x);T DeQueue();T GetFront();「bool Empoty(){ return front == rear ? true ; false ; } private :Node<T>*fro nt;Node<T>*rear;「}; ____________________template <class T>________________________void LinkQueue<T>::EnQueue(T x){rear->next = new Node<T>;rear = rear- >n ext;rear->date = x;cout << "En Queue:" << rear->date << en dl; |rear- >n ext = NULL} Itemplate <class T>T LinkQueue<T>::DeQueueQ |{ INode<T>* p = fron t- >n ext;front->n ext = p->n ext;T x = p->date; _____________________________cout << "DeQueue:" << x << en dl;delete p; | _________________________________if (!(front- ___________return x;}| >template <class T> T LinkQueue<T>::GetFront() | { I//if (!(front->next))throw" 上溢";| __________________ cout << "GetFr on t:" << fron t- >n ext->date << endl;_____________ return front->next->date;}tempi ate <class T>Lin kQueuevT>::~L in kQueueQ { Iwhile (front){ I rear = fron t- >n ext;_ delete front; front = rear;}} Ivoid mainO{ Icout << "共享栈功能实现"<< endl;/*int a[] = { 1,2, 3, 4, 5, 6, 7, 8, 9,10 };int b[] = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };int n = 10;*/SeqStackvint > Seq;//Seq.Out put (n);Seq. push1(33);Seq.GetTo p1();Seq. Pop 1();Seq. push2(44);Seq.GetTo p2();Seq. Pop 2();cout << "链式栈功能的实现"<< endl;int c[] = { 1,2, 3 }; Iint m = 3;LinkStack <int > Lin(c, m);Lin.P ush(10); |Li nPop (); ______________________________________cout << "循环队列功能的实现"<< endl;CircleQueue <int > Cir; |Cir.E nQueue(100);Cir.GetFro nt(); JCir.DeQueue();Cir.GetLe ngth();cout << "链队列功能的实现"<< endl;LinkQueue<int > Que; |Que.E nQueue(50);Que.GetFro nt();Que.DeQueue(); _system( "pause");} I #inelude <iostream> using namespacestd;typedef struct node{ I _struct node *lchild; struct no de *rchild; char data; }BiTreeNode, * BiTree ;void createBiTree( BiTree &T) { Ichar c;cin >> c;if ( '#' == c)T = NULLelse{T = new BiTreeNode;T->data = c;createBiTree( T->lchild);createBiTree( T->rchild);}} I//递归前序遍历二叉树bool PreOrder( BiTree &T) { if ( T != NULL { cout << T->data << PreOrder( T->lchild); PreOrder( T->rchild);} I .return true ;}//递归中序遍历二叉树—Ibool InOrder( BiTree &T) {if ( T != NULI) {InOrder( T->lchild); cout << T->data <<InOrder( T->rchild);}return true ;}//递归后序遍历二叉树bool { I(T != NULL{PostOrder( T->lchild); PostOrder( T->rchild); cout << T->data <<qu—I BiTNode* node;} return true ; } I bool {- queue<int > q; q. push(1); q. push(2); q. push(3); q. push(4); cout << ( q.pop (); cout << ( q.pop(); cout << ( q.pop(); cout << ( # else I LevelOrder( BiTree * T) int )q.frontQ << endl; int )q.front() << endl; int )q.frontQ << endl; int )q.front() << endl;PostOrder( BiTree &T)ifnode->rchild != NULI){ q.push( node->rchild); }#en difreturn true ;void mainO |{ I「 BiTree T;createBiTree(T); // 构建二叉树 cout << T->lchild->data << en dl;cout << T->lchild->lchild->data << en dl; cout << T->lchild->rchild->data << en dl;LevelOrderTraverse(T);if ( T != NULI){ // 不是空树q.push( T);}else {return false ;}while (!q.empty()){n ode = (BiTNode*)q.fro nt();q.pop(); //队首节点岀队Visit( no de); |( //队首节点if node->lchild !=NULL{ q.push( node->lchild);}if cout << "********* PreOrder(T); _______ cout << endl <<In Order(T);cout << endl << PostOrder(T);cout << endl << 递归先序遍历**********"<< en dl; H********* H********* H******** 递归中序遍历********** 递归后序遍历**********" 层序遍历**********" << en dl; << en dl; << en dl;。
数据结构董成成 第二次实验报告
湖北汽车工业学院实验报告班号T1223-3 学号20120230309 姓名董成成选课班中的序号09 完成日期2014年4月28日7至8节实验二栈和队列基本操作的编程实现一、实验目的1.了解栈和队列的逻辑结构和存储结构的工作原理;2.理解栈和队列的用途;3.掌握栈和队列的程序设计;二、实验要求由于本次实验涉及到栈和队列两种数据结构的原理,实验题目将按照分级和分类的方式提供,任何学生都可以选择其中之一或多个综合来达成对原理的理解。
细节由学生按照自己的能力随意拓展和提高,程序源码实现原创设计。
存储结构最简模式为:顺序存储,使用一维数组实现。
鼓励使用链表结构,一般可以采用单链表结构。
时间足够的情况下,希望把这些在课外全部自行编程实现。
特别是希望和第一次实验采取相反的策略进行选择,以此来提高自己对于不同的存储结构的熟练运用。
界面设计最简模式为:无界面设计,极少提示。
鼓励更加人性化的界面设计,提示清晰,操作过程流畅。
如果启用文件,则可以采用全程无界面设计模式。
原始数据构建方式最简模式为:键盘输入。
其他的方式也在鼓励之中:数据内置,计算机自动生成,文件读入。
数据类型最简模式为:整数。
其他依次鼓励使用的为:实数、字符、英语字符串、汉字字符串。
三、实验内容功能设计难度系数分为五级制:1:很容易,2:较容易,3:有一定难度,4:难度较大,5:难度很大。
1.栈功能演示系统。
难度系数:22.汉字回文字符串的判断程序。
难度系数:33.十进制正整数转换为八进制的程序。
难度系数:44.环状队列功能演示系统。
难度系数:25.十进制正小数转换为八进制的程序。
难度系数:36.用计算机自动产生作业名、申请时间和打印时间的随机数据,然后用队列管理,随时显示队列中的数据和已经打印完毕的作业名。
难度系数:4开发语言最简模式为:C语言。
以下依次为更加鼓励的设计环境:C++(不带对象),C++(带对象),C++带图形包(带对象),C++ windows mfc(带对象)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对
树可用投影法进行中序遍历。
对
用树的前序遍历和中序遍历可以导出树的后序遍历。
对
在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的
A. C. D.
用邻接表表示图进行广度优先遍历时,通常是采用
A. C. D.
已知图的邻接矩阵,根据算法思想,
A. C. D.
已知图的邻接矩阵同上题8,根据算法,则从顶点
A. C. D.
有向图中顶点V的度等于其邻接矩阵中第
对
邻接多重表是无向图和有向图的链式存储结构。
(
对
有向图的邻接矩阵是对称的。
(
对
()折半查找有序表(
A. C. D.
()链表适用于查找
A. C. D.
哈希函数的选取平方取中法最好。
对
若散列表的负载因子
对
顺序查找法适用于存储结构为顺序或链接存储的线性表。
对
A. C. D.
对n个不同的排序码进行冒泡排序,在下列哪种情况下比较的次数最多。
A. C. D.
在初始数据表已经有序时,快速排序算法的时间复杂度为
对
在待排数据基本有序的情况下,快速排序效果最好。
(
对
当待排序记录已经从小到大排序或者已经从大到小排序时,快速排序的执对。