数据结构作业标准答案

合集下载

数据结构》作业题答案

数据结构》作业题答案

参考答案第一章、绪论一、选择题1 B;2 A; 3 B;4 C ;5 C; 6 B;7 C;8 C;9 D;10 B。

二、填空题1、存储;2、无,1,无,1;3、前驱,1,后继,任意多个;4、一对一,一对多,多对多;5、时间复杂度,空间复杂度;6、集合,线性结构,树形结构,图形结构;7、顺序结构,链式结构,索引结构,散列结构;8、顺序。

三、问答题与算法题1、3 ;2、T1 ( n ) = 5n 2 -O ( n ) ; T2 ( n ) = 3 n 2 + O ( n ) ; T3 ( n ) = 8 n 2 + O(log n) ;T4 ( n ) = 1.5 n 2 + O ( n ) 。

T4 ( n ) 较优,T3 ( n )较劣。

3、见课本。

第二章线性表一、选择题1C;2A;3D;4B;5D;6B;7C;8B;9A;10C;11D;12D;13C;14C.二、填空题1、O ( 1 ), O ( n );2、单链表,双链表;3、地址,指针;4、4,2;5、便于访问尾结点和头结点;6、前驱;7、L->next== L且L->prior== L;8、顺序。

三、问答题与算法题1、头指针:结点或头结点的指针变量。

其作用是存放第一个结点或头结点的地址,从头指针出发可以找到链表中所有结点的信息。

头结点:是附加在链表的第一个结点之前的一个特殊结点,其数据域一般不存放信息。

其作用是为了简化运算,将空表与非空表统一起来,将第一个结点与其他结点的处理统一起来。

首结点:是链表的第一个结点。

2、(1)基于空间的考虑。

当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。

(2)基于时间的考虑。

若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。

数据结构作业题目答案

数据结构作业题目答案

数据结构作业题⽬答案⼀、单择题1.栈和队列的共同特点是(A)。

A.只允许在端点处插⼊和删除元素B.都是先进后出C.都是先进先出D.没有共同点2.⼆叉树的第k层的结点数最多为(2的k-1次⽅)。

A.2k-1B.2K+1C.2K-1D. 2k-13.数据结构中,从逻辑上可以把数据结构分成(C)。

A.动态结构和静态结构B.进凑结构和⾮进凑结构C.线性结构和⾮线性结构D.内部结构和外部结构4.设⼆叉树的先序遍历序列和后序遍历序列正好相反,则该⼆树满⾜的条件是(全部是左⼦树或全部是右⼦树 CD )。

A.空或只有⼀个结点B.⾼度等于其结点数C.任⼀结点⽆左孩⼦D.任⼀结点⽆右孩⼦5.设顺序线性表中有n个数据元素,则删除表中第i个元素需要移动( A )个元素。

A. n-iB. n+l -iC.n-1-iD. i6.判定⼀个栈ST(最多元素为m0)为空的条件是(B)。

A.ST→TOP!=0B.ST→TOP==0C.ST→TOP!=m0D.ST→TOP==m0B7. ⾮空的循环单链表head的尾结点(由P所指向)满⾜( C )。

A.p->next=NULLB.p=NULLC.p->next=headD.p=head8.在线性结构中,所有结点都有( B )个直接后继。

A.0B.0或1C.1D.不确定9.设数组A[m]作为循环队列sq的存储空间,front为队头指针,rear为队尾指针,则执⾏⼊队操作时修改指针的语句是。

A、sq.front=(sq.front+1)%mB、sq.front=(sq.front+1)%(m+1)C、sq.rear=(sq.rear+1)%mD、sq.rear=(sq.rear+1)%(m+1)⼆、填空题1.已知⼀棵⼆叉树的中序序列和后序序列分别为:DBGEACHF和DGEBHFCA,则该⼆叉树的前序序列是( ABDECFH )。

2.在( 循环 )链表中,从任何⼀结点出发都能访问到表中的所有结点。

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)【第一章绪论】1. 数据结构是计算机科学中的重要基础知识,它研究的是如何组织和存储数据,以及如何通过高效的算法进行数据的操作和处理。

本章主要介绍了数据结构的基本概念和发展历程。

【第二章线性表】1. 线性表是由一组数据元素组成的数据结构,它的特点是元素之间存在着一对一的线性关系。

本章主要介绍了线性表的顺序存储结构和链式存储结构,以及它们的操作和应用。

