《数据结构》期终考试试卷(A)-清华大学

合集下载

数据结构期中考试试卷

数据结构期中考试试卷

数据结构期中考试试卷一、选择题(每题2分,共20分)1. 在数据结构中,线性结构的特点是什么?A. 元素之间存在一对一关系B. 元素之间存在一对多关系C. 元素之间存在多对多关系D. 元素之间存在一对一或多对多关系2. 以下哪个算法不是排序算法?A. 快速排序B. 归并排序C. 深度优先搜索D. 堆排序3. 在二叉树中,度为2的节点最多有多少个子节点?A. 1B. 2C. 3D. 44. 哈希表解决冲突的方法不包括以下哪一项?A. 分离链接法B. 开放寻址法C. 链地址法D. 树形结构法5. 以下哪个不是图的遍历算法?A. 深度优先搜索B. 广度优先搜索C. 动态规划D. 克鲁斯卡尔算法6. 栈的特点是?A. 后进先出B. 先进后出C. 先进先出D. 后进后出7. 以下哪个不是二叉搜索树的性质?A. 左子树上所有节点的值小于它的根节点的值B. 右子树上所有节点的值大于它的根节点的值C. 左子树和右子树都是二叉搜索树D. 所有节点的值都相等8. 在数据库中,索引的作用是什么?A. 增加数据存储空间B. 提高数据检索效率C. 降低数据插入速度D. 减少数据存储量9. 以下哪个不是图的存储结构?A. 邻接矩阵B. 邻接表C. 树形结构D. 边列表10. 递归算法的基本思想是什么?A. 将问题分解为更小的子问题B. 重复执行相同的操作C. 将问题转化为非递归形式D. 避免使用循环结构二、填空题(每题2分,共20分)1. 在数据结构中,______是一种特殊的线性表,只允许在一端进行插入和删除操作。

2. 排序算法中,______排序的时间复杂度为O(n^2),适用于小规模数据的排序。

3. 在图的表示中,______矩阵可以有效地表示稠密图。

4. 哈希表中,______是指两个关键字通过哈希函数得到同一个哈希地址。

5. 栈和队列的主要区别在于,栈是______,而队列是先进先出。

6. 二叉树的遍历方式包括前序遍历、中序遍历和______遍历。

《数据结构》期终考试试卷(A)-清华大学

《数据结构》期终考试试卷(A)-清华大学

2010年《数据结构》期终考试试卷(A)班级学号姓名一、简答题(每小题6分,共30分)(1) 假设一个线性链表的类名为linkedList,链表结点的类名为ListNode,它包含两个数据成员data和link。

data存储该结点的数据,link是链接指针。

下面给定一段递归打印一个链表中所有结点中数据的算法:void PrintList (ListNode *L) {if ( L != NULL ) {cout << L->data << endl;PrintList ( L->link );}}试问此程序在什么情况下不实用?给出具体修改后的可实用的程序?(1) 此程序在内存容量不足时不适用。

因为需要一个递归工作栈。

当链表越长,递归工作栈的深度越深,需要的存储越多。

可采用非递归算法节省存储。

void PrintList (ListNode *L) {while ( L != NULL ) {cout << L->data << endl;L = L->link;}}(2) 如果每个结点占用2个磁盘块因而需要2次磁盘访问才能实现读写,那么在一棵有n个关键码的2m阶B树中,每次搜索需要的最大磁盘访问次数是多少?(2) 在2m阶B树中关键码个数n与B树高度h之间的关系为h≤log m ((n+1)/2)+1,那么每次搜索最大磁盘访问次数为2h max = 2log m ((n+1)/2)+2。

(3) 给定一棵保存有n 个关键码的m 阶B 树。

从某一非叶结点中删除一个关键码需要的最大磁盘访问次数是多少?(3) 在m 阶B 树中关键码个数n 与B 树最大高度h 的关系为h = log ⎡m/2⎤((n+1)/2)+1。

若设寻找被删关键码所在非叶结点读盘次数为h ’,被删关键码是结点中的k i ,则从该结点的p i 出发沿最左链到叶结点的读盘次数为h -h ’。

11-12学年2学期电子信息工程《数据结构》期中试卷

11-12学年2学期电子信息工程《数据结构》期中试卷

11-12学年2学期电⼦信息⼯程《数据结构》期中试卷11-12学年2学期电⼦信息⼯程《数据结构》期中试卷答题纸上只写班级姓名学号及每题答案。

