数据结构A复习要点及样题(南邮)
数据结构复习题及答案5篇

数据结构复习题及答案5篇第一篇:数据结构复习题及答案、数据结构复习题及答案中南大学现代远程教育课程考试(专科)复习题及参考答案数据结构一、判断题:1.数组是一种复杂的数据结构,数组元素之间的关系既不是线性的也不是树形的。
()2.链式存储在插人和删除时需要保持物理存储空间的顺序分配,不需要保持数据元素之间的逻辑顺序。
()3.在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。
()4.折半搜索只适用于有序表,包括有序的顺序表和有序的链表。
()5.如果两个串含有相同的字符,则这两个串相等。
()6.数组可以看成线性结构的一种推广,因此可以对它进行插入、删除等运算。
()7.在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针。
()8.通常递归的算法简单、易懂、容易编写,而且执行的效率也高。
()9.一个广义表的表尾总是一个广义表。
()10.当从一个小根堆(最小堆)中删除一个元素时,需要把堆尾元素填补到堆顶位置,然后再按条件把它逐层向下调整,直到调整到合适位置为止。
()11.对于一棵具有n个结点,其高度为h的二叉树,进行任一种次序遍历的时间复杂度为O(h)。
()12.存储图的邻接矩阵中,邻接矩阵的大小不但与图的顶点个数有关,而且与图的边数也有关。
()13.直接选择排序是一种稳定的排序方法。
()14.闭散列法通常比开散列法时间效率更高。
()15.有n个结点的不同的二叉树有n!棵。
()16.直接选择排序是一种不稳定的排序方法。
()17.在2048个互不相同的关键码中选择最小的5个关键码,用堆排序比用锦标赛排序更快。
()18.当3阶B_树中有255个关键码时,其最大高度(包括失败结点层)不超过8。
()19.一棵3阶B_树是平衡的3路搜索树,反之,一棵平衡的3路搜索树是3阶非B_树。
()20.在用散列表存储关键码集合时,可以用双散列法寻找下一个空桶。
南邮数据结构考点范围

南邮数据结构考点范围南京邮电大学数据结构课程主要涵盖以下几个方面的内容。
1.算法复杂度分析算法复杂度分析是数据结构课程的基础。
在这一部分内容中,学生需要学习如何计算算法的时间和空间复杂度。
时间复杂度是指算法所需的时间和输入数据量之间的关系,空间复杂度是指算法所需的额外空间和输入数据量之间的关系。
学生需要掌握常见算法的复杂度分析方法,如递归算法的复杂度分析、循环算法的复杂度分析等。
2.线性表线性表是数据结构中最基本的一种数据结构,也是其他数据结构的基础。
在这一部分内容中,学生需要学习线性表的概念、基本操作和实现方式。
常见的线性表包括数组、链表、栈和队列等。
学生需要学习如何操作线性表的插入、删除、查找等操作。
3.树树是一种非线性的数据结构,是由节点和边组成的。
在这一部分内容中,学生需要学习树的基本概念、遍历方式和常见的树结构。
常见的树结构包括二叉树、二叉搜索树、平衡二叉树和堆等。
学生需要学习如何操作树的插入、删除、查找等操作,以及树的遍历方式,如前序遍历、中序遍历和后序遍历等。
4.图图是一种用于描述事物之间关系的数据结构,在现实生活中有广泛的应用。
在这一部分内容中,学生需要学习图的基本概念、存储方式和常见的图算法。
常见的图算法包括深度优先搜索算法和广度优先搜索算法等。
学生需要学习如何操作图的插入、删除、查找等操作,以及图的遍历方式,如深度优先遍历和广度优先遍历等。
5.排序算法排序算法是数据结构课程的重点内容之一。
在这一部分内容中,学生需要学习常见的排序算法,如冒泡排序、插入排序、选择排序、快速排序、归并排序等。
学生需要学习如何分析排序算法的时间复杂度和空间复杂度,并能够实现各种排序算法。
6.查找算法查找算法是数据结构课程的重点内容之一。
在这一部分内容中,学生需要学习常见的查找算法,如顺序查找、二分查找、哈希查找等。
学生需要学习如何分析查找算法的时间复杂度和空间复杂度,并能够实现各种查找算法。
除了上述内容,南京邮电大学数据结构课程还可能涉及其他相关内容,如哈希表、递归算法、图的最短路径算法、动态规划等。
南邮_数据结构课后习题答案讲解