【第三章栈与队列】1. 栈是一种特殊的线性表,它的特点是只能在表的一端进行插入和删除操作。

本章主要介绍了栈的顺序存储结构和链式存储结构,以及栈的应用场景。

2. 队列也是一种特殊的线性表,它的特点是只能在表的一端进行插入操作,而在另一端进行删除操作。

本章主要介绍了队列的顺序存储结构和链式存储结构,以及队列的应用场景。

【第四章串】1. 串是由零个或多个字符组成的有限序列,它是一种线性表的特例。

本章主要介绍了串的存储结构和基本操作,以及串的模式匹配算法。

【第五章数组与广义表】1. 数组是一种线性表的顺序存储结构,它的特点是所有元素都具有相同数据类型。

本章主要介绍了一维数组和多维数组的存储结构和基本操作,以及广义表的概念和表示方法。

【第六章树与二叉树】1. 树是一种非线性的数据结构,它的特点是一个节点可以有多个子节点。

本章主要介绍了树的基本概念和属性,以及树的存储结构和遍历算法。

2. 二叉树是一种特殊的树,它的每个节点最多只有两个子节点。

本章主要介绍了二叉树的存储结构和遍历算法,以及一些特殊的二叉树。

【第七章图】1. 图是一种非线性的数据结构,它由顶点集合和边集合组成。

本章主要介绍了图的基本概念和属性,以及图的存储结构和遍历算法。

【总结】1. 数据结构是计算机科学中非常重要的一门基础课程,它关注的是如何高效地组织和存储数据,以及如何通过算法进行数据的操作和处理。

本文对《数据结构》第二版严蔚敏的课后习题作业提供了参考答案,涵盖了第1-7章的内容。

数据结构习题参考答案

数据结构习题参考答案

数据结构习题参考答案一、栈和队列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)题目描述:使用队列实现栈的功能。

解答:使用两个队列,一个用于入栈操作,一个用于出栈操作。

入栈操作:直接将元素入队入栈队列中;出栈操作:如果出栈队列为空,则将入栈队列的元素逐个出队并入队出栈队列,此时出栈队列的队首元素即为要出栈的元素。

数据结构(C++版)课后作业1-6章带答案

数据结构(C++版)课后作业1-6章带答案

第1 章绪论课后习题讲解1. 填空(1) 从逻辑关系上讲,数据结构主要分为()、()、()和()。

(2) 数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。

(3)算法在发生非法操作时可以作出处理的特性称为()。

2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。

A 线性结构 B 非线性结构 C 存储位置 D 指针⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。

则表示该遗产继承关系的最合适的数据结构应该是()。

A 树 B 图 C 线性表 D 集合3. 判断题(1) 每种数据结构都具备三个基本操作:插入、删除和查找。

第2 章线性表课后习题讲解1. 填空⑵顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的存储地址是()。

第5个元素的存储地址=第1个元素的存储地址+(5-1)×2=108⑶设单链表中指针p 指向结点A,若要删除A的后继结点(假设A存在后继结点),则需修改指针的操作为()。

【解答】p->next=(p->next)->next⑸非空的单循环链表由头指针head指示,则其尾结点(由指针p所指)满足()。

p->next=head⑹在由尾指针rear指示的单循环链表中,在表尾插入一个结点s的操作序列是();删除开始结点的操作序列为()。

【解答】s->next =rear->next; rear->next =s; rear =s; q=rear->next->next;rear->next->next=q->next; delete q;2. 选择题⑴线性表的顺序存储结构是一种()的存储结构,线性表的链接存储结构是一种()的存储结构。

数据结构第4-5章作业及答案

数据结构第4-5章作业及答案

数据结构第4-5章作业及答案⼀、填空题1. 不包含任何字符(长度为0)的串称为空串;由⼀个或多个空格(仅由空格符)组成的串称为空⽩串。

2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的位置为3。

3. ⼦串的定位运算称为串的模式匹配;被匹配的主串称为⽬标串,⼦串称为模式。

4、若n为主串长,m为⼦串长,则串的古典(朴素)匹配算法最坏的情况下需要⽐较字符的总次数为(n-m+1)*m。

5、假设有⼆维数组A6×8,每个元素⽤相邻的6个字节存储,存储器按字节编址。

已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为288 B ;末尾元素A57的第⼀个字节地址为1282 ;若按⾏存储时,元素A14的第⼀个字节地址为(8+4)×6+1000=1072 ;若按列存储时,元素A47的第⼀个字节地址为(6×7+4)×6+1000)=1276 。

