1、北京语言大学网络教育学院数据结构模拟试卷一注意: 1.试卷保密,考生不得将试卷带出考场或撕页,否则成绩作废。请监考老师负责监督。2.请各位考生注意考试纪律,考试作弊全部成绩以零分计算。3.本试卷满分 100 分,答题时间为 90 分钟。4.本试卷分为试题卷和答题卷,所有答案必须答在答题卷上,答在试题卷上不给分。一、 【单项选择题】(本大题共 10 小题,每小题 2 分,共 20 分) 在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在答题卷相应题号处。1、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则采用( )存储方式最节省时间。A 顺
2、序表 B 双链表C 带头结点的双循环链表 D 单循环链表2、队列操作的原则是( ) 。A 只能进行删除 B 后进先出C 只能进行插入 D 先进先出3、某二叉树的先序序列和后序序列正好相反,则该二叉树一定是( )的二叉树。A 空或只有一个结点 B 高度等于其结点数C 任一结点无左孩子 D 任一结点无右孩子4、在下列排序方法中, ( )方法平均时间复杂度为 0(nlogn),最坏情况下时间复杂度为 0(n2)。A 插入排序 B 希尔排序 C 快速排序 D 堆排序 5、对二叉树从 1 开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一个结点的左、右孩子中,其左孩子编号小于右孩子编号。则
3、可采用( )次序的遍历实现编号。A 先序 B 中序C 后序 D 从根开始的层次遍历6、若线性表中采用二分查找法查找元素,该线性表应该( ) 。A 元素按值有序B 采用顺序存储结构C 元素按值有序,且采用顺序存储结构D 元素按值有序,且采用链式存储结构7、对待排序数据的初始状态不作任何要求的排序方法有( ) 。A 插入和快速排序 B 插入和归并排序C 归并和快速排序 D 归并和选择排序8、已知数据表 A 中每个元素距其最终位置不远,则采用( )排序算法最节省时间。A 堆排序 B 插入排序 C 快速排序 D 选择排序9、以下哪一个不是队列的基本运算?( )A 从队尾插入一个新元素 B 从队列中删除
4、第 i 个元素C 判断一个队列是否为空 D 读取队头元素的值10、广度优先遍历类似于二叉树的( ) 。A 先序遍历 B 中序遍历 C 后序遍历 D 层次遍历二、 【判断题】(本大题共 10 小题,每小题 2 分,共 20 分) 正确的填 T,错误的填 F,填在答题卷相应题号处。11、线性表的逻辑顺序与物理顺序总是一致的。 ( )12、在链式存储的栈的头部必须要设头结点。 ( )13、在二叉树中插入结点,则该项二叉树便不再是二叉树。 ( )14、由二叉树结点的先序序列和后序序列可以唯一确定一棵二叉树。 ( )15、栈和队列也是线性表。如果需要,可对它们中的任一元素进行操作。 ( )16、有向图的
5、邻接矩阵一定不是对称的。 ( )17、在 AOE 网中,关键路径是唯一的。 ( )18、若将一株树转换成二叉树,则该二叉树的根结点一定没有右子树。 ( )19、索引顺序存取方法 ISAM 是一种专门为磁盘存取设计的索引顺序文件的组织方法。 ( )20、基数分类只适用于以数字为关键字的情形,不适用以字符串为关键字的情形。 ( )三、 【填空题】 (本大题共 10 小空,每小空 2 分,共 20 分)请将答案填写在答题卷相应题号处。21、n 个顶点 e 条边的图,若采用邻接矩阵存储,则空间复杂度为( ) 。22、将两个各有 n 个元素的有序表归并成一个有序表,其最少的比较次数是( ) 。23、设二
6、叉树中结点的两个指针域分别为 lchild 和 rchild,则判断指针变量 p 所指向的结点为叶子结点的条件是( ) 。24、设一棵二叉树的前序序列为 ABC,则有( )种不同的二叉树可以得到这种序列。25、为了给 n 个字母编码而建立起来的 Huffman 树一共有( )个结点。26、n 个顶点的连通图用相邻矩阵表示时,该矩阵至少有( )个非零元素。27、对于一个具有 n 个顶点和 e 条边的无向图,在其对应的邻接表中,所含边结点有( )个。28、冒泡排序在最好情况下的元素交换次数为( ) 。29、由权值分别为 11,8,6,2,5 的叶子结点生成一棵哈夫曼树,它的外部路径权重为( ) 。
7、30、栈是一种受限制的线性表,也叫 LIFO 结构,LIFO 的含义是( ) 。四、 【应用题】 (本大题共 5 小题,每小题 8 分,共 40 分)请将答案填写在答题卷相应题号处。31、已知序列(12,4,17,10,7,30) ,用直接选择排序法对其进行递增排序,写出每一趟的排序结果。32、单链表结点的类型定义如下:typedef struct LNode int data;struct LNode *next; LNode, *Linklist;写一算法,将带头结点的有序单链表 A 和 B 合并成一新的有序表 C。(注:不破坏 A 和 B 的原有结构)33、已知一棵非空二叉树,其按中序和
8、后序遍历的结果分别为:中序:CGBAHEDJFI 后序:GBCHEJIFDA请画出这棵二叉树,并写出其前序遍历的结果。34、已知字符:C1,C2,C3,C4 ,C5,C6 的权分别为:17,5,16,4,8,11,请构造相应的赫夫曼树,并给出相应字符的赫夫曼编码。35、已知如下图所示二叉树,分别写出其前序、中序和后序序列。A B CD E F数据结构模拟试卷一 答案一、 【单项选择题】(本大题共 10 小题,每小题 2 分,共 20 分)题号 1 2 3 4 5 6 7 8 9 10答案 C D B C C C A B B D二、 【判断题】(本大题共 10 小题,每小题 2 分,共 20 分
9、)题号 11 12 13 14 15 16 17 18 19 20答案 F F F F F F F T T F三、 【填空题】 (本大题共 10 小空,每小空 2 分,共 20 分)21、 ( O(n2) ); 22、 ( n );23、 ( p-lchild = NULL 求表的长度;int getData(int k); 提取第 k 个元素的值。#include “SeqList.h”template void FindMaxMin(SeqList数据结构模拟试卷三 答案一、 【单项选择题】(本大题共 10 小题,每小题 2 分,共 20 分)题号 1 2 3 4 5 6 7 8 9 10
10、答案 A D B A A C C B C C二、 【判断题】(本大题共 10 小题,每小题 2 分,共 20 分)题号 11 12 13 14 15 16 17 18 19 20答案 T T F F F F F F F F三、 【填空题】 (本大题共 10 小空,每小空 2 分,共 20 分)21、 ( 有向 );22、 ( 63 );23、 ( 不是 );24、 ( 5 );( 31 );25、 ( p-next=s );26、 ( (i-1)*k + m + 1 );27、 ( 10,15,12 );28、 ( 邻接矩阵 ); ( 邻接表 );四、 【应用题】 (本大题共 5 小题,每小题
11、 8 分,共 40 分)29、考核根据二叉树先序、中序遍历的结果,构造二叉树。参考教材“第 6 章 树和二叉树”。30、考核冒泡排序,参考教材“第 10 章 内部排序” 。31、考核图及拓扑序列。参考教材“第 7 章 图” 。32、考核数组元素的比较和删除。参考教材“第 5 章 数组和广义表” 。33、考核顺序表中查找最大值和最小值。参考教材“第 9 章 查找” 。北京语言大学网络教育学院数据结构模拟试卷四注意: 1.试卷保密,考生不得将试卷带出考场或撕页,否则成绩作废。请监考老师负责监督。2.请各位考生注意考试纪律,考试作弊全部成绩以零分计算。3.本试卷满分 100 分,答题时间为 90 分
12、钟。4.本试卷分为试题卷和答题卷,所有答案必须答在答题卷上,答在试题卷上不给分。一、 【单项选择题】(本大题共 10 小题,每小题 2 分,共 20 分) 在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在答题卷相应题号处。1算法分析的目的是( ) 。A 找出数据结构的合理性 B 研究算法中的输入/输出关系C 分析算法的效率以求改进 D 分析算法的易读性2散列文件使用散列函数将记录的关键字值计算转化为记录的存放地址。因为散列函数不是一对一的关系,所以选择好的( )方法是散列文件的关键。 A 散列函数 B 除余法中的质数C 冲突处理 D 散列函数和冲突处理3在需要经常
13、查找结点的前驱与后继的场合中,使用( )比较合适。 A 单链表 B 双链表 C 顺序表 D 循环链表4下面关于线性表的叙述中,错误的为( ) 。A 顺序表是使用一维数组实现的线性表 B 顺序表必须占用一片连续的存储单元C 顺序表的空间利用率高于链表D 在链表中,每个结点只有一个链域5一棵树的广义表表示为 a(b,c(e,f(g),d),当用左子女-右兄弟链表表示时,右指针域非空的结点个数为( ) 。A 1 B 2 C 3 D 46若需要利用形参直接访问实参,则应把形参变量说明为( )参数。 A 指针 B 引用 C 传值 D 常值7已知单链表 A 长度为 m,单链表 B 长度为 n,若将 B 联
14、接在 A 的末尾,其时间复杂度应为( ) 。A O(1) B O(m) C O(n) D O(m+n)8在一棵高度为 h(假定树根结点的层号为 0)的完全二叉树中,所含结点个数不小于( ) 。A 2h-1 B 2h+1 C 2h-1 D 2h9假定一个链式队列的队头和队尾指针分别为 front 和 rear,则判断队空的条件为( ) 。A front = rear B front != NULLC rear != NULL D front = NULL10在一棵树中, ( )没有前驱结点。 A 分支结点 B 叶结点 C 树根结点 D 空结点二、 【判断题】(本大题共 10 小题,每小题 2 分
15、,共 20 分) 正确的填 T,错误的填 F,填在答题卷相应题号处。11. 线性表中的每个结点最多只有一个前驱和一个后继。 ( )12. 每种数据结构都应具备三种基本运算:插入、删除和搜索。 ( )13.在单链表 P 指针所指结点之后插入 S 结点的操作是:P-next= S ; S- next = P-next。 ( )14.假设 B 是一棵树,B是对应的二叉树。则 B 的后根遍历相当于 B的中序遍历。 ( )15.对于任何待排序序列来说,快速排序均快于起泡排序。 ( )16.直接选择排序是一种不稳定的排序方法。 ( )17.顺序表用一维数组作为存储结构,因此顺序表是一维数组。 ( )18.
16、栈和队列都是顺序存取的的线性表,但它们对存取位置的限制不同。 ( )19.闭散列法通常比开散列法时间效率更高。 ( )20.一棵 m 阶 B 树中每个结点最多有 m 个关键码,最少有 2 个关键码。 ( )三、 【填空题】 (本大题共 10 小空,每小空 2 分,共 20 分)请将答案填写在答题卷相应题号处。21.数据结构算法中,通常用时间复杂度和( )两种方法衡量其效率。22.若频繁地对线性表进行插入与删除操作,该线性表应采用( )存储结构。23. ( )链表从任何一个结点出发,都能访问到所有结点。24.某带头结点的单链表的头指针 head,判定该单链表非空的条件( ) 。25.已知指针 p
17、 指向单链表中某个结点,则语句 p-next=p-next-next 的作用是( ) 。26.在栈的顺序实现中,栈顶指针 top,栈为空条件( ) 。27.在长度为 n 的循环队列中,删除其节点为 x 的时间复杂度为( ) 。28.有三个结点的二叉树,最多有( )种形状。29.深度为 90 的满二叉树,第 11 层有( )个结点。30.设有 10 个值,构成哈夫曼树,则该哈夫曼树共有( )个结点。四、 【应用题】 (本大题共 5 小题,每小题 8 分,共 40 分)请将答案填写在答题卷相应题号处。31根据下面的字母/频率表构造一棵 Huffman 树, 并给出各字母的 Huffman 编码。A
18、 B C D E F G H25 10 36 4 5 6 11 3 32已知哈希表地址空间为 010,哈希函数为 H(k)=k%11,采用线性探查法处理冲突。将关键字8,12,18,25,40 ,16,7,17,100 依次存入该散列表中,给出最后的结果散列表,并求出在等概率下的平均查找长度。搜索成功的平均搜索长度 ASLsucc 是指搜索到表中已有表项的平均探查次数,它是找到表中各个已有表项的探查次数的平均值。33对下列数据表,写出采用 Shell 排序的每一趟的结果,增量序列为 7,3,1。9, 8, 7, 6, 5, 4, 3, 2, 134设有一个关键码的输入序列 55, 88, 10
19、0, 120, 90, 150, 40, 20,95,从空树开始构造平衡二叉搜索树,画出每加入一个新结点时二叉树的形态。若发生不平衡,指明需做的平衡旋转的类型及平衡旋转的结果。35编写实现“直接插入排序”的子函数,入口参数是整型数组 L 和数组长度 n.数据结构模拟试卷四 答案一、 【单项选择题】(本大题共 10 小题,每小题 2 分,共 20 分)题号 1 2 3 4 5 6 7 8 9 10答案 C D B D C B C D D C二、 【判断题】(本大题共 10 小题,每小题 2 分,共 20 分)题号 11 12 13 14 15 16 17 18 19 20答案 F F F T F
20、 T F T F F三、 【填空题】 (本大题共 10 小空,每小空 2 分,共 20 分)21、 ( 空间复杂度 );22、 ( 链表 );23、 ( 循环 );24、 ( head-next!=Null );25、 ( 删除 p 的后继结点 );26、 ( top=-1 );27、 ( O(n) );28、 ( 5 );29、 ( 1024 );30、 ( 19 );四、 【应用题】 (本大题共 5 小题,每小题 8 分,共 40 分)31 考核“Huffman 树和 Huffman 编码” ,参考教材“第 6 章 树和二叉树” 。32 考核“哈希表” ,参考教材“第 9 章 查找” 。3
21、3 考核“Shell 排序” ,参考教材“第 10 章 内部排序” 。34 考核“构造平衡二叉搜索树” ,参考教材“第 9 章 查找” 。35 考核“直接插入排序” ,参考教材“第 10 章 内部排序” 。北京语言大学网络教育学院数据结构模拟试卷五注意: 1.试卷保密,考生不得将试卷带出考场或撕页,否则成绩作废。请监考老师负责监督。2.请各位考生注意考试纪律,考试作弊全部成绩以零分计算。3.本试卷满分 100 分,答题时间为 90 分钟。4.本试卷分为试题卷和答题卷,所有答案必须答在答题卷上,答在试题卷上不给分。一、 【单项选择题】(本大题共 10 小题,每小题 2 分,共 20 分) 在每小
22、题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在答题卷相应题号处。1程序段:sum=0; for (i=1;inext=p-next;p-next=s );23、 ( 有序表 );24、 ( 栈顶 );25、 ( 1130 );26、 ( 69 );27、 ( 31 );28、 ( 路径 );29、 ( 路径 );30、 ( 无向图 );四、 【应用题】 (本大题共 5 小题,每小题 8 分,共 40 分)31 考核“顺序表和链表存储方式的区别” ,参考教材“第 2 章 线性表” 。32 考核“链表操作” ,参考教材“第 2 章 线性表” 。33 考核“最小生成树” ,
23、参考教材“第 7 章 图” 。34 考核“二叉树的存储” ,参考教材“第 6 章 树和二叉树” 。35 考核“起泡排序” ,参考教材“第 10 章 内部排序” 。数据结构第一阶段导学资料一、本阶段学习内容概述本课程第一阶段学习的主要内容是第一章“绪论”和第二章“线性表” 。第一章主要是为以后各章讨论的内容作基本知识的准备,介绍数据结构和算法等基本概念;第二章主要介绍了线性表的抽象数据类型的定义以及它的两种存储结构的实现。1、 第一章“绪论”数据是计算机操作对象的总称,它是计算机处理的符号的集合,集合中的个体为一个数据元素。数据元素可以是不可分割的原子,也可以由若干数据项合成,因此在数据结构中讨
24、论的基本单位是数据元素,而最小单位是数据项。数据结构是由若干特性相同的数据元素构成的集合,且在集合上存在一种或多种关系。由关系不同可将数据结构分为四类:线性结构、树形结构、图状结构和集合结构。数据的存储结构是数据逻辑结构在计算机中的映象,由关系的两种映象方法可得到两类存储结构:一类是顺序存储结构,它以数据元素相对的存储位置表示关系,则存储结构中只包含数据元素本身的信息;另一类是链式存储结构,它以附加的指针信息(后继元素的存储地址)表示关系。数据结构的操作是和数据结构本身密不可分的,两者作为一个整体可用抽象数据类型进行描述。抽象数据类型是一个数学模型以及定义在该模型上的一组操作,因此它和高级程序
25、设计语言中的数据类型具有相同含义,而抽象数据类型的范畴更广,它不局限于现有程序设计语言中已经实现的数据类型(它们通常被称为固有数据类型) ,但抽象数据类型需要借用固有数据类型表示并实现。抽象数据类型的三大要素为数据对象、数据关系和基本操作,同时数据抽象和数据封装是抽象数据类型的两个重要特性。算法是进行程序设计的另一不可缺少的要素。算法是对问题求解的一种描述,是为解决一个或一类问题给出的一种确定规则的描述。一个完整的算法应该具有下列五个要素:有穷性、确定性、可行性、有输入和有输出。一个正确的算法应对苛刻且带有刁难性的输入数据也能得出正确的结果,并且对不正确的输入也能做出正确的反映。算法的时间复杂
26、度是比较不同算法效率的一种准则,算法时间复杂度的估算基于算法中基本操作的重复执行次数,或处于最深层循环内的语句的频度。算法空间复杂度可作为算法所需存储量的一种量度,它主要取决于算法的输入量和辅助变量所占空间,若算法的输入仅取决于问题本身而和算法无关,则算法空间复杂度的估算只需考察算法中所用辅助变量所占空间,若算法的空间复杂度为常量级,则称该算法为原地工作的算法。2、 第二章“线性表”线性表是 n(n0) 个数据元素的序列,通常写成( , , , )因此线性表中除了第一个和最后一个元素之外都只有一个前驱和一个后继。线性表中每个元素都有自己确定的位置,即“位序“,因此线性表也可以看成是由 n 个
27、(i, ) 构成的集合。n=0 时的线性表称为“空表“,它是线性表的一种特殊状态,因此在写线性表的操作算法时一定要考虑你的算法对空表的情况是否也正确。顺序表是线性表的顺序存储结构的一种别称。它的特点是以“存储位置相邻“表示两个元素之间的前驱后继关系。因此,顺序表的优点是可以随机存取表中任意一个元素,其缺点是每作一次插入或删除操作时,平均来说必须移动表中一半元素。常应用于主要是为查询而很少作插入和删除操作,表长变化不大的线性表。 链表是线性表的链式存储结构的别称。它的特点是以“指针“指示后继元素,因此线性表的元素可以存储在存储器中任意一组存储单元中。它的优点是便于进行插入和删除操作,但不能进行随
28、机存取,每个元素的存储位置都存放在其前驱元素的指针域中,为取得表中任意一个数据元素都必须从第一个数据元素起查询。由于它是一种动态分配的结构,结点的存储空间可以随用随取,并在删除结点时随时释放,以便系统资源更有效地被利用。这对编制大型软件非常重要,作为一个程序员在编制程序时必须养成这种习惯。 由于线性表是一种应用很广的数据结构,链表的操作又很灵活,因此在 C+等面向对象的程序设计语言中都已为程序员提供了链表类,读者在使用时应该首先充分了解它的操作接口。在自己实现链表类时,正如课程中所述,应该为链表结构设置合适的数据成员和恰当的操作接口,以便使每个基本操作的时间复杂度在尽可能低的级别上。二、重难点
29、讲解链表是本章的重点和难点。扎实的指针操作和内存动态分配的编程技术是学好本章的基本要求,分清链表中指针 p 和结点 *p 之间的对应关系,区分链表中的头结点、头指针和首元结点的不同所指,以及循环链表、双向链表的特点等,下面重点介绍循环链表和双向链表。1、循环链表对于单链表而言,最后一个结点的指针域是空指针,如果将该链表头指针置入该指针域,则使得链表头尾结点相连,就构成了循环单链表(也称单循环链表)。如图 1 所示。图 1 带头结点的单循环链表对循环单链表的操作与单链表基本相同,只是将原来判断指针是否为 NULL 变为是否是头指针而已,其它没有较大的变化。对于单链表只能从头结点开始遍历整个链表,
30、而对于循环单链表则可以从表中任意结点开始遍历整个链表,不仅如此,对链表的操作可以在表尾、表头进行,此时可以改变一下链表的标识方法,不用头指针而用一个指向尾结点的指针 R 来标识,既可以找到尾结点,又可以找到头结点(R-next),可以使得操作效率得以提高。2、双向链表以上讨论的单链表,其结点只含有一个指向其后继结点的指针域 next,因此若已知某结点的指针为 p,其后继结点的指针则为 p-next ,若要找其前驱则只能从该链表的头指针开始,顺着各结点的 next 域进行,也就是说查找后继的时间性能是 O(1),查找前驱的时间性能是 O(n),如果要克服单链表的缺点,希望查找前驱的时间性能达到
31、O(1),则只能付出空间的代价:每个结点再加一个指向前驱的指针域,结点的结构为如图 2 所示,用这种带前驱和后继指针结点组成的链表称为双向链表。图 2 带头结点的双向循环链表双向链表结点的定义如下:typedef struct nodeDataType data;struct node *prior, *next;DuNode,*DLinkList;三、下一阶段学习建议关于这部分的知识,同学们可以仔细阅读网上课件,同时参考教材,通过研读教材进一步理解数据结构的基本概念及线性表的表示和实现。本导学材料结合教材向同学们介绍了数据结构的一些基本概念,线性表的基础知识,希望通过导学材料的引导,大家对数
32、据结构能够有初步的认识,进一步深入学习和掌握数据结构 。本阶段学习内容是数据结构课程的基础,下一个阶段是栈和队列的知识,希望大家在学习的过程中,及时复习这个阶段的学习内容,为下个阶段打好基础。四、本阶段学习内容的思考题(论坛发布)参见该课程论坛。数据结构第二阶段导学资料一、本阶段学习内容概述本课程第二阶段学习的主要内容是第三章“栈和队列” 、第四章“串”和第五章“数组”。第三章主要介绍了栈和队列的两种线性数据结构;第四章主要介绍了串的类型定义、串的存储表示、串匹配等;第五章主要介绍了数组的类型定义及其在高级语言中实现的方法等。3、 第三章“栈和队列”在这一章我们学习了栈和队列这两种抽象数据类型
33、。在学习过程中大家已经了解到,栈和队列都属线性结构,因此他们的存储结构和线性表非常类似,同时由于他们的基本操作要比线性表简单得多,因此它们在相应的存储结构中实现的算法都比较简单,相信对大家来说都不是难点。这一章的重点则在于栈和队列的应用。通过本章所举的例子学习分析应用问题的特点,在算法中适时应用栈和队列。4、 第四章“串”在这一章向读者介绍了串类型的定义及其实现方法,并重点讨论了串操作中最常用的“串定位操作(又称模式匹配)“的两个算法。串的两个显著特点是,其一、它的数据元素都是字符,因此它的存储结构和线性表有很大不同,例如多数情况下,实现串类型采用的是“堆分配“的存储结构,而当用链表存储串值时
34、,结点中数据域的类型不是“字符“,而是“串“,这种块链结构通常只在应用程序中使用;其二、串的基本操作通常以“串的整体“作为操作对象,而不像线性表是以“数据元素“作为操作对象。“串匹配“的简单算法(算法 4.6)其算法思想直截了当,简单易懂,适用于在一般的文档编辑中应用,但在某些特殊情况,例如只有 0 和 1 两种字符构成的文本串中应用时效率就很低。KMP 算法是它的一种改进方法,其特点是利用匹配过程中已经得到的主串和模式串对应字符之间“等与不等“的信息以及 T 串本身具有的特性来决定之后进行的匹配过程,从而减少了简单算法中进行的“本不必要再进行的“字符比较。5、 第五章“数组”通过这一章的学习
35、,主要是了解数组的类型定义及其在高级语言中实现的方法。数组作为一种数据类型,它的特点是一种多维的线性结构,并只进行存取或修改某个元素的值,因此它只需要采用顺序存储结构。本章还介绍了随机稀疏矩阵的三种表示方法。至于在具体应用问题中采用哪一种表示法这取决于该矩阵主要进行什么样的运算。二、重难点讲解栈和队列是本部分的重点和难点,下面对部分重点内容进行介绍。1、何为队列上溢现象?何为假溢现象?有哪些解决方法?并分别简述其工作原理。在队列的顺序存储结构中,设队头指针为 front,队尾指针为 rear,队的容量为MaxSize。当有元素要加入队列时,若 rear=MaxSize(初始时 rear=0)
36、,则发生队列的上溢现象,该元素不能加入队列。队列的假溢出现象是指队列中还有空余的空间,但元素不能进队列。造成这种现象的原因是由于队列的操作方式所致。解决队列假溢出的方法如下:(1)建立一个足够大的存储空间,但这样做会造成空间浪费。(2)采用环形队列方式。(3)采用平移元素的方法,当删除一个对头元素时,依次移动队中的元素,始终使 front指向队列中的第一个位置。2、若使用循环链表来表示队列,p 是链表中的一个指针.试基于此结构给出队列的插入(enqueue)和删除(dequeue)算法,并给出 p 为何值时队列空.链式队列的类定义template class Queue; /链式队列类的前视定
37、义template class QueueNode /链式队列结点类定义friend class Queue;private:Type data; /数据域QueueNode *link; /链域QueueNode ( Type d = 0, QueueNode *l = NULL ) : data (d), link (l) /构造函数;template class Queue /链式队列类定义public:Queue ( ) : p ( NULL ) /构造函数Queue ( ); /析构函数void EnQueue ( const Type /将 item 加入到队列中Type DeQu
38、eue ( ); /删除并返回队头元素Type GetFront ( ); /查看队头元素的值void MakeEmpty ( ); /置空队列,实现与Queue ( ) 相同int IsEmpty ( ) const return p = NULL; /判队列空否private:QueueNode *p; /队尾指针(在循环链表中);template Queue:Queue ( ) /队列的析构函数QueueNode *s;while ( p != NULL ) s = p; p = plink; delete s; /逐个删除队列中的结点/队列的插入函数template void Queu
39、e:EnQueue ( const Type plink = p;else /队列不空, 新结点链入 p 之后QueueNode *s = new QueueNode ( item, NULL );slink = plink; p = plink = s; /结点 p 指向新的队尾/队列的删除函数template Type Queue:DeQueue ( ) if ( p = NULL ) cout “队列空, 不能删除!“ endl; return 0; QueueNode *s = p; /队头结点为 p 后一个结点plink = slink; /重新链接, 将结点 s 从链中摘下Type
40、 retvalue = sdata; delete s; /保存原队头结点中的值, 释放原队头结点return retvalue; /返回数据存放地址/队空条件 p = NULL.三、下一阶段学习建议关于这部分的知识,同学们可以仔细阅读网上课件,同时参考教材,通过研读教材进一步理解基本是的数据结构中,栈和队列的基本概念、表示和实现。本导学材料结合教材向同学们介绍了栈、队列、串以及数组的基本概念、表示和实现等知识,希望通过导学材料的引导,大家对基本的数据结构有初步的认识,进一步深入学习和掌握数据结构 。本阶段学习内容是数据结构课程的基础,下一个阶段是树和二叉树、图的知识,希望大家在学习的过程中,
41、及时复习这个阶段的学习内容,为下个阶段打好基础。四、本阶段学习内容的思考题(论坛发布)参见该课程论坛。数据结构第三阶段导学资料一、本阶段学习内容概述本课程第三阶段学习的主要内容是第六章“树和二叉树”和第七章“图” 。第六章主要介绍了树和二叉树两种数据类型的定义以及它们的实现方法;第七章主要介绍了图的类型定义、图的存储表示、图的深度优先搜索遍历和图的广度优先搜索遍历、无向网的最小生成树、最短路径、拓扑排序、关键路径。6、 第六章“树和二叉树”树是以分支关系定义的层次结构,结构中的数据元素之间存在着“一对多“的关系,因此它为计算机应用中出现的具有层次关系或分支关系的数据,提供了一种自然的表示方法。
42、如用树描述人类社会的族谱和各种社会组织机构。在计算机学科和应用领域中树也得到广泛应用,例如在编译程序中,用树来表示源程序的语法结构等。二叉树是和树不同的另一种树型结构,它有明确的左子树和右子树,因此当用二叉树来描述层次关系时,其“左孩子“表示“下属关系“,而“右孩子“表示的是“同一层次的关系“。由于二叉树还是以后各章中讨论其它问题时经常用到的工具,因此二叉树的几个重要特性是我们应该熟练掌握的。树和二叉树的遍历算法是实现各种操作的基础。对非线性结构的遍历需要选择合适的搜索路径,以确保在这条路径上可以访问到结构中的所有数据元素,并使每一个数据元素只被访问一次。由于树和二叉树是层次分明的结构,因此按
43、层次进行遍历是自然的事,它必能实现既访问到所有元素,又不会重复访问。此外,对树和二叉树还可进行先左后右的遍历。遍历的实质是按某种规则将二叉树中的数据元素排列成一个线性序列,二叉树的线索链表便可看成是二叉树的一种“线性“存储结构,在线索链表上可对二叉树进行“线性化“的遍历,即不需要“递归“,而是从“第一个元素“起,逐个访问“后继元素“直至“后继“为“空“止。因此线索链表是通过遍历生成的,即在遍历过程中保存结点之间的“前驱“和“后继“的关系,并为方便起见,在线索链表中添加一个“头结点“,并由此构成一个“双向循环链表“。在实际应用时也可简化为“单向循环链表“(即只保存后继或前驱关系) 。7、 第七章
44、“图”图是一种比线性表和树更复杂的数据结构。在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素之间存在着明显的层次关系,并且每层的元素可能和下一层的多个元素(即其孩子结点)相邻,但只能和上一层的一个元素(即其双亲结点)相关。而在图形结构中,结点之间的关系可以是任意的,图中任意两个元素之间都可能相邻。和树类似,图的遍历是图的一种主要操作,可以通过遍历判别图中任意两个顶点之间是否存在路径、判别给定的图是否是连通图并可求得非连通图的各个连通分量,但对于带权图(网) ,其最小生成树或最短路径都取决于弧或边上的权值,则需要有特定的算法求解。二、重难点
45、讲解二叉树是本章的重点和难点。1、二叉树的遍历对于二叉树来讲最主要、最基本的运算是遍历。遍历二叉树 是指以一定的次序访问二叉树中的每个结点,并且每个结点仅被访问一次见图 6.8 。所谓 访问结点 是指对结点进行各种操作的简称。例如,查询结点数据域的内容,或输出它的值,或找出结点位置,或是执行对结点的其他操作。遍历二叉树的过程实质是把二叉树的结点进行线性排列的过程。假设遍历二叉树时访问结点的操作就是输出结点数据域的值,那么遍历的结果得到一个线性序列。从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:(1)访问结点本
46、身(N),(2)遍历该结点的左子树(L), (3)遍历该结点的右子树(R)。以上三种操作有六种执行次序:NLR、LNR、LRN、NRL、RNL、RLN。注意:前三种次序与后三种次序对称,故只讨论先左后右的前三种次序。由于被访问的结点必是某子树的根,所以 N(Node)、L(Left subtlee)和 R(Right subtree)又可解释为根、根的左子树和根的右子树。NLR、LNR 和 LRN 分别又称为先根遍历、中根遍历和后根遍历。 。三、下一阶段学习建议关于这部分的知识,同学们可以仔细阅读网上课件,同时参考教材,通过研读教材进一步理解数据结构中树和图的表示和实现。本导学材料结合教材向同
47、学们介绍了数据结构中树和图的定义、表示、遍历和搜索,以及应用等基础知识,希望通过导学材料的引导,大家对树和图能够有初步的认识,进一步深入学习和掌握数据结构 。本阶段学习内容是数据结构课程的基础,下一个阶段是查找和排序等知识,希望大家在学习的过程中,及时复习这个阶段的学习内容,为下个阶段打好基础。四、本阶段学习内容的思考题(论坛发布)参见该课程论坛。数据结构第四阶段导学资料一、本阶段学习内容概述本课程第四阶段学习的主要内容是第八章“广义表” 、第九章“查找表” 、第十章“内部排序”和第十一章“文件” 。第八章主要介绍了广义表的类型定义、广义表的存储表示、广义表操作的实现等;第九章主要介绍了顺序表、有序表、索引顺序表、静态查找树、二叉查找树、二叉平衡树、哈希表;第十章主要介绍了排序、直接插入排序、折半插入排序、表插入排序、希尔排序、起泡排序、快速排序、简单选择排序、堆排序、2-路归并排序、基数排序、排序方法的综合比较;第十一章主要介绍了顺序文件、索引文件、B-树、B+树、索引顺序文件、VSAM 文件、散列文件、多关键字文件。8、 第八章“广义表”从以上讨论可见,从结构本身特性而言,广义表归属于线性结构,但实现广义表操作的算法和树的操作的算法更为相近,这正是广义表这种数据结构的特点。由于广义表是一种递归定义的线性结构,因此它兼有线性结构和层次结构的特点。和其它章相比,