1、单项选择题(本⼤题共30⼩题,每⼩题1分,共30分)在每⼩题列出的四个备选项中只有⼀个是符合题⽬要求的,请将其代码填写在题后的括号内。

错选、多选或未选均⽆分。

1.数据的不可分割的最⼩标识单位是()A.数据项B.数据记录C.数据元素D.数据变量2.for(i=0;ifor(j=0;jc[i][j]=0;for(i=0;ifor(j=0;jfor(k=0;kc[i][j]=c[i][j]+a[i][k]*b[k][j];上列程序的时间复杂度为()A.O(m+n×t)B.O(m+n+t)C.O(m×n×t)D.O(m×t+n)3.若线性表最常⽤的操作是存取第i个元素及其前趋的值,那么最节省操作时间的存储⽅式是()A.单链表B.双链表C.单循环链表D.顺序表4.设单链表中指针p指向结点A,要删除A之后的结点(若存在),则修改指针的操作为()A.p—>next=p—>next—>nextB.p=p—>nextC.p=p—>next—>nextD.p—>next=p5.向⼀个栈顶指针为hs的链栈中插⼊⼀个*s结点时,应执⾏的操作为()A.hs—>next=s;B.s—>next=hs;hs=s;C.s—>next=hs—>next;hs—>next=s;D.s—>next=hs;hs=hs—>next;6.设循环队列的元素存放在⼀维数组Q[0‥30]中,队列⾮空时,front指⽰队头元素的前⼀个位置,rear指⽰队尾元素。

如果队列中元素的个数为11,front的值为25,则rear应指向的元素是()A.Q[4]D.Q[15]7.定义⼆维数组A[1‥8,0‥10],起始地址为LOC,每个元素占2L个存储单元,在以⾏序为主序的存储⽅式下,某数据元素的地址为LOC+50L,则在以列序为主序的存储⽅式下,该元素的存储地址为()A.LOC+28LB.LOC+36LC.LOC+50LD.LOC+52L8.具有n个结点的⼆叉树,拥有指向孩⼦结点的分⽀数⽬是()A.n-1B.nC.n+1D.2n9.对⼀棵有100个结点的完全⼆叉树按层序编号,则编号为49的结点,它的左孩⼦的编号为()A.99B.98C.97D.5010.有m个叶⼦结点的哈夫曼树,其结点总数是()A.2m-1B.2mC.2m+1D.2(m+1)11.有n个结点的⽆向图的边数最多为()A.n+1B.n(n-1)/2C.n(n+1)D.2n(n+1)12.设图的邻接矩阵为,则该图为()A.有向图B.⽆向图C.强连通图D.完全图13.⼆分查找算法的时间复杂度是()B.O(nlog2n)C.O(n)14.已知8个元素(34,76,45,18,26,54,92,65),按照依次插⼊结点的⽅法⽣成⼀棵⼆叉排序树,则该树的深度为()A.4B.5C.6D.715.采⽤排序算法对n个元素进⾏排序,其排序趟数肯定为n-1趟的排序⽅法是()A.插⼊和快速B.冒泡和快速C.选择和插⼊D.选择和冒泡16.从逻辑上可以把数据结构分为()A.动态结构、静态结构B.顺序结构、链式结构C.线性结构、⾮线性结构D.初等结构、构造型结构17.关于算法的描述,不正确的是()A.算法最终必须由计算机程序实现B.所谓时间复杂度是指最坏情况下,估算算法执⾏时间的⼀个上界C.健壮的算法不会因⾮法的输⼊数据⽽出现莫名其妙的状态D.算法的优劣与算法描述语⾔⽆关18.在单链表中,存储每个结点需要有两个域,⼀个是数据域,另⼀个是指针域,指针域指向该结点的()A.直接前趋B.直接后继C.开始结点D.终端结点19.将两个各有n个元素的有序表合并成⼀个有序表,其最少的⽐较次数为()A.nB.2n-1C.2nD.n220.栈和队列共同具有的特点是()A.都是先进后出B.都是先进先出C.只允许在端点进⾏操作运算D.既能先进先出,也能先进后出21.若⽤⼀个有6个单元的数组来实现循环队列,rear和front的初值分别为0和3。

数据结构期中测试题答案

数据结构期中测试题答案
《数据结构》期中测试
班级:
姓名:
学号:
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力通根1保据过护生管高产线中工敷资艺设料高技试中术卷0资配不料置仅试技可卷术以要是解求指决,机吊对组顶电在层气进配设行置备继不进电规行保范空护高载高中与中资带资料负料试荷试卷下卷问高总题中2体2资配,料置而试时且卷,可调需保控要障试在各验最类;大管对限路设度习备内题进来到行确位调保。整机在使组管其高路在中敷正资设常料过工试程况1卷下中安与,全过要,度加并工强且作看尽下护可1都能关可地于以缩管正小路常故高工障中作高资;中料对资试于料卷继试连电卷接保破管护坏口进范处行围理整,高核或中对者资定对料值某试,些卷审异弯核常扁与高度校中固对资定图料盒纸试位,卷置编.工写保况复护进杂层行设防自备腐动与跨处装接理置地,高线尤中弯其资曲要料半避试径免卷标错调高误试等高方,中案要资,求料编技试5写术卷、重交保电要底护气设。装设备管置备4高线动调、中敷作试电资设,高气料技并中课3试术且资件、卷中拒料中管试包绝试调路验含动卷试敷方线作技设案槽,术技以、来术及管避系架免统等不启多必动项要方高案式中;,资对为料整解试套决卷启高突动中然过语停程文机中电。高气因中课此资件,料中电试管力卷壁高电薄中气、资设接料备口试进不卷行严保调等护试问装工题置作,调并合试且理技进利术行用,过管要关线求运敷电行设力高技保中术护资。装料线置试缆做卷敷到技设准术原确指则灵导:活。在。对分对于线于调盒差试处动过,保程当护中不装高同置中电高资压中料回资试路料卷交试技叉卷术时调问,试题应技,采术作用是为金指调属发试隔电人板机员进一,行变需隔压要开器在处组事理在前;发掌同生握一内图线部纸槽故资内障料,时、强,设电需备回要制路进造须行厂同外家时部出切电具断源高习高中题中资电资料源料试,试卷线卷试缆切验敷除报设从告完而与毕采相,用关要高技进中术行资资检料料查试,和卷并检主且测要了处保解理护现。装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

数据结构期中考试试题及答案

数据结构期中考试试题及答案

2014-2015学年第二学期《数据结构与算法》期中考试学号:姓名:一、写语句1.设单链表结点指针域为next,试写出删除链表中指针p所指结点的直接后继的C语言语句。

2.设单链表中某指针p所指结点(即p结点)的数据域为data,链指针域为next,请写出在p结点之前插入s结点的操作3. 设双向循环链表中结点的数据域、前驱和后继指针域分别为data,pre和next,试写出在指针p 所指结点之前插入s结点的C语言描述语句。

4. 一线性表存储在带头结点的双向循环链表中,L为头指针。

如下算法:(1)说明该算法的功能。

(2)在空缺处填写相应的语句。

void unknown (BNODETP *L){ …p=L->next; q=p->next; r=q->next;while (q!=L){ while (p!=L) && (p->data>q->data) p=p->prior;q->prior->next=r;(1) ______;q->next=p->next;q->prior=p;(2) ______;(3) ______;q=r;p=q->prior;(4) ______;} }二、写算法1.设有一个正整数序列组成的有序单链表(按递增次序有序,且允许有相等的整数存在),试编写能实现下列功能的算法:(要求用最少的时间和最小的空间)(1)确定在序列中比正整数x大的数有几个(相同的数只计算一次,如序列{20,20,17,16,15,15,11,10,8,7,7,5,4}中比10大的数有5个);(2) 在单链表将比正整数x小的数按递减次序排列;(3) 将正整数(比)x大的偶数从单链表中删除。

2. 设键盘输入n个英语单词,输入格式为n, w1, w2, …,wn,其中n表示随后输入英语单词个数,试编一程序,建立一个单向链表,实现:(1)如果单词重复出现,则只在链表上保留一个。

清华大学数据结构试题及答案

清华大学数据结构试题及答案

清华大学数据结构试题及答案以下是清华大学数据结构试题及答案:试题一:1. 请解释什么是数据结构。

答案:数据结构是计算机科学中研究数据的组织、存储和管理方式的学科。

它涉及到数据的表示、操作以及与之相关的算法的设计和实现。

2. 请列举常见的数据结构类型。

答案:常见的数据结构类型包括数组、链表、栈、队列、树、图等。

3. 请解释什么是算法。

答案:算法是一系列解决特定问题的指令和计算步骤。

它描述了在给定输入的情况下,如何进行计算并产生所需输出。

4. 请列举一些常见的算法。

答案:常见的算法包括排序算法(如冒泡排序、插入排序、快速排序)、查找算法(如二分查找、哈希查找)、图算法(如深度优先搜索、广度优先搜索)等。

5. 请解释什么是时间复杂度和空间复杂度。

答案:时间复杂度是描述算法执行时间与输入规模之间的关系。

空间复杂度是描述算法所需内存空间与输入规模之间的关系。

试题二:1. 请给出数组和链表的区别。

答案:数组是一块连续的内存空间,元素在内存中按照索引顺序排列。

链表是由节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。

2. 请解释什么是栈和队列。

答案:栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。

队列是一种先进先出(FIFO)的数据结构,允许在队尾插入数据,在队头删除数据。

3. 请给出树和图的区别。

答案:树是一种由节点和边组成的数据结构,每个节点可以有多个子节点。

图是一种由节点和边组成的数据结构,节点之间的关系可以是任意的,包括有向和无向边。

4. 请解释什么是哈希表。

答案:哈希表是一种通过哈希函数将键映射到特定位置的数据结构。

它能够快速地进行插入、删除和查找操作。

5. 请解释什么是递归。

答案:递归是一种通过调用自身的方法或函数来解决问题的编程技巧。

在递归过程中,问题会被拆分成一个或多个规模较小的子问题,直到达到基本情况。

以上就是清华大学数据结构试题及答案,希望对您有所帮助。

清华大学数据结构试题及答案-格式整理版

清华大学数据结构试题及答案-格式整理版

一、单选题(每题 2 分,共20分)1.对一个算法的评价,不包括如下()方面的内容。

A.健壮性和可读性 B.并行性 C.正确性 D.时空复杂度2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( )。

A. p->next=HL->next; HL->next=p;B. p->next=HL; HL=p;C. p->next=HL; p=HL;D. HL=p; p->next=HL;3对线性表,在下列哪种情况下应当采用链表表示?( )A.经常需要随机地存取元素B.经常需要进行插入和删除操作C.表中元素需要占据一片连续的存储空间D.表中元素的个数不变4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是( )A. 2 3 1B. 3 2 1C. 3 1 2D. 1 2 35. AOV网是一种()。

A.有向图 B.无向图 C.无向无环图 D.有向无环图6采用开放定址法处理散列表的冲突时,其平均查找长度()。

A.低于链接法处理冲突 B. 高于链接法处理冲突C.与链接法处理冲突相同 D.高于二分查找7.若需要利用形参直接访问实参时,应将形参变量说明为()参数。

A.值 B.函数 C.指针 D.引用8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的()。

A.行号 B.列号 C.元素值 D.非零元素个数9.快速排序在最坏情况下的时间复杂度为()。

A.O(log2n) B.O(nlog2n) C.0(n) D.0(n2)10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( )。

A. O(n)B. O(1)C. O(log2n)D. O(n2)二、运算题(每题6 分,共24分)1.数据结构是指数据及其相互之间的______________。

当结点之间存在M对N(M:N)的联系时,称这种结构为_____________________。

数据结构期中测试题答案

数据结构期中测试题答案

《数据结构》期中测试班级:姓名:学号:一、填空题:1、在数据结构中,从逻辑上可以把数据结构分为集合、线性结构、树形结构和图状结构,其中树形结构和图状结构合称为非线性结构。

数据结构被形式地定义为二元组(D,S),其中D是数据元素的有限集合,S是D上关系的有限集合。

2、算法的五个重要特性是有穷性、确定性、可行性、输入和输出。

3、一个顺序表第一个元素的存储地址是100,每个元素的长度为3,则第6个元素的地址是115。

在顺序表中插入或删除一个元素,需要平均移动(n+1)/2个元素,具体移动的元素个数与插入或删除元素的位置有关。

顺序表中逻辑上相邻的元素的物理位置相邻。

单链表中逻辑上相邻的元素的物理位置不一定相邻。

单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的指针域指示。

在单链表中设置头结点的作用是使第一个结点与其他结点的操作统一。

4、从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较(n+1)/2个结点。

在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是O(n)。

给定有n个元素的线性表,建立一个有序单链表的时间复杂度是O(n2)。

5、已知L是无表头结点的非空单链表,且指针p所指结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。

在p所指结点后插入s所指结点:4、1。

在p所指结点前插入s所指结点:7、11、8、4、1。

在表首插入s所指结点:5、12。

在表尾插入s所指结点:11、9、1、6。

1)p->next=s;2)p->next=p->next->next;3)p->next=s->next;4)s->next=p->next;5)s->next=L;6)s->next=NULL;7)q=p;8)while(p->next!=q) p=p->next;9)while(p->next!=NULL) p=p->next;10)p=q;11)p=L;12)L=s;13)L=p;6、已知指针p所指结点是某双向链表的中间结点,试从下列提供的答案中选择合适的语句序列。

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