(注:数组是从0⾏0列还是从1⾏1列计算起呢?由末单元为A57可知,是从0⾏0列开始!)6、设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为8950 。

答:不考虑0⾏0列,利⽤列优先公式:LOC(a ij)=LOC(a c1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L 得:LOC(a32,58)=2048+[(58-1)* (60-1+1)+32-1]]*2=89507、三元素组表中的每个结点对应于稀疏矩阵的⼀个⾮零元素,它包含有三个数据项,分别表⽰该元素的⾏下标、列下标和元素值。

8、⼆维数组A[10][20]采⽤列序为主⽅式存储,每个元素占10个存储单元,且A[0][0]的存储地址是2000,则A[6][12]的地址是32609、已知⼆维数组A[20][10]采⽤⾏序为主⽅式存储,每个元素占2个存储单元,并且A[10][5]的存储地址是1000,则A[18][9]的存储地址是 116810、⼴义表((a,b),c,d)的表头是(a,b) ,表尾是 (c,d)11、⼴义表((((a),b),c),d)的表头是(((a),b),c) ,表尾是(d)12、已知⼆维数组A[10][20]采⽤⾏序为主⽅式存储,每个元素占2个存储单元,并且A[0][0]的存储地址是1024, 则A[6][18]的地址是130013、若串的长度不能确定,可采⽤动态存储结构,为串值分配⼀个存储空间,同时建⽴⼀个串的描述⼦以指⽰串值的长度和串在存储空间中的位置,称该结构为堆/堆结构14、稀疏矩阵⼀般的压缩存储⽅法有两种,即三元组表和⼗字链表。

数据结构习题答案 .doc

数据结构习题答案 .doc

单元练习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)数据结构主要研究数据的逻辑结构、存储结构和算法(或运算)三个方面的内容。

(14)数据结构被定义为(D,R),其中D是数据的有限集合,R是D上的关系的有限集合。

(15)算法是一个有穷指令的集合。

(16)算法效率的度量可以分为事先估算法和事后统计法。

(17)!(18)一个算法的时间复杂性是算法输入规模的函数。

(19)算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题规模n 的函数。

数据结构作业答案(大连理工大学)

数据结构作业答案(大连理工大学)

作业1. 线性表编程作业:1.将顺序表逆置,要求用最少的附加空间。

参考答案#include <>#include <>#include <>#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef struct{ ElemType *elem;int length;int listsize;}SqList;立单链表 ");printf("2.取元素值 ");printf("3.查找 \n");printf("4.插入 ");printf("5.删除 ");printf("6.显示\n");printf("7.删除大于mink且小于maxk的元素值 ");printf("8.就地升序排序\n");printf("9.就地逆置 ");printf("a.有序表插入 ");printf("q.退出\n");printf("\n请选择操作:");fflush(stdin);scanf("%c",&choice);switch(choice){case '1': printf("请输入单链表中结点个数:");scanf("%d",&n);Create_L2(L,n);break;case '2': printf("请输入元素位序:");scanf("%d",&i);GetElem_L(L,i,e);printf("元素值为:%d\n",e);break;case '3': printf("请输入要查找的元素:");scanf("%d",&e);if(dlbcz(L,e))printf("查找成功!");elseprintf("查找失败。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章单选题1、下列关于算法的基本特征,说法不正确的是()。

能行性是算法中的每一个步骤必须能够实现且能达到预期的目的。

算法的确定性是指算法中的每一个步骤必须是有明确的定义,不允许模棱两可。

算法的有穷性是指算法必须能在有限的时间内做完。

算法与提供情报无关。

[D] 教师批改:D2、算法的时间复杂度取决于()。

问题的规模待处理的数据的初态问题的难度 A 和B[D] 教师批改:D3、下列选项中,不是算法基本特征的是()。

可行性有穷性确定性高效率[D] 教师批改:D4、通常一个好的算法应达到的目标中,不包括()。

正确性可读性技巧性健壮性[C] 教师批改:C5、在一般的计算机系统中,基本的运算和操作不包括()。

语法处理算术运算关系运算数据传输[A] 教师批改:A6、工程上常用的分治法是()。

列举法归纳法减半递推技术回溯法[C] 教师批改:C多选题7、算法设计的要求包括()。

正确性可读性健壮性唯一性[ABC] 教师批改:A,B,C8、算法的时间复杂度应该与()无关。