前置条件: x<y
后置条件:删除有序表中元素值在 x和y之间( 含x和y)的所有元素。
2020/2/8
12
void Search_Delete(List *lst, T x, T y)
{
if (lst->Size==0) { printf(“The list is empty”); return -1; }
sum=j-i; lst[i++]=lst[j++]; while(ej<lsne) lst[i++]=lst[j+//+小];于等于//删y的除元su素m删个除元素 n=n-sum; { j++; n--; }
}
2020/2/8
13
4.6 给出下列稀疏矩阵的行优先和列优先顺序存 储的行三元组和列三元组表示。
?
?
?1 4 7 ?
?
?
?4 4 9 ?
?4 4 9 ?
4.7 求对题图4-1的稀疏矩阵执行矩阵转置时数组
num[]和k[]的值。
num[col] 1
0
2
1
2
k[col]
0
1
1
3
4
2020/2/8
14
第六章 习题讲解
6-2. 对于三个结点 A,B和C,可分别组成多少不同 的无序树、有序树和二叉树?
}
2020/2/8
4
2-12.设计一个算法,将单链表中结点以逆序排列。逆序的 单链表中的结点均为原表中的结点。 Node* pInvert(Node* first) { Node *p=first, *q; first=NULL; while (p) { q=p->Link; p->Link=first; first=p; p=q; } return first; }
南京邮电大学数据结构A第3章