2010年《数据结构》期终考试试卷(A)班级学号姓名一、简答题(每小题6分,共30分)(1) 假设一个线性链表的类名为linkedList,链表结点的类名为ListNode,它包含两个数据成员data和link。

data存储该结点的数据,link是链接指针。

下面给定一段递归打印一个链表中所有结点中数据的算法:void PrintList (ListNode *L) {if ( L != NULL ) {cout << L->data << endl;PrintList ( L->link );}}试问此程序在什么情况下不实用?给出具体修改后的可实用的程序?(1) 此程序在内存容量不足时不适用。

因为需要一个递归工作栈。

当链表越长,递归工作栈的深度越深,需要的存储越多。

可采用非递归算法节省存储。

void PrintList (ListNode *L) {while ( L != NULL ) {cout << L->data << endl;L = L->link;}}(2) 如果每个结点占用2个磁盘块因而需要2次磁盘访问才能实现读写,那么在一棵有n个关键码的2m阶B树中,每次搜索需要的最大磁盘访问次数是多少?(2) 在2m阶B树中关键码个数n与B树高度h之间的关系为h≤log m ((n+1)/2)+1,那么每次搜索最大磁盘访问次数为2h max = 2log m ((n+1)/2)+2。

(3) 给定一棵保存有n 个关键码的m 阶B 树。

