中国铁道出版社数据结构(第二版)单元8练习参考答案
《数据结构》课后习题答案(第2版)
《数据结构》课后习题答案(第2版)数据结构课后习题答案(第2版)第一章:基本概念1. 什么是数据结构?数据结构是指数据元素之间的关系,以及相应的操作。
它研究如何组织、存储和管理数据,以及如何进行高效的数据操作。
2. 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。
线性结构包括数组、链表、栈和队列;非线性结构包括树和图。
3. 什么是算法?算法是解决特定问题的一系列有序步骤。
它描述了如何输入数据、处理数据,并产生期望的输出结果。
4. 算法的特性有哪些?算法具有确定性、有限性、输入、输出和可行性这五个特性。
5. 数据结构和算法之间的关系是什么?数据结构是算法的基础,算法操作的对象是数据结构。
第二章:线性表1. 顺序表的两种实现方式是什么?顺序表可以通过静态分配或动态分配的方式实现。
静态分配使用数组,动态分配使用指针和动态内存分配。
2. 单链表的特点是什么?单链表由节点组成,每个节点包含数据和一个指向下一个节点的指针。
它的插入和删除操作效率高,但是查找效率较低。
3. 循环链表和双向链表分别是什么?循环链表是一种特殊的单链表,在尾节点的指针指向头节点。
双向链表每个节点都有一个指向前一个节点和后一个节点的指针。
4. 链表和顺序表的区别是什么?链表的插入和删除操作效率更高,但是查找操作效率较低;顺序表的插入和删除操作效率较低,但是查找操作效率较高。
第三章:栈和队列1. 栈是什么?栈是一种特殊的线性表,只能在表的一端进行插入和删除操作。
后进先出(LIFO)是栈的特点。
2. 队列是什么?队列是一种特殊的线性表,只能在表的一端进行插入操作,在另一端进行删除操作。
先进先出(FIFO)是队列的特点。
3. 栈和队列的应用有哪些?栈和队列在计算机科学中有广泛的应用,例如浏览器的前进后退功能使用了栈,操作系统的进程调度使用了队列。
4. 栈和队列有哪些实现方式?栈和队列可以使用数组或链表来实现,还有更为复杂的如双端队列和优先队列。
数据结构(C语言版)(第2版)课后习题答案
数据结构(C语言版)(第2版)课后习题答案数据结构(C语言版)(第2版)课后习题答案目录第1章绪论1 第2章线性表5 第3章栈和队列13 第4章串、数组和广义表26 第5章树和二叉树33 第6章图43 第7章查找54 第8章排序65 第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,。
},字母字符数据对象是集合C={‘A’,‘B’,。
,‘Z’,‘a’,‘b’,。
,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
中国铁道出版社数据结构(第二版)单元7练习参考答案
中国铁道出版社数据结构(第二版)单元7练习参考答案单元练习7一.判断题(下列各题,正确的请在前面的括号内打√;错误的打�w )(√)(1)树结构中每个结点最多只有一个直接前驱。
(ㄨ)(2)完全二叉树一定是满二查树。
(ㄨ)(3)在中序线索二叉树中,右线索若不为空,则一定指向其双亲。
(√)(4)一棵二叉树中序遍历序列的最后一个结点,必定是该二叉树前序遍历的最后一个结点。
(√)(5)二叉树的前序遍历中,任意一个结点均处于其子女结点的前面。
(√)(6)由二叉树的前序遍历序列和中序遍历序列,可以推导出后序遍历的序列。
(√)(7)在完全二叉树中,若一个结点没有左孩子,则它必然是叶子结点。
(ㄨ)(8)在哈夫曼编码中,当两个字符出现的频率相同,其编码也相同,对于这种情况应该做特殊处理。
(ㄨ)(9)含多于两棵树的森林转换的二叉树,其根结点一定无右孩子。
(√)(10)具有n个叶子结点的哈夫曼树共有2n-1个结点。
二.填空题(1)在树中,一个结点所拥有的子树数称为该结点的度。
(2)度为零的结点称为叶(或叶子,或终端)结点。
(3)树中结点的最大层次称为树的深度(或高度)。
(4)对于二叉树来说,第i层上至多有 2i-1 个结点。
(5)深度为h的二叉树至多有 2h-1 个结点。
(6)由一棵二叉树的前序序列和中序序列可唯一确定这棵二叉树。
(7)有20个结点的完全二叉树,编号为10的结点的父结点的编号是 5 。
(8)哈夫曼树是带权路径长度最小的二叉树。
(9)由二叉树的后序和中序遍历序列,可以唯一确定一棵二叉树。
(10)某二叉树的中序遍历序列为: DEBAC,后序遍历序列为:EBCAD。
则前序遍历序列为:DABEC 。
(11)设一棵二叉树结点的先序遍历序历为:ABDECFGH,中序遍历序历为:DEBAFCHG,则二叉树中叶结点是: E、F、H 。
(12)已知完全二叉树的第8层有8个结点,则其叶结点数是 68 。
(13)由树转换成二叉树时,其根结点无右子树。
数据结构+算法+第二版+课后+答案+部分
算法与数据结构课后习题答案第一章一、选择题CCADB二、判断题FFFFT三、简答题5.(1) n-1 (2)1 (3)n(n+1)/2 (4)if(a<b) n , a++ n/2(5)if(x>100) 11*100-1, x-=10;y-- 1006.(1)O(log3n) (2) O(n2) (3) O(n2)第二章一、选择题1~5: AADCD 6~10:BCBAD 11~12:BD二、判断题1~5:FTFTF 6~10:TFTTF 11~12:FF三、算法设计题1.#define arrsize 100int Inserseqx(datatype A[ ], int *elenum, datatype x ) { int i=*elenum-1;if(*elenum==arrsize) return 0;while(i>=0&&A[i]>=x ){ A[i+1]=A[i]; i--; }A[i+1]=x; *elenum ++;return 1;}6.typedef struct node{ dataype data;struct node *next;}LNode, *LinkList;int Inserlinkx(LinkList L,datatype x ){ LNode *p=L,*s;s=(LNode *)malloc(sizeof(LNode));if(!s) return 0;s->data=x;while(p->next&&p->next->data<=x) p=p->next;s->next=p->next; p->next=s;return 1;}第三章一、选择题1~5:CBDBB 6~10: CBDCC二、判断题1~5:TTTFF三、简答题4. 共14种顺序:4321 3214 3241 3421 2134 2143 23142341 2431 1234 1243 1324 1342 1432四、简答题1.#define MAXSIZE 1000typedef struct{datatype data[MAXSIZE];int top;}SeqStack;SeqStack *Init_SeqStack(); /*栈初始化*/int Empty_SeqStack(SeqStack *s);/*判栈空*/int Push_SeqStack(SeqStack *s,datatype x); /*x入栈*/ int Pop_SeqStack(SeqStack *s,datatype *x); /*出栈*/int judgehuiwen(char *str)/*返回1表示是回文,否则不是*/{ SeqStack *s=Init SeqStack( );char *ch=str,ch1;while(*ch!=’@’){Push_SeqStack(s, *ch);ch++;}ch=str;while(!Empty_SeqStack(s)){ Pop_SeqStack(s,&ch1);if(*ch!=ch1) return 0;ch++;}return 1;}5.#define MAXSIZE 1000typedef struct{datatype data[MAXSIZE];int top;}SeqStack;SeqStack *Init_SeqStack(); /*栈初始化*/int Empty_SeqStack(SeqStack *s);/*判栈空*/int Push_SeqStack(SeqStack *s,datatype x); /*x入栈*/ int Pop_SeqStack(SeqStack *s,datatype *x); /*出栈*/ int judge(char *str)/*返回1表示是匹配,否则不是*/{ SeqStack *s=Init SeqStack( );char *ch=str,ch1;while(*c h!=’\0’){ if(*ch==’(‘) Push_SeqStack(s, *ch);else if(*ch==’)‘)if(!Pop_SeqStack(s,&ch1)) return 0;ch++;}if(Empty_SeqStack(s)) return 1;else return 0;}4.typedef struct node{ dataype data;struct node *next;}Lqnode, *LqList;置空:LqList Init_lq(){ LqList rear=(LqList *)malloc(sizeof(LqList)); rear->next=rear;return rear;}入队:int in_lq(LqList *rear, datatype x){ Lqnode *p=(LqList *)malloc(sizeof(LqList)); if(!p) return 0;p->data=x;p->next=*rear->next; *rear->next=p; *rear=p; return 1;}出队:int out_lq(LqList *rear, datatype x){ Lqnode *p;if(*rear->next==*rear) return 0;p=*rear->next->next;if(p==*rear){*rear=*rear->next;*rear->next=*rear;} else *rear->next->next=p->next;free(p);return 1;}第四章一、选择题1-3:CBA 4:DAB 5:CCC 6:C二、判断题FTFFFFF三、简答题2.4. k=i+j-2+(i+1)%2 或k=i+j-1+i%26.第五章一、选择题:1~5:CCBBB 6~10:CBDAD 11~15:DCBDB3 5 6 7 98 13 17二、判断题:1~5:FTFFT 6~10:FFFTF 11~15:TFTFF 16~20:FTFFT 三、简答题:((2)4、条件:森林中既没有孩子也没有右边的兄弟的结点11. 最大值:2h-1 最小值:2h-116.0.31 0.16 0.10 0.08 0.11 0.20 0.04 0.12 0.21 0.28 0.410.59a b c d e f ga:01 b:001 c:110 d:0000 e:111 f:10 g:0001四、算法设计题:typedef struct bitnode{ datatype data;struct bitnode *lchild, *rchild;}BiTNode, *BiTree;1.计算结点数目int counttotal(BiTree bt){ if(bt==NULL) return 0;return counttotal(bt->lchild)+counttotal(bt->rchild)+1;}计算度为1的结点数目:int countdegree1(BiTree bt){ if(bt==NULL) return 0;if( bt->lchild==NULL&& bt->rchild==NULL) return 0;if( bt->lchild==NULL|| bt->rchild==NULL)return countdegree1(bt->lchild)+ countdegree1(bt->rchild)+1; return countdegree1(bt->lchild)+ countdegree1(bt->rchild);}3.求深度;int depth(BiTree bt){ int ld,rd;if(bt==NULL) return 0;ld= depth(bt->lchild); rd=depth(bt->rchild);if( ld>=rd) return ld+1;return rd+1;}第6章作业讲评一、选择题1-4:BABC 5:BD 6-10:DBACB二、判断题1-5:FTTFF 6-10:TTFFT 11-15:FTFFF三、简答题1.(1)ID(1)=2 OD(1)=1ID(2)=2 OD(2)=2ID(3)=1 OD(3)=3ID(4)=3 OD(4)=0ID(5)=2 OD(5)=3ID(6)=1 OD(6)=2(2)0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 0 1 0 0 0 1 0 0 1 0(3) (4)54 3 2 1 0 54 3 2 1 0(5) 2. (1)0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 1 0(2)(4)(5)v1 v2 v3 v4 v5 v6 v73. 邻接矩阵表示图时,与顶点个数有关,与边的条数无关。
中国铁道出版社《数据结构》第二版习题答案
《数据结构》习题答案习题1一、选择题:1、C2、B3、B4、B D5、C6、A7、C B8、D9、B 10、D二、填空题:1、相互关系2、一对一、一对多、多对多3、线性结构、集合、图、树4、有穷性、确定性、可行性、输入、输出5、O(n)6、O(n2)7、物理8、(1)、(log2n)、(n)、(n2)、(2n)、实际不可计算9、数据元素三、应用题:1、O(n/2)。
2、(略)。
3、(略)。
4、(略)。
5、(1)语句k+=10*i的频度为:n-1;(2)语句k++的频度为:n2。
四、算法设计题:1、算法程序如下:void main(){int x,y,z,temp;printf(“请输入3个整数:\n”);scanf(“%d%d%d”,&x,&y,&z);if (x<y){temp=x;x=y;y=temp;}if(x<z){temp=x;x=z;z=temp;}if(y<z){temp=y;y=z;z=temp;}printf(%d\t%d\t%d\n”,x,y,z);}2、算法程序如下:void main(){int a[10],i,max,min;printf(“请输入10个整数:\n”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(max=min=a[0],i=1;i<10;i++){if(max<a[i])max=a[i];if(min>a[i])min=a[i];}printf(“max=%d,min=%d\n”,max,min);}习题2一、选择题:1、A2、D3、B4、C5、B6、C7、D8、C9、B 10、C 11、D 12、C13、B 14、A 15、D 16、A 17、C 18、B 19、D 20、D二、填空题:1、元素、首、尾、位置、前趋、后继2、前趋、前趋、后继、后继3、线性4、顺序、长度5、q=p->next;p->next=q->next;free(q);6、p->next=head;7、q=rear->next->next;rear->next->next=q->next;free(q);三、应用题:(略)四、算法设计题:(略)习题3一、选择题:1、A2、B3、A4、C5、A6、B7、C8、C9、B 10、C二、填空题:1、n-12、x=top->data;top=top->next;3、n-14、b,c,e,d,a5、if((rear+1)%(m+1)=front)return (eof);else{rear=(rear+1)%(m+1);A[rear]=x;return 1;}6、FILO、FIFO、只允许在端点处进行插入(删除)操作7、栈8、队尾9、队满、队空三、应用题:(略)四、算法设计题:(略)习题4一、选择题:1、C2、A3、A4、B5、B6、C7、B8、A9、C 10、C二、填空题:1、3152、11、313、i(i-1)/2+j4、((0,2,2),(1,0,3),(2,2,-1),(2,3,5))5、N(N+1)/26、(d1-c1+1)*(d2-c2+1)*(d3-c3+1)7、15648、22109、GetTail(GetTail(GetHead(GetHead(GetTail(s)))))10、5、3三、应用题:1、(1)数组A的容量:6*8*6=288(字节)(2)行优先存储A[1,4]的地址:1000+3*6=1018(3)列优先存储A[4,7]的地址:1000+(6*6+3)*6=12342、(1)M含有的数据元素数目:2*7*6=84(2)M[2,2,2]的地址:100+(6*6+3)*2=178M[3,-3,3]的地址:100+(7*6+1*6+4)*2=204M[3,0,0]的地址:100+(6*7+4*6+1)*2=2343、A[15,15]按行压缩存储前面的元素个数是:3+4+5*13+2=54所以A[15,15]在B中的下标是:55-21=344、(略)。
数据结构(第二版)习题库章节练习题1-9章全
数据结构(第二版)习题库章节练习题1-9章全数据结构(第二版)习题库章节练习题1-9章全第一章:引论引论部分为数据结构的开篇,主要介绍了数据结构的基本概念和分类。
在这一章中,我们学习了数据结构的定义、作用以及与算法的关系。
接下来,将为你详细介绍第一章的习题内容。
1. 习题1-1题目:请简述数据结构的定义和作用。
要求:通过一段简洁清晰的语言来回答问题,并给出你的理解。
答案:数据结构是计算机中存储、组织和管理数据的方式。
它旨在将数据以特定的方式进行排列,以便高效地进行存储和检索。
数据结构作为计算机科学的基础,为我们解决实际问题提供了有效的工具和方法。
2. 习题1-2题目:你认为数据结构与算法之间的关系是什么?要求:结合实际案例,详细解释数据结构与算法之间的相互依赖关系。
答案:数据结构和算法是密不可分的,它们之间存在着相互依赖的关系。
数据结构提供了算法操作的基础,而算法则对数据结构进行操作和处理。
例如,在搜索算法中,我们需要合适的数据结构来存储和组织数据,以便能够高效地进行搜索操作。
而无论是数组、链表还是树,都需要通过算法来进行增删改查等操作。
第二章:算法分析算法分析是数据结构中的重要概念,它涉及到算法的运行时间和空间效率。
在这一章中,我们将学习算法分析的基本方法和常用技巧,并通过习题来巩固所学知识。
3. 习题2-1题目:请解释渐进记号中的"O"表示什么意思。
要求:简明扼要地回答问题,并辅以例子说明。
答案:在算法分析中,"O"表示渐进上界。
它描述了算法在最坏情况下的运行时间复杂度。
例如,如果一个算法的时间复杂度为O(n),那么说明该算法的运行时间与输入规模n成正比。
即使输入规模变大,算法的运行时间也不会超过n的某个常数倍。
4. 习题2-2题目:请说明算法的平均情况分析与最坏情况分析有何区别?要求:用简洁的语言说明两种分析方法的不同之处,并给出具体的示例。
答案:算法的平均情况分析和最坏情况分析的区别在于对输入数据的预先假设。
中国铁道出版社数据结构(第二版)单元9练习参考答案
单元练习9一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)二分查找法要求待查表的关键字值必须有序。
(ㄨ)(2)对有序表而言采用二分查找总比采用顺序查找法速度快。
(ㄨ)(3)在二叉排序树中,根结点的值都小于孩子结点的值。
(√)(4)散列存储法的基本思想是由关键字的值决定数据的存储地址。
(√)(5)哈希表是一种将关键字转换为存储地址的存储方法。
(ㄨ)(6)选择好的哈希函数就可以避免冲突的发生。
(ㄨ)(7)在有序的顺序表和有序的链表上,均可以采用二分查找来提高查找速度。
(√)(8)采用分块查找,既能实现线性表所希望的查找速度,又能适应动态变化的需要。
(√)(9)哈希法的查找效率主要取决于哈希表构造时选取的哈希函数和处理冲突的方法。
(ㄨ)(10)在二叉排序树上删除一个结点时,不必移动其它结点,只要将该结点的父结点的相应的指针域置空即可。
二.填空题(1)顺序查找法,表中元素可以任意存放。
(2)在分块查找方法中,首先查找索引,然后再查找相应的块。
(3)顺序查找、二分查找、分块查找都属于静态查找。
(4)静态查找表所含元素个数在查找阶段是固定不变的。
(5)对于长度为n的线性表,若进行顺序查找,则时间复杂度为 O(n)。
(6)对于长度为n的线性表,若采用二分查找,则时间复杂度为: O(log2n)。
(7)理想情况下,在散列表中查找一个元素的时间复杂度为: O(1)。
(8)在关键字序列(7,10,12,18,28,36,45,92)中,用二分查找法查找关键字92,要比较 4 次才找到。
(9)设有100个元素,用二分查找时,最大的比较次数是 7 次。
(10)对二叉排序树进行查找的方法是用待查的值与根结点的键值进行比较,若比根结点小,则继续在左子树中查找。
(11)二叉排序树是一种动态查找表。
(12)哈希表是按散列存储方式构造的存储结构(13)哈希法既是一种存储方法,又是一种查找方法。
(14)散列表的查找效率主要取决于散列表造表时选取的散列函数和处理冲突的方法。
数据结构C语言版第2版课后习题答案61248
数据结构(C语言版)(第2版)课后习题答案李冬梅2015。
3目录第1章绪论 0第2章线性表 (4)第3章栈和队列 (13)第4章串、数组和广义表 (26)第5章树和二叉树 (33)第6章图 (43)第7章查找 (55)第8章排序 (66)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集.例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构"的数据元素的集合,“结构"就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称.具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
中国铁道出版社数据结构(第二版)单元5练习参考答案
单元练习5一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(ㄨ)(1)串是n个字母的有限序列。
(√)(2)串的数据元素是一个字符。
(ㄨ)(3)串的长度是指串中不同字符的个数。
(ㄨ)(4)如果两个串含有相同的字符,则说明它们相等。
(ㄨ)(5)如果一个串中所有的字母均在另一个串中出现,则说明前者是后者的子串。
(√)(6)串的堆分配存储是一种动态存储结构。
(ㄨ)(7)“DT”是“DA TA”的子串。
(ㄨ)(8)串中任意个字符组成的子序列称为该串的子串。
(√)(9)子串的定位运算称为模式匹配。
(√)(10)在链串中为了提高存储密度,应该增大结点的大小。
二.填空题(1)由零个或多个字符组成的有限序列称为字符串(或串)。
(2)字符串按存储方式可以分为:顺序存储、链接存储和堆分配存储。
(3)串的顺序存储结构简称为顺序串。
(4)串顺序存储非紧凑格式的缺点是:空间利用率低。
(5)串顺序存储紧凑格式的缺点是对串的字符处理效率低。
(6)串链接存储的优点是插入、删除方便,缺点的空间利用率低。
(7)在C或C++语言中,以字符\0 表示串值的终结。
(8)空格串的长度等于空格的个数。
(9)在空串和空格串中,长度不为0的是空格串。
(10)两个串相等是指两个串相长度等,且对应位置的字符都相同。
(11)设S="My Music",则LenStr(s)= _ 8 。
(12)两个字符串分别为:S1="Today is",S2="30 July,2005",ConcatStr(S1,S2)的结果是: Today is 30 July,2005 。
(13)求子串函数SubStr("Today is 30 July,2005",13,4)的结果是:July 。
(14)在串的运算中,EqualStr(aaa,aab)的返回值为<0 。
(15)在串的运算中,EqualStr(aaa,aaa)的返回值为0 。
数据结构C语言版第2版课后习题答案
数据结构(C语言版)(第2版)课后习题答案目录第1章绪论 (1)第2章线性表 (5)第3章栈和队列 (13)第4章串、数组和广义表 (26)第5章树和二叉树 (33)第6章图 (43)第7章查找 (54)第8章排序 (65)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)
《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII第1章4.答案:(1)顺序存储结构顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。
(2)链式存储结构顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。
但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址。
所以链式存储结构通常借助于程序设计语言的指针类型来描述。
5. 选择题(1)~(6):CCBDDA6.(1)O(1) (2)O(m*n) (3)O(n2)(4)O(log3n) (5)O(n2) (6)O(n)第2章1.选择题(1)~(5):BABAD (6)~(10): BCABD (11)~(15):CDDAC 2.算法设计题(1)将两个递增的有序链表合并为一个递增的有序链表。
要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。
表中不允许有重复的数据。
[题目分析]合并后的新表使用头指针Lc指向,pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表La 和Lb均为到达表尾结点时,依次摘取其中较小者重新链接在Lc表的最后。
如果两个表中的元素相等,只摘取La表中的元素,删除Lb表中的元素,这样确保合并后表中无重复的元素。
当一个表到达表尾结点,为空时,将非空表的剩余元素直接链接在Lc表的最后。
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){//合并链表La和Lb,合并后的新表使用头指针Lc指向pa=La->next; pb=Lb->next;//pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点Lc=pc=La; //用La的头结点作为Lc的头结点while(pa && pb){ if(pa->data<pb->data){pc->next=pa; pc=pa; pa=pa->next;}//取较小者La中的元素,将pa链接在pc的后面,pa指针后移else if(pa->data>pb->data) {pc->next=pb; pc=pb; pb=pb->next;}//取较小者Lb中的元素,将pb链接在pc的后面,pb指针后移else //相等时取La中的元素,删除Lb中的元素{pc->next=pa;pc=pa;pa=pa->next;q=pb->next; delete pb ; pb =q;}}pc->next=pa?pa:pb; //插入剩余段delete Lb; //释放Lb的头结点}(5)设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A中的元素为非零整数,要求B、C表利用A表的结点)。
中国铁道出版社数据结构(第二版)单元1练习参考答案
单元练习1一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)数据的逻辑结构与数据元素本身的内容和形式无关。
(√)(2)一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。
(ㄨ)(3)数据元素是数据的最小单位。
(ㄨ)(4)数据的逻辑结构和数据的存储结构是相同的。
(ㄨ)(5)程序和算法原则上没有区别,所以在讨论数据结构时可以通用。
(√)(6)从逻辑关系上讲,数据结构主要分为线性结构和非线性结构两类。
(√)(7)数据的存储结构是数据的逻辑结构的存储映像。
(√)(8)数据的物理结构是指数据在计算机内实际的存储形式。
(ㄨ)(9)数据的逻辑结构是依赖于计算机的。
(√)(10)算法是对解题方法和步骤的描述。
二.填空题(1)数据有逻辑结构和存储结构两种结构。
(2)数据逻辑结构除了集合以外,还包括:线性结构、树形结构和图形结构。
(3)数据结构按逻辑结构可分为两大类,它们是线性结构和非线性结构。
(4)树形结构和图形结构合称为非线性结构。
(5)在树形结构中,除了树根结点以外,其余每个结点只有 1 个前趋结点。
(6)在图形结构中,每个结点的前趋结点数和后续结点数可以任意多个。
(7)数据的存储结构又叫物理结构。
(8)数据的存储结构形式包括:顺序存储、链式存储、索引存储和散列存储。
(9)线性结构中的元素之间存在一对一的关系。
(10)树形结构结构中的元素之间存在一对多的关系,(11)图形结构的元素之间存在多对多的关系。
(12)数据结构主要研究数据的逻辑结构、存储结构和算法(或运算)三个方面的内容。
(13)数据结构被定义为(D,R),其中D是数据的有限集合,R是D上的关系的有限集合。
(14)算法是一个有穷指令的集合。
(15)算法效率的度量可以分为事先估算法和事后统计法。
(16)一个算法的时间复杂性是算法输入规模的函数。
(17)算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题规模n的函数。
中国铁道出版社数据结构(第二版)单元10练习参考答案
单元测验10一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(ㄨ)(1)如果某种排序算法不稳定,则该排序方法就没有实用价值。
(√)(2)希尔排序是不稳定的排序。
(ㄨ)(3)冒泡排序是不稳定的排序。
(√)(4)对n个记录的进行快速排序,所需要的平均时间是O(nlog2n)。
(ㄨ)(5)堆排序所需的时间与待排序的记录个数无关。
(√)(6)当待排序的元素个数很多时,为了交换元素的位置要占用较多的时间,这是影响时间复杂度的主要因素。
(ㄨ)(7)快速排序在任何情况下都比其它排序方法速度快。
(√)(8)对快速排序来说,初始序列为正序或反序都是最坏情况。
(√)(9)采用归并排序可以实现外排序。
(√)(10)采用希尔方法排序时,若关键字的排列杂乱无序,则效率最高。
(√)(11)快速排序算法在每一趟排序中都能找到一个元素放在其最终位置上。
(√)(12)冒泡排序的时间复杂度是O(n2)。
二.填空题(1)大多数排序算法都有两个基本的操作:比较和移动。
(2)评价排序算法优劣的主要标准是时间复杂度和算法所需的附加空间。
(3)根据被处理的数据在计算机中使用不同的存储设备,排序可分为:内排序和外排序。
(4)外排序是指在排序过程中,数据的主要部分存放在计算机的外存中。
(5)对n个关键字进行冒泡排序,其可能的最小比较次数为: n-1 次。
(6)在最坏情况下,在第i趟直接插入排序中,要进行 i-1 次关键字的比较。
(7)对n个关键字进行冒泡排序,时间复杂度为 O(n2) 。
(8)快速排序在最坏情况下的时间复杂度是 O(n2) 。
(9)对于n个记录的集合进行归并排序,所需要的平均时间为: O(log2n) 。
(10)对于n个记录的集合进行归并排序,所需要的附加空间是 O(n) 。
(11)若原始数据接近无序,则选用快速排序最好。
(12)在排序前,关键字值相等的不同记录,排序后相对位置保持不变的排序方法,称为稳定排序方法。
数据结构(第二版)课后习题答案
数据结构(第二版)课后习题答案第一章:数据结构概述数据结构是计算机科学中非常重要的一个概念,它用于组织和管理计算机内部存储的数据。
数据结构的设计直接影响到程序的运行效率和对真实世界问题的建模能力。
第二版的《数据结构》教材旨在帮助读者更好地理解和应用数据结构。
为了提高学习效果,每章节后都附有一系列习题。
本文将为第二版《数据结构》教材中的部分习题提供详细的答案和解析。
第二章:线性表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:请问队列可以用哪些方式实现?答案:队列可以用数组或链表来实现。
中国铁道出版社数据结构(第二版)单元8练习参考答案
单元练习8一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)图可以没有边,但不能没有顶点。
(ㄨ)(2)在无向图中,(V1,V2)与(V2,V1)是两条不同的边。
(ㄨ)(3)邻接表只能用于有向图的存储。
(√)(4)一个图的邻接矩阵表示是唯一的。
(ㄨ)(5)用邻接矩阵法存储一个图时,所占用的存储空间大小与图中顶点个数无关,而只与图的边数有关。
(ㄨ)(6)有向图不能进行广度优先遍历。
(√)(7)若一个无向图的以顶点V1为起点进行深度优先遍历,所得的遍历序列唯一,则可以唯一确定该图。
(√)(8)存储无向图的邻接矩阵是对称的,因此只要存储邻接矩阵的上三角(或下三角)部分就可以了。
(ㄨ)(9)用邻接表法存储图时,占用的存储空间大小只与图中的边数有关,而与结点的个数无关。
(√)(10)若一个无向图中任一顶点出发,进行一次深度优先遍历,就可以访问图中所有的顶点,则该图一定是连通的。
二.填空题(1)图常用的存储方式有邻接矩阵和邻接表等。
(2)图的遍历有:深度优先搜和广度优先搜等方法。
(3)有n条边的无向图邻接矩阵中,1的个数是 _2n____。
(4)有向图的边也称为 _ 弧___ 。
(5)图的邻接矩阵表示法是表示 __顶点____之间相邻关系的矩阵。
(6)有向图G用邻接矩阵存储,其第i行的所有元素之和等于顶点i的 __出度____。
(7)n个顶点e条边的图若采用邻接矩阵存储,则空间复杂度为:O(n2)。
(8)n个顶点e条边的图若采用邻接表存储,则空间复杂度为:O(n+e)。
(9)设有一稀疏图G,则G采用 _邻接表____存储比较节省空间。
(10)设有一稠密图G,则G采用 _邻接矩阵____存储比较节省空间。
(11)图的逆邻接表存储结构只适用于 __有向____图。
(12) n个顶点的完全无向图有 n(n-1)/2_ 条边。
(13)有向图的邻接表表示适于求顶点的出度。
(14)有向图的邻接矩阵表示中,第i列上非0元素的个数为顶点V i的入度。
中国铁道出版社数据结构(第二版)单元3练习参考答案
单元练习3一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)栈是运算受限制的线性表。
(√)(2)在栈空的情况下,不能作出栈操作,否则产生下溢出。
(ㄨ)(3)栈一定是顺序存储的线性结构。
(√)(4)栈的特点是“后进先出”。
(ㄨ)(5)空栈就是所有元素都为0的栈。
(ㄨ)(6)在C或C++语言中设顺序栈的长度为MAXLEN,则top=MAXLEN时表示队满。
(√)(7)链栈与顺序栈相比,其特点之一是通常不会出现栈满的情况。
(ㄨ)(8)一个栈的输入序列为:A,B,C,D,可以得到输出序列:C,A,B,D。
(ㄨ)(9)递归定义就是循环定义。
(√)(10)将十进制数转换为二进制数是栈的典型应用之一。
二.填空题(1)在栈结构中,允许插入、删除的一端称为栈顶。
(2)在顺序栈中,当栈顶指针top=-1时,表示栈空。
(3)在有n个元素的栈中,进栈操作的时间复杂度为O(1)。
(4)在栈中,出栈操作的时间复杂度为:O(1) 。
(5)已知表达式,求它的后缀表达式是栈的典型应用。
(6)在一个链栈中,若栈顶指针等于NULL,则表示栈空。
(7)向一个栈顶指针为top的链栈插入一个新结点*p时,应执行p->next=top;和top=p;操作。
(8)顺序栈S存储在数组 S->data[0..MAXLEN-1]中,进栈操作时要执行的语句有:S->top++ 。
(或= S->top+1)(9)链栈LS,指向栈顶元素的指针是LS->next 。
(10)从一个栈删除元素时,首先取出栈顶元素,然后再移动栈顶指针。
(11)由于链栈的操作只在链表的头部进行,所以没有必要设置头结点。
(12)已知顺序栈S,在对S进行进栈操作之前首先要判断栈是否满。
(13)已知顺序栈S,在对S进行出栈操作之前首先要判断栈是否空。
(14)若内存空间充足,链栈可以不定义栈满运算。
(15)链栈LS是空的条件是LS->next=NULL 。
数据结构(第二版)课后习题答案(王红梅主编)
第 1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
【解答】数据元素⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。
【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。
⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。
【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。
【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。
【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。
【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺在一般情况下,一个算法的时间复杂度是()的函数。
【解答】问题规模⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。
【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。
2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。
A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。
⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单元练习8一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)图可以没有边,但不能没有顶点。
(ㄨ)(2)在无向图中,(V1,V2)与(V2,V1)是两条不同的边。
(ㄨ)(3)邻接表只能用于有向图的存储。
(√)(4)一个图的邻接矩阵表示是唯一的。
(ㄨ)(5)用邻接矩阵法存储一个图时,所占用的存储空间大小与图中顶点个数无关,而只与图的边数有关。
(ㄨ)(6)有向图不能进行广度优先遍历。
(√)(7)若一个无向图的以顶点V1为起点进行深度优先遍历,所得的遍历序列唯一,则可以唯一确定该图。
(√)(8)存储无向图的邻接矩阵是对称的,因此只要存储邻接矩阵的上三角(或下三角)部分就可以了。
(ㄨ)(9)用邻接表法存储图时,占用的存储空间大小只与图中的边数有关,而与结点的个数无关。
(√)(10)若一个无向图中任一顶点出发,进行一次深度优先遍历,就可以访问图中所有的顶点,则该图一定是连通的。
二.填空题(1)图常用的存储方式有邻接矩阵和邻接表等。
(2)图的遍历有:深度优先搜和广度优先搜等方法。
(3)有n条边的无向图邻接矩阵中,1的个数是 _2n____。
(4)有向图的边也称为 _ 弧___ 。
(5)图的邻接矩阵表示法是表示 __顶点____之间相邻关系的矩阵。
(6)有向图G用邻接矩阵存储,其第i行的所有元素之和等于顶点i的 __出度____。
(7)n个顶点e条边的图若采用邻接矩阵存储,则空间复杂度为:O(n2)。
(8)n个顶点e条边的图若采用邻接表存储,则空间复杂度为:O(n+e)。
(9)设有一稀疏图G,则G采用 _邻接表____存储比较节省空间。
(10)设有一稠密图G,则G采用 _邻接矩阵____存储比较节省空间。
(11)图的逆邻接表存储结构只适用于 __有向____图。
(12) n个顶点的完全无向图有 n(n-1)/2_ 条边。
(13)有向图的邻接表表示适于求顶点的出度。
(14)有向图的邻接矩阵表示中,第i列上非0元素的个数为顶点V i的入度。
(15)对于具有n个顶点的图,其生成树有且仅有n-1 条边。
(16)对n个顶点,e条弧的有向图,其邻接表表示中,需要n+e 个结点。
(17)从图中某一顶点出发,访遍图中其余顶点,且使每一顶点仅被访问一次,称这一过程为图的遍历。
(18)无向图的邻接矩阵一定是对称矩阵。
(19)一个连通网的最小生成树是该图所有生成树中权最小的生成树。
(20)若要求一个稠密图G的最小生成树,最好用Prim 算法来求解。
三.选择题(1)在一个图中,所有顶点的度数之和等于图的边数的( C )倍。
A.1/2 B. 1 C. 2 D. 4(2)在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的( B )倍。
A.1/2 B. 1 C. 2 D. 4(3)对于一个具有n个顶点的有向图的边数最多有( B )。
A.n B.n(n-1) C.n(n-1)/2 D.2n(4)在一个具有n个顶点的无向图中,要连通全部顶点至少需要( C )条边。
A.n B.n+1 C. n-1 D.n/2(5)有8个结点的有向完全图有( C )条边。
A.14 B. 28 C. 56 D. 112(6)深度优先遍历类似于二叉树的( A )。
A.先序遍历 B.中序遍历 C.后序遍历 D.层次遍历(7)广度优先遍历类似于二叉树的( D )。
A.先序遍历 B.中序遍历 C.后序遍历 D.层次遍历(8)任何一个无向连通图的最小生成树( A )。
A.只有一棵 B.一棵或多棵 C.一定有多棵 D.可能不存在(9)无向图顶点v的度是关联于该顶点( B )的数目。
A.顶点 B.边 C.序号 D.下标(10)有n个顶点的无向图的邻接矩阵是用( B )数组存储。
A.一维B.n行n列C.任意行n列 D.n行任意列(11)对于一个具有n个顶点和e条边的无向图,采用邻接表表示,则表头向量大小为( C )。
A.n-1 B.n+1 C.n D.n+e(12)在图的表示法中,表示形式唯一的是( A )。
A.邻接矩阵表示法 B.邻接表表示法C.逆邻接表表示法 D.邻接表和逆邻接表表示法(13)在一个具有n个顶点e条边的图中,所有顶点的度数之和等于( C )。
A.n B.e C. 2n D.2e(14)下列图中,度为3的结点是( B )。
A .V 1 B. V 2 C. V 3 D. V 4 (15)下列图是( A )。
A .连通图 B. 强连通图 C. 生成树 D. 无环图(16)如下图所示,从顶点a 出发,按深度优先进行遍历,则可能得到的一种顶点序列为( D )。
A . a ,b ,e ,c ,d ,fB . a ,c ,f ,e ,b ,d C. a ,e ,b ,c ,f ,d D. a ,e ,d ,f ,c ,b(17)如下图所示,从顶点a 出发,按广度优先进行遍历,则可能得到的一种顶点序列为( A )。
A. a ,b ,e ,c ,d ,fB. a ,b ,e ,c ,f ,dC. a ,e ,b ,c ,f ,dD. a ,e ,d ,f ,c ,b(18)最小生成树的构造可使用( A )算法。
A .prim 算法B .卡尔算法C .哈夫曼算法D .迪杰斯特拉算法(19)下面关于图的存储结构的叙述中正确的是( A )。
A . 用邻接矩阵存储图,占用空间大小只与图中顶点数有关,而与边数无关B . 用邻接矩阵存储图,占用空间大小只与图中边数有关,而与顶点数无关C . 用邻接表存储图,占用空间大小只与图中顶点数有关,而与边数无关D . 用邻接表存储图,占用空间大小只与图中边数有关,而与顶点数无关 (20)连通分量是( C )的极大连通子图。
A .树B .图C .无向图D .有向图四.应用题(30分)1.有向图如下图所示,画出邻接矩阵和邻接表解:(1)邻接矩阵1 2 3 4 5⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛0100000001100000100010110543212. 已知一个无向图有6个结点,9条边,这9条边依次为(0,1),(0,2),(0,4),(0,5),(1,2),(2,3),(2,4),(3,4),(4,5)。
试画出该无向图,并从顶点0出发,分别写出按深度优先搜索和按广度优先搜索进行遍历的结点序列。
(5分) 解:从顶点0出发的深度优先搜索遍历的结点序列:0 1 2 3 4 5(答案不唯一) 从顶点0出发的广度优先搜索遍历的结点序列:0 1 2 4 5 3(答案不唯一)3. 已知一个无向图的顶点集为:{a ,b ,c ,d ,e},其邻接矩阵如下,画出草图,写出顶点a 出①②③④⑤发按深度优先搜索进行遍历的结点序列。
(5分)解:(1)(2)深度优先搜索:a b d c e (答案不唯一)广度优先搜索:a b e d c (答案不唯一)4.网G 的邻接矩阵如下,试画出该图,并画出它的一棵最小生成树。
解:5. 已知某图G 的邻接矩阵如图,(1)画出相应的图;(2)要使此图为完全图需要增加几条边。
解: (1)(2) 完全无向图应具有的边数为:n*(n-1)1/2=4*(4-1)/2=6,所以还要增加2条边(如右图)。
⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡0110110110110000100110010⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡0101101001011010⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡07013070401104031013030801110806.已知如图所示的有向图,请给出该图的:(1) 每个顶点的入/出度; (2) 邻接表; (3) 邻接矩阵。
解:(1) (2)(3)7.如图,请完成以下操作:(2) 写出无向带权图的邻接矩阵; (3) 设起点为a ,求其最小生成树。
解:(1)邻接矩阵为: (2)起点为a ,可以直接由原始图画出最小生成树⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞0645602520363079456705555053955043408.给定下列网G:(1) 画出网G 的邻接矩阵;(2) 画出网G 的最小生成树。
解:(1)邻接矩阵 (2)最小生成树⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞1012696841015121520982012412五.程序题填空题图G 为有向无权图,试在邻接矩阵存储结构上实现删除一条边(v,w)的操作:DeleteArc(G,v,w)。
若无顶点v 或w ,返回“ERROR ”;若成功删除,则边数减1,并返回“OK ”。
(提示:删除一条边的操作,可以将邻接矩阵的第i 行全部置0 ) 解:Status DeleteArc(MGraph &G,char v,char w) //在邻接矩阵表示的图G 上删除边(v,w) { if ((i=LocateVex(G,v))<0) return ERROR ; if ((j=LocateVex(G,w))<0) return ERROR ; if (G.arcs[i][j].adj) { G.arcs[i][j].adj= 0 ;G.arcnum -- ; (或 G.arcnum=G.arcnum-1 ) }return OK ; }六.算法题1. 编写一个无向图的邻接矩阵转换成邻接表的算法。
2. 以知有n 个顶点的有向图邻接表,设计算法分别实现以下功能: (1)求出图G 中每个顶点的出度、入度。
(2)求出G 中出度最大的一个顶点,输出其顶点序号。
(3)计算图中度为0的顶点数。
1.解:本题思想是逐个扫描邻接矩阵的各个元素,若第i行第j列的元素为1,则相应的邻接表的第i个单链表上增加一个j结点。
void trans(int edges[n][n],Adjlist adj){ int i,j;edgenode *p;for (i=0;i<n;i++){ adj[i].data=i;adj[i].link=NULL;}for (i=0;i<n;i++)for (j=0;j<n;j++){ if(edges[i][j]==1){ p=(edgenode *) malloc (sizeof(edgenode));p->adjvex=j;p->next=adj[i].link;adj[i].link=p;}}}2.(1)求出度的思想:计算出邻接表中第i个单链表的结点数即可。
int outdegree(adjlist adj,int v){ int degree=0;edgenode *p;p=adj[v].link;while (p!=NULL){ degree++;p=p->next;}return degree;}void printout(adjlist adj,int n){ int i,degree;printf("The Outdegree are:\n");for(i=0;i<n;i++){ degree=outdegree(adj,i);printf("(%d,%d)",i,degree);}}求入度的思想:计算出邻接表中结点i的结点数即可。