所使用的计算机程序设计语言基本运算的执行次数程序编制者[ABD] 教师批改:A,B,D9、下列关于算法的描述中,不正确的有()。

算法即是计算机程序算法是解决问题的计算方法算法是排序方法算法是解决问题的有限运算序列[ABC] 教师批改:A,B,C填空题16、所谓算法是指()。

教师批改:解题方案的准确而完整的描述17、算法的基本特征有()、()、()和()教师批改:能行性、确定性、有穷性和拥有足够的情报。

18、一个算法通常由两种基本要素组成,它们是()和()。

教师批改:算法中对数据的运算和操作。

算法的控制结构。

19、工程上常用的几种算法设计方法有列举法、()、()、()、()和回溯法。

教师批改:归纳法、递推、递归、减半递推技术。

20、算法的复杂度主要包括()复杂度和()复杂度。

教师批改:时间、空间综合题21、设给定3个整数a,b,c,试写出寻找这3个整数的中数的算法;并分析在平均情况与最坏情况下,该算法分别要做多少次比较?寻找这3个整数的中数的算法用C语言描述如下(中数m由函数值返回):int mid ( int a, int b, int c){ int m 。

m=a 。

if ( m>=b ) { if (m>=c) { if ( b>=c ) m=b 。

else m=c 。

} }else { if ( m<=c) { if (b>=c) m=c。

else m=b 。

} }return ( m ) 。

}假设a,b,c中的每一个数为中数的概率相等(均为1/3)。

由于当a为中数时需要比较2次,b或c为中数时均需要比较3次,因此,在平均情况下上述算法所需要的比较次数为2*(1/3)+3*(1/3)+3*(1/3)= 8/3即在平均情况下,上述算法需要比较8/3次。

在最坏情况下,上述算法需要比较3次(当b或c为中数时)。

第二章选择题1、下列排序方法中,哪一个是稳定的排序方法()。

归并排序稀尔排序堆排序快速排序[A] 教师批改:A2、设输入序列为1,2,3,4,借助一个栈得到的输出序列可以是()。

3,4,1,2 4,2,1,34,1,2,3 1,3,4,2[D] 教师批改:D3、用数组A[m]存放循环队列的元素值,若其头尾指针分别为front和rear,则循环队列中当前元素的个数为()。

(rear+front)%m (rear-front+m)%m(rear-front)%m (rear-front+1)%m[D] 教师批改:B4、对于下三角矩阵A,若采用一个一维数组B以行为主顺序存放压缩矩阵A,则A43存放在()中. B7 B8B9 B10[C] 教师批改:C5、深度为5的二叉树至多有()个结点。

16 3231 10[C] 教师批改:C6、一个有n个顶点的无向图最多有()条边。

n n(n-1)n(n-1)/2 2n[C] 教师批改:C7、下列说法不正确的是()。

线性表可以顺序存储线性表可以链式存储线性表在顺序存储下可以对分查找线性表在链式存储下可以对分查找[D] 教师批改:D8、栈和队列的共同点是()。

都是先进后出都是先进先出只允许在端点处插入和删除元素没有共同点[C] 教师批改:C9、若进栈序列为A、B、C、D(进栈过程可以出栈),不可能得到的出栈序列是()。

A、D、C、B B、C、D、AC、A、D、B C、D、B、A[C] 教师批改:C10、在一个单链表中,若p结点不是最后一结点。

在p结点之后插入s结点的正确操作是()。

s->next=p。

p->next=s。

s->next=p->next 。

p->next=s。

s->next=p。

p=p。

p->next=s。

s->next=p。

[B] 教师批改:B11、由3个结点可以构造出多少种不同的二叉树()。

2 45 8[C] 教师批改:C填空题27、若一棵完全二叉树共有100个结点,则其叶子结点数为()。

教师批改:5028、在单链表中设置(表)头结点的作用是()。

教师批改:简化插入,删除算法,方便运算的实现。

29、结点最少的树为(),结点最少的二叉树为()。

教师批改:只有一个(根)结点的树。

空的二叉树。

34、在一棵二叉树中有30个叶子结点,仅有一个孩子的结点有20个,则该二叉树结点数为()。

教师批改:7935、在线性表的散列存储中,处理冲突有()和()两种方法。

教师批改:拉链法、开地址法36、已知一棵二叉树的中序遍历序列和后序遍历序列分别为BDCEAFHG和DECBHGFA,试写出其前序遍历序列。