从某一非叶结点中删除一个关键码需要的最大磁盘访问次数是多少?(3) 在m 阶B 树中关键码个数n 与B 树最大高度h 的关系为h = log ⎡m/2⎤((n+1)/2)+1。

若设寻找被删关键码所在非叶结点读盘次数为h ’,被删关键码是结点中的k i ,则从该结点的p i 出发沿最左链到叶结点的读盘次数为h -h ’。

当把问题转化为删除叶结点的k 0时,可能会引起结点的调整或合并。

极端情况是从叶结点到根结点的路径上所有结点都要调整,除根结点外每一层读入1个兄弟结点,写出2个结点,根结点写出1个结点,假设内存有足够空间,搜索时读入的盘块仍然保存在内存,则结点调整时共读写盘3(h -1)+1。

总共的磁盘访问次数为h ’+(h -h ’)+3(h -1)+1 = 4h -2 = 4(log ⎡m/2⎤((n+1)/2)+1)-2 = = 4log ⎡m/2⎤((n+1)/2)+2(4) 给定一个有n 个数据元素的序列,各元素的值随机分布。

若要将该序列的数据调整成为一个堆,那么需要执行的数据比较次数最多是多少?(4) 设堆的高度为h = ⎡log 2(n+1)⎤,当每次调用siftDown 算法时都要从子树的根结点调整到叶结点,假设某子树的根在第i 层(1≤i ≤h -1),第h 层的叶结点不参加比较。