3.1 堆栈
3.1.1 堆栈抽象数据类型 3. 栈的C++模板抽象类
程序3-1 堆栈的C++类
#include <iostream.h> template <class T> class Stack { public: virtual bool IsEmpty() const=0; virtual bool IsFull() const=0; virtual bool Top(T &x) const=0; virtual bool Push(T x)=0; virtual bool Pop()=0; virtual void Clear()=0; };
3.2 队列
3.2.1 队列抽象数据类型 3. 队列的C++模板抽象类
template <class T> class Queue { public:
Queue(){};
~Queue(){}; virtual bool EnQueue(const T x)=0;
virtual bool DeQueue()=0;
出栈操作Pop() Node<T> *q = top; top = top->link; delete q;
top
an-1
an-2
an-3
…
a0
∧
图3-3 链式栈
3.2 队列
3.1.3 栈的链接表示 队列的示意图
Q=(a0,a1,…,an-1)
入队 课堂提要
第3章 堆栈和队列 3.1 堆栈 3.2 队列 3.2.1 队列抽象数据类型 3.2.2 队列的顺序表示 3.2.3 队列的链接表示 3.3 表达式的计算 3.4 递归
数据结构A第1章(南邮)

程序步数为2n+3。
41
1.5.3 渐近时间复杂度
渐近时间复杂度
使用大 O 记号表示的算法的时间复杂性,称为算法的渐
近时间复杂度,简称时间复杂度。
大O记号 如果存在两个正常数 c 和 n0 ,使得对所有的 n , nn0 ,有 f(n) c g(n) 则有 f(n)=O(g(n))。
42
渐近时间复杂度 使用大 O 记号表示的算法的时间复杂性,称为算法的渐
结点存储块分成两部分,元素本身和该元素后继元素所 在结点的存储地址。
Data
Link
20
小结
逻辑结构 概念
面向 关系
存储结构 数据及其关系在计 算机内的组织方式 面向计算机
数据元素之间逻 辑关系的描述 面向应用问题
存储结构是逻辑结构在计算机内的映像
21
1.2.4 数据结构的运算
• 数据结构最常见的运算 创建运算:创建一个数据结构; 清除运算:删除数据结构中的全部元素; 插入运算:在数据结构的指定位置上插入一 个新元素; 删除运算:将数据结构中的某个元素删除; ……
2.
数据类型 一个数据类型定义了一个值的集合以及作 用于该值集的操作的集合。 即一组值和一组操作。
26
3.抽象数据类型 抽象数据类型( Abstract Data Type, ADT )是一个 数据类型,其主要特征是该类型的对象及其操作的规 范 , 与该类型对象的表示和操作的实现分离,实行封 装和信息隐蔽,即使用和实现分离。 使用和实现分离:使用者通过规范使用该类型的数据,
数据结构A第4章(南邮)

2. 二维数组的顺序表示
二维数组a[m][n]映射到一维的存储空间时有两种顺 序:行优先和列优先。 大多数语言如PASCAL、BASIC、C、C++等都是按行优 先顺序存储的,FORTRAN是按列优先顺序存储的。
a[0][0] a[1][0]…a[m-1][0] a[0][1] a[1][1]…a[m-1][1] … a[0][n-1] a[1][n-1]…a[m-1][n-1]
下标为0的列 下标为1的列 … 下标为n-1的列 (b)列优先的顺序表示 列优先顺序存储的地址计算: loc(a[i][j])=loc(a[0][0])+(j*m+i)*k
第4章 数组和字符串
引
言
数组在算法设计中经常被使用,在本 章中,将数组作为一种抽象数据结构类型 加以讨论。 在自然科学中,矩阵常被用于解决许 多实际问题,在本章中介绍几类特殊矩阵 在存储表示上的特点以及稀疏矩阵的转置 算法的实现。
内容提要 1.介绍数组的概念 2.讨论数组抽象数据类型 3.讨论特殊矩阵的存储方法 4.讨论稀疏矩阵的顺序存储方法 5.讨论稀疏矩阵转置算法 6.讨论字符串的匹配算法
使用实例: Array1D <int> a(5) ; cout<<a;
程序4.2 应用一维数组类的主程序 #include "array1d.h" void main() { Array1D<int> a(5),b(8); Array1D<int> c; //采用缺省长度0 cin>>a; cout<<"a "<<a; cin>>b; cout<<"b "<<b; cout<<"c "<<c; cout<<"a[0]="<<a[0]<<"; "<<"b[5]="<<b[5]<<endl; c=b; cout<<"c=b, c "<<c; b=a; cout<<"b=a, b "<<b; }
数据结构A-试卷

南京邮电学院 2004/2005 学年第二学期期末数据结构A 试题纸 (A卷)班级 ____ 学号 ___ 姓名 __ 得分 __一、单项选择题(每小题2分,共20分)1.一个栈的输入序列为1,2,3,4,下面哪一个序列不可能是这个栈的输出序列?()A. 1,3,2,4B. 2,3,4,1C. 4,3,1,2D. 3,4,2,12.循环队列顺序存储在一维数组q中,数组的允许长度是MaxSize。
教材上采用在循环队列中至少保留一个空闲元素的方法来区分空队列和满队列。
按照教材所述方法,判断队列为满的条件是()A. front= =rearB. (front+1)%MaxSize= =rearC. (rear+1)%MaxSize= =frontD. front+rear= =MaxSize3.中缀表达式(A-B*C)/D+E的后缀形式是()A. ABC*-D/E+B. ABC*-D/+EC. ABC*-DE/+D. A-BC*D/E+4.对下列哪种二叉树作中序遍历必将得到一个树中结点的非降有序序列( )。
A.AVL搜索树 B.哈夫曼树 C. 完全二叉树 D. 胜方树5.适用于对半搜索的表的存储方式及元素排列要求为( )A.链接存储,元素无序 B.链接存储,元素有序C.顺序存储,元素无序 D.顺序存储,元素有序6.下面关于m阶B-树和m阶B+树的叙述中,不正确的是()A.B-树和B+树每个非叶结点最多有m个孩子B.B-树和B+树每个非叶结点至少有⎡m/2⎤个孩子C. B-树和B+树的根结点至少有两个关键字D. B-树和B+树都能有效地支持随机检索7.设有n个顶点e条边的AOV网采用邻接表存储,则相应的拓扑排序算法的时间复杂度为()A. O(n2)B.O(e)C.O(n)D.O(n+e)8.下列说法中错误的是()A.n个结点的树的各结点度数之和为n-1B.n个结点的无向图最多有n*(n-1)条边C.用邻接矩阵存储图时所需存储空间大小仅与图的顶点数有关D.用邻接表存储图时所需存储空间大小与图的顶点数和边数都相关9.下列何种排序算法的比较次数与元素的初始排列状态无关?( D )A. 直接插入排序B.起泡排序C.快速排序D.简单选择排序10.下列关于文件的说法中,不正确的是( A )。
南昌航空大学数据结构复习资料

南昌航空大学期末考试(计算机科学与技术)数据结构复习资料计算题一. 一棵二叉树的先序、中序和后序序列分别如下,其中有一部分未显示出来。
试求出空格处的内容,并画出该二叉树。
先序序列: B F ICEH G中序序列:D KFIA EJC后序序列: K FBHJ G A解:在先序序列空格中依次填ADKJ,中序中依次填BHG,后序中依次填DIEC。
二叉树自画!二.试列出如下图中全部可能的拓扑排序序列。
123456解:全部可能的拓扑排序序列为:1523634、152634、156234、561234、516234、512634、512364三.已知哈希表地址空间为0..8,哈希函数为H(key)=key%7,采用线性探测再散列处理冲突,将数据序列{100,20,21,35,3,78,99,45}依次存入此哈希表中,列出插入时的比较次数,并求出在等概率下的平均查找长度以及查找因子。
解:哈希表及查找各关键字要比较的次数如下所示:1(4×1+1×2+1×4+2×5)=ASL=8a=8/9四.已知关键字序列{23,13,5,28,14,25},试构造二叉排序树。
解:五.设有序列:w={23,24,27,80,28},试给出哈夫曼树;哈夫曼树如下图所示:六:已知一棵二叉树的先序序列与中序序列分别如下,试画出此二叉树。
先序序列:ABCDEFGHIJ中序序列:CBEDAGHFJI解:先由先序序列的第一个结点确定二叉树的根结点,再由根结点在中序序列中左侧部分为左子树结点,在右侧部分为右子树结点,再由先序序列的第一个结点确定根结点的左右孩子结点,由类似的方法可确定其他结点,如下图所示。
七.(本题8分)对于如下图所示的G,用Kruskal算法构造最小生成树,要求图示出每一步的变化情况。
解:用Kruskal算法构造最小生成树的过程如下图所示:八.给出一组关键字29、18、25、47、58、12、51、10,写出归并排序方法进行排序时的变化过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构A复习要点第1章基础知识算法与数据结构(数据结构概念、逻辑结构、数据存储结构示等)数据抽象和抽象数据类型(数据结构规范、实现)算法分析的基本方法(时间复杂性、空间复杂性)第2章线性表线性表的顺序和链接表示理解在顺序表、单链表上实现线性表运算,能设计相应算法程序顺序和链接表示的优缺点比较第3章堆栈和队列了解栈和队列的概念、特点理解顺序栈和循环队列运算的实现中缀表达式与后缀表达式的转换后缀表达式计算第4章数组和字符串一般数组存储方法三元组存储稀疏矩阵的方法三元组表示的快速矩阵转置方法字符串的概念、KMP算法及其改进第5章树二叉树的定义、性质及二叉链表理解二叉树的遍历算法(遍历结果、算法设计),能设计相应算法程序堆、堆的建立和调整森林与二叉树的相互转换哈夫曼树构造、哈夫曼编码、WPL计算第6章集合与搜索理解有序表的顺序搜索算法理解对半搜索算法平均搜索长度的计算第7章搜索树理解二叉搜索树的定义、性质和插入、删除算法二叉平衡树的定义及插入算法B-树的定义和插入、删除方法第8章散列表掌握散列函数的相关概念散列函数解决冲突的开地址法(线性探查法,二次探查法、双散列法)第9章图图的基本概念和存储结构理解图的算法(结果):遍历、拓扑排序、最小代价生成树、关键路径、最短路径第10章内排序三种简单排序算法、快速排序和两路合并排序算法、过程、结果排序算法的时间复杂度(最好、最差,平均)、稳定性第11章文件文件的基本概念初始游程的生成及竞赛树考试样题填空题写出表达式a*b+c/d的后缀形式________。
已知一无向图G=(V,E),其中V={a,b,c,d,e},E={(a,b), (a,d), (a,c) (d,c), (b,e)},现用某一种遍历方法从顶点a开始遍历图,得到的序列为abecd,则采用的是__________遍历方法。
在顺序表长度为n中,平均在表中插入一个元素需要移动元素的个数可用计算公式为________。
一个表长为n的线性表,其排序时间最快为。
选择题具有n 个顶点的有向完全图中,边的总数为()条。
A)n(n+1) B)n(n-1)C)n(n-1)/2 D)n(n+1)/2设一个栈输入序列是1、2、3、4、5,则下列序列中不可能是栈的输出序列是()。
A)32541 B)15432C)14523 D)23145二叉树的前序遍历为EFHIGJK,中序遍历序列为HFIEJKG。
该二叉树根结点的右子树的根是()A) E B) FC) G D) H对有14个元素的有序表A[1]-A[14]作对半查找,查找元素A[4]时的被比较元素依次为()A. A[1],A[2],A[3],A[4]B.A[7],A[3],A[5],A[4]C. A[1],A[2],A[7],A[4]D.A[7],[A5],A[3],A[4]设有一个长度为100且已排好序的表,用对半搜索进行查找,若搜索不成功,则至少要比较______次。
()A.9 B.8 C.7 D.6简答题用一维数组存放的一棵完全二叉树如图所示:图写出前序、中序、后序遍历该二叉树时访问结点的顺序。
图的邻接表表示一个给定的无向图。
(1)给出从顶点v1开始,用深度优先搜索法进行遍历时的顶点序列;(2)给出从顶点v1开始,用广度优先搜索法进行遍历时的顶点序列。
解答题设数据集合d={1,12,5,8,3,10,7,13,9},试完成下列各题: (1)依次取d 中各数据,构造一棵二叉搜索树bt 。
(2)画出在二叉树bt 中删除12后的树结构。
对图的3阶B-树,依次执行下列操作,画出各步操作的结果。
(1)插入90 ;(2)插入25;(3)插入45;(4)删除60;图程序阅读题图采用邻接表存储表示,边结点的结构如图所示,下面的程序是邻接表类LinkedGraph 的某个成员函数template <class T>void LinkedGraph<T>::A(){int *in=new int[n];for (int i=0;i<n;i++) in[i]=0; ENode<T> *p; for (i=0;i<n;i++) { p=a[i]; while (p) { in[p->adjvex]++;p=p->nextarc; } }cout<<endl;for (i=0;i<n;i++) cout<<i<<": "<<in[i]<<";"<<endl; delete []in; }图图⑴ 请说明该成员函数的作用是什么?⑵ 若有一个邻接表如图8所示,请给出执行该函数的结果?算法题在以二叉链表表示的二叉树类BinaryTree 中增加一个成员函数LeavesInTree( )。
该模板函数为递归函数,其功能是求二叉树类BinaryTree 的对象中叶子结点的数目。
实现该递归函数。
函数原型如下:template <class T> int BinaryTree<T>::LeavesInTree( )在不带表头结点的单链表中删除一个关键字值为x 的元素 。
函数原型如下: template <class T>bool SingleList<T>::Delete(T x)考试样题答案填空题写出表达式a*b+c/d 的后缀形式________。
【答案】 a b * c d / +已知一无向图G=(V,E),其中V={a,b,c,d,e},E={(a,b), (a,d), (a,c) (d,c), (b,e)},现用某一种遍历方法从顶点a 开始遍历图,得到的序列为abecd ,则采用的是__________遍历方法。
【答案】深度优先在顺序表长度为n 中,平均在表中插入一个元素需要移动元素的个数可用计算公式为________。
【答案】一个表长为n 的线性表,其排序时间最快为 。
【答案】O(n) 选择题具有n 个顶点的有向完全图中,边的总数为( )条。
A )n (n+1)B )n (n-1)C )n (n-1)/2D )n (n+1)/2 【答案】B设一个栈输入序列是1、2、3、4、5,则下列序列中不可能是栈的输出序列是( )。
A )32541B )15432C )14523D )23145 【答案】C 只能是14532二叉树的前序遍历为EFHIGJK ,中序遍历序列为HFIEJKG 。
该二叉树根结点的右子树的根是( )A) E B) F C) G D) H∑--==--+=112)1(11n i i ni n n E【答案】C对有14个元素的有序表A[1]-A[14]作对半查找,查找元素A[4]时的被比较元素依次为() A. A[1],A[2],A[3],A[4] B.A[7],A[3],A[5],A[4] C. A[1],A[2],A[7],A[4] D.A[7],[A5],A[3],A[4] 【答案】B第1次:范围[1, 14],中间元素是(1+14)/2 = 7 第2次:范围[1, 6],中间元素是(1+6)/2 = 3 第3次:范围[4, 6],中间元素是(4+6)/2 = 5 第4次:范围[4, 4],中间元素是(4+4)/2 = 4设有一个长度为100且已排好序的表,用对半搜索进行查找,若搜索不成功,则至少要比较______次。
( )A .9B .8C .7D .6 【答案】D长度为100的有序表进行对半查找,查找失败时比较⎣⎦100log 2次或者⎣⎦1100log 2+次,即6或7次。
简答题用一维数组存放的一棵完全二叉树如图所示:图写出前序、中序、后序遍历该二叉树时访问结点的顺序。
【答案】前序遍历序列:ABDECF 中序遍历序列:DBEAFC 后序遍历序列:DEBFCA图的邻接表表示一个给定的无向图。
(1)给出从顶点v1开始,用深度优先搜索法进行遍历时的顶点序列; (2)给出从顶点v1开始,用广度优先搜索法进行遍历时的顶点序列。
【答案】深度优先遍历序列:v1, v2, v4, v3, v5, v6广度优先遍历序列:v1, v2, v3, v4, v5, v6解答题设数据集合d={1,12,5,8,3,10,7,13,9},试完成下列各题:(1)依次取d中各数据,构造一棵二叉搜索树bt。
(2)画出在二叉树bt中删除12后的树结构。
【答案】(1)(2) 删除12后对图的3阶B-树,依次执行下列操作,画出各步操作的结果。
(1)插入90 ;(2)插入25;(3)插入45;(4)删除60;图【答案】插入90 插入25插入45删除60程序阅读题图采用邻接表存储表示,边结点的结构如图所示,下面的程序是邻接表类LinkedGraph 的某个成员函数template <class T>void LinkedGraph<T>::A(){int *in=new int[n];for (int i=0;i<n;i++) in[i]=0; ENode<T> *p; for (i=0;i<n;i++) { p=a[i]; while (p) { in[p->adjvex]++;p=p->nextarc; } }cout<<endl;for (i=0;i<n;i++) cout<<i<<": "<<in[i]<<";"<<endl; delete []in; }⑴ 请说明该成员函数的作用是什么?⑵ 若有一个邻接表如图8所示,请给出执行该函数的结果? 【答案】(1) 打印图中所有顶点的入度 (2) 结果 0 : 2 1 : 1 2 : 1 3 : 1图图算法题在以二叉链表表示的二叉树类BinaryTree中增加一个成员函数LeavesInTree( )。
该模板函数为递归函数,其功能是求二叉树类BinaryTree的对象中叶子结点的数目。
实现该递归函数。
函数原型如下:template <class T>int BinaryTree<T>::LeavesInTree( )【答案】template <class T>int BinaryTree<T>::LeavesInTree( ){return Leaf(root);}template <class T>int BinaryTree<T>::Leaf(BTNode<T> *t){if (t == NULL) return 0;if ((t->lChild == NULL)&&(t->rChild == NULL)) return 1;return Leaf(t->lChild) + Leaf(t->rChild);}在不带表头结点的单链表中删除一个关键字值为x的元素。