教师批改:前序遍历:ABCDEFGH30、数据的()结构与数据元素本身的内容、形式、个数和相对位置无关。

教师批改:逻辑31、数据的存储结构有四种基本的存储映射方式:顺序、()、索引和()存储方式。

教师批改:链式、散列32、用顺序方法将完全二叉树的结点逐层存放在数组A[1]~A[n]中,若结点A[i] 有右子女,则右子女是结点为()。

教师批改:A[2*i+1]33、设有二维数组A4×6,其中每个元素占两个字节,数组按列优先顺序存储,第一个元素a11的存储地址为100,那么元素a43的存储地址为()。

教师批改:122综合题37、什么叫数据结构?数据结构对算法有什么影响?数据结构是指相互有关联的数据元素的集合。

因此,一个数据结构既要反映数据元素的信息,又要反映数据元素之间的关系。

数据元素之间的关系可以是逻辑关系(通常用前后件关系来表示),也可以是数据元素在计算机中的存储位置。

反映数据元素之间逻辑关系的数据结构称为数据的逻辑结构。

数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构,又称为数据的物理结构。

同一批数据元素的集合,采用不同的数据结构(特别是存储结构),其数据处理的效率是不一样的,主要体现在算法的时间复杂度与空间复杂度方面。

比如:若只是对2~3个数进行排序,则用几个IF语句即可完成;而若对一般情况下的N个数进行排序,则要使用数组,通过(双重等)循环来完成。

38、试写出在顺序存储结构下逆转线性表的算法,要求使用最少的附加空间顺序存储结构下逆转线性表的算法用C语言描述如下(其中ET为数据元素的类型):void invsl ( int n , ET a [ ] ){ int k 。

ET t 。

for ( k=0 。

k<n/2 。

k + + ){ t=a[k]。

a[k]=a[n-1-k]。

a[n-1-k]=t。

}return 。

}39、设循环队列的容量为70(序号为1~70),现经过一系列的入队与退队运算后,有:(1)front=14,rear=21。

(2)front=23,rear=12。

问在这两种情况下,循环队列中各有多少个元素?设循环队列的容量为M。

如果rear>front ,则循环队列中的元素个数为rear-front ;如果rear<front ,则循环队列中的元素个数为M+(rear-front) ;由此可以得到:(1)循环队列中的元素个数为rear-front = 21-14 = 7 。

(2)循环队列中的元素个数为M+(rear-front) = 70+(12-23) = 59 。

注:求循环队列中元素个数的通用式为:( rear-front+M ) % M 。

其中%为求余运算。

40、试编写一个算法,将两个有序的顺序表合并为一个有序的顺序表。

合并有序顺序表的算法如下描述。

输入:长度为的有序数组A(1:n),长度为的有序数组B(1:m)。

输出:有序数组A与有序数组B合并后的有序数组C(1:mn)。

其中mn = m+n 。

上述算法用C语言描述如下(其中ET为数据元素的类型):void mgsl ( int n , ET a[ ] , int m , ET b[ ] , ET c[ ] ){ int i , j , k , t 。

i = 0 。

j = 0 。

k = 0 。

while ( ( i<n ) && ( j<m ) ){ if ( a [ i ] <= b [ j ] ){ c [ k ] = a[ i ] 。

i = i+1 。

}else { c [ k ] = b [ j ] 。

j= j+1 。

}k = k+1 。

}if ( i = = n)for ( t = j 。

t < m 。

t + + ){ c [ k ] = b [ t ] 。

k = k+1 。

elsefor ( t = i 。

t < n 。

t + + ){ c [ k ] = a [ t ] 。

k = k+1 。

}return 。

}41、试写出计算循环链表长度的算法。

算法用C语言描述如下(其中ET为数据元素类型,函数值返回循环链表的长度n ):struct node /* 定义循环链表结点类型*/{ ET d 。

/* 定义循环链表结点数据类型*/struct node * next 。

/* 结点指针*/} 。

int lencst ( struct node * head ){ int n 。

struct node * p 。

n = 0 。

p = head->next 。

while ( p != head ) { n = n+1 。

p = p->next 。

}return ( n ) 。

}42、试写出逆转(带表头结点的)线性单链表的算法。

设其头指针为head ,数据元素类型为ET。

算法用C语言描述如下:struct node /* 定义线性单链表结点类型*/{ ET d 。

/* 定义线性单链表结点数据类型*/struct node * next 。

相关文档
最新文档