从子树根结点到叶结点需要比较h -i 层,每层需要2次比较:横向在两个子女里选一个,再纵向做父子结点的比较。

因此,在堆中总的比较次数为)i h j ( 2j22j 222j 22)i h (221h 1j j1-h 1h 1j j -1h 1h 1j 1-j -h 1h 1i 1-i -=⋅⋅=⋅⋅=⋅=-∑∑∑∑-=-=--=-=代换 因为 2h-1≤n ≤2h-1,且∑-=∞→=1h 1j j h 22j lim ,则n 42n 22j 221h 1j j 1h =⋅⋅≤⋅⋅∑-=-(5) 设有两个分别有n个数据元素的有序表,现要对它们进行两路归并,生成一个有2n个数据元素的有序表。

试问最大数据比较次数是多少?最少数据比较次数是多少?(5) 两个长度为n的有序表,当其中一个有序表的数据全部都小于另一个有序表的数据时,关键码的比较次数达到最小(= n)。

而当两个有序表的数据交错排列时,关键码的比较次数达到最大(= 2n-1)。

二、简作题(每小题5分,共15分)针对如下的带权无向图其中,每条边上所注的e i为该边的编号,冒号后面是该边所对应的权值。

(1) 使用Prim算法,从顶点A出发求出上图的最小生成树。

要求给出生成树构造过程中依次选择出来的边的序列(用边的编号表示),权值相等时编号小的边优先。

(不必画图)(2) 使用Kruskal算法求出上图的最小生成树。

要求给出生成树构造过程中依次选择出来的边的序列(用边的编号表示),权值相等时编号小的边优先。

(不必画图)(3) 上面求出的最小生成树是唯一的吗?试举理由说明。

(1) 使用Prim 算法(2) 使用Kruskal算法(3) 这样选取的最小生成树是唯一的。

因为在边上的权值相等时先选编号小的,限定了选择的机会。

假如不限定在具有相等权值的边中的选择次序,结果可能就可能不唯一了。

三、简作题(共10分)假设一个散列表中已装入100个表项并采用线性探查法解决冲突,要求搜索到表中已有表项时的平均搜索次数不超过4,插入表中没有的表项时找到插入位置的平均探查次数不超过50.5。

请根据上述要求确定散列表的容量,并用除留余数法设计相应的散列函数。

()⎪⎪⎭⎫ ⎝⎛-+≈⎪⎭⎫ ⎝⎛-+≈21112111121ααn n U S三、简作题(共10分)()5.5011121 ,4111212≤⎪⎪⎭⎫⎝⎛-+≈≤⎪⎭⎫ ⎝⎛-+≈ααn n U S 由前一式得到76≤α,由后一式得到109≤α,综合得76≤α因n = 100,有76100≤=αm ,67.1166700=≥m ,可取m = 117。

用除留余数法设计散列函数: Hash(key) = key % 113 (注:117不是质数,117 = 9 * 13)四、算法设计题(每小题5分,共15分)设中序线索化二叉树的类声明如下:template <class Type> struct ThreadNode {//中序线索化二叉树的结点类 int leftThread, rightThread ;//线索标志 ThreadNode <Type> *leftChild, *rightChild ; //线索或子女指针 Type data ;//结点中所包含的数据};template <class Type> class inOrderThreadTree {//中序线索化二叉树类public:ThreadNode <Type> * getRoot ( ) { return root ; }//其他公共成员函数……private:ThreadNode<Type> *root; //树的根指针};试依据上述类声明,分别编写下面的函数。

(1) ThreadNode<Type> * getPreorderFirst (ThreadNode<Type> *p);//寻找以p为根指针的中序线索化二叉树在前序下的第一个结点。

(2) ThreadNode<Type> * getPreorderNext (ThreadNode<Type> *p)//寻找结点*p的在中序线索化二叉树中前序下的后继结点。

(3)void preorder (inOrderThreadTree<Type>& T);//应用以上两个操作,在中序线索化二叉树上做前序遍历。

四、算法设计题(每小题5分,共15分)(1) tamplate <class Type>ThreadNode<Type> * getPreorderFirst (ThreadNode<Type> *p) {return p;}(2) template <class Type>ThreadNode<Type> * getPreorderNext (ThreadNode<Type> *p) {if ( p->leftThread == 0 ) return p->leftChild;if (p->rightThread == 0 ) return p->rightChild;while ( p->rightThread != 0 && p->rightChild != NULL )p = p->rightChild;return p->rightChild;}(3)template <class Type>void preorder ( inOrderThreadTree<Type>& T ) {ThreadNode<Type> *p = getRoot();p = getPreorderFirst ( p );while ( p != NULL ) {cout << p->data << endl;p =getPreorderNext ( p );}}五、算法分析题(每小题5分,共15分)下面给出一个排序算法,其中n是数组A[ ]中元素总数。

template<class Type>void unknown (Type a[ ], int n) {int d = 1, j;while ( d < n /3 ) d = 3*d+1;while ( d > 0 ) {for ( int i = d; i < n; i++ ) {Type temp = a[i];j = i;while ( j >= d && a[j-d] > temp ) { a[j] = a[j-d]; j -= d; }a[j] = temp;}d /= 3;}}(1) 阅读此算法,说明它的功能。

(2) 对于下面给出的整数数组,追踪第一趟while ( d > 0 ) 内的每次for循环结束时数组中数据的变化。

(为清楚起见,本次循环未涉及的不移动的数据可以不写出,每行仅写出一个for循环的变化)。

相关文档
最新文档