00-04数据结构大题答案
数据结构复习题及答案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.在用散列表存储关键码集合时,可以用双散列法寻找下一个空桶。
最新《数据结构》试题及答案(10套)

一、单选题(每题 2 分,共20分)1. 1.对一个算法的评价,不包括如下(B)方面的内容。
A.健壮性和可读性B.并行性C.正确性D.时空复杂度2. 2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行(A )。
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. 3.对线性表,在下列哪种情况下应当采用链表表示?( B )A.经常需要随机地存取元素B.经常需要进行插入和删除操作C.表中元素需要占据一片连续的存储空间D.表中元素的个数不变4. 4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是( C )A. 2 3 1B. 3 2 1C. 3 1 2D. 1 2 35. 5.AOV网是一种(D)。
A.有向图B.无向图C.无向无环图D.有向无环图6. 6.采用开放定址法处理散列表的冲突时,其平均查找长度(B)。
A.低于链接法处理冲突 B. 高于链接法处理冲突C.与链接法处理冲突相同D.高于二分查找7.7.若需要利用形参直接访问实参时,应将形参变量说明为(D)参数。
A.值B.函数C.指针D.引用8.8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的(A)。
A.行号B.列号C.元素值D.非零元素个数9.9.快速排序在最坏情况下的时间复杂度为(D)。
A.O(log2n) B.O(nlog2n) C.0(n) D.0(n2)10.10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( C )。
A. O(n)B. O(1)C. O(log2n)D. O(n2)二、运算题(每题 6 分,共24分)1. 1.数据结构是指数据及其相互之间的______________。
当结点之间存在M对N(M:N)的联系时,称这种结构为_____________________。
数据结构试题大题编程及参考答案

数据结构考试题参考答案1、设顺序表L中的数据元素递增有序。
试写一算法,将数据元素x插入到顺序表L的适当位置,以保持该表的有序性。
解:存储结构为:typedef struct SeqList{ DataType *data;int MaxLen;int len;}SeqList;算法如下:void insertLx(SeqList &L, DataType x){ if(L.len==L.maxlen) return;int i=L.len-1;while(i>=0 && x<L.data[i]){ L.data[i+1]=L.data[i]; i=i-1;}L.data[i+1]=x; L.len++;}2、试写一个算法,在带头结点的单链表L的元素x前插入一个结点y。
解:存储结构如下:typedef struct Lnode{ElemType data;struct Lnode *next;}Lnode, *LinkList;算法如下:void insert_y_before_x(LinkList L, ElemType x, ElemType y){ Lnode *q, *p=L;while(p->next && p->next->data!=x) p=p->next; //找x的前驱结点p;if(!p->next) return; // 若不存在结点x,则返回;q=new Lnode;q->data=y; q->next=p->next; p->next=q;}3、试写一个算法,统计带头指针的单链表L的元素个数。
解:存储结构如下:typedef struct Lnode{ElemType data;struct Lnode *next;}Lnode, *LinkList;算法如下:int length(LinkList L){ int len=0;Lnode *p=L;while(p) { len++; p=p->next; }return len;}注:如果单链表是带头结点的,则算法如下:int length(LinkList L){ int len=0;Lnode *p=L->next;;while(p) { len++; p=p->next; }return len;}4、试写一个算法,在带头结点的单链表L的第k个结点后插入一个结点x。
(完整版)数据结构课后习题答案(可编辑修改word版)

第1 章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,… },字母字符数据对象是集合C={‘A’,‘B’,… ,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
答案:例如有一张学生基本信息表,包括学生的学号、姓名、性别、籍贯、专业等。
每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列。
数据结构试题及答案(10套)

数据结构试题及答案(10套)数据结构试题及答案(10套)根据您的需求,我为您准备了10套数据结构试题及答案。
每套试题包含以下几个部分:选择题、填空题、编程题及答案解析。
下面是试题的具体内容:第一套试题:选择题:1. 在数据结构中,什么是栈?A. 先进先出(FIFO)的数据结构B. 后进先出(LIFO)的数据结构C. 随机访问的数据结构D. 无序排列的数据结构2. 以下哪种操作与队列的特性不相符?A. 入队操作B. 出队操作C. 查找操作D. 获取队首元素填空题:1. ______ 是一种动态集合,支持插入、删除和查找等操作。
2. 在二叉搜索树中,中序遍历的结果是________。
编程题:实现一个栈的数据结构,并包含以下操作:- push(x):将元素 x 压入栈中- pop():删除栈顶的元素并返回该元素- top():获取栈顶元素的值- empty():检查栈是否为空答案解析:选择题:B、C填空题:1. 集合 2. 升序序列编程题:略第二套试题:选择题:1. 以下哪个数据结构是一种广度优先搜索的应用?A. 栈B. 队列C. 堆D. 链表2. 在链表中,如果要删除一个节点,只给出该节点的指针,那么需要通过什么方式完成删除操作?A. 直接删除该节点B. 指向该节点的前一个节点的指针C. 指向该节点的后一个节点的指针D. 无法完成删除操作填空题:1. 树是一种________的数据结构。
2. 二叉树每个节点最多有______个子节点。
编程题:实现一个队列的数据结构,并包含以下操作:- enqueue(x):将元素 x 入队- dequeue():删除队首的元素并返回该元素- peek():获取队首元素的值- is_empty():检查队列是否为空答案解析:选择题:B、B填空题:1. 分层组织 2. 2编程题:略(以下部分省略)通过以上的题目,您可以对数据结构的知识点进行综合练习和复习。
每套试题包含了不同难度和类型的题目,能够帮助您全面了解和掌握数据结构的概念和操作。
数据结构试卷试题及答案

数据结构试卷试题及答案一、选择题(每题5分,共40分)1. 数据结构是研究数据元素的()A. 存储结构B. 处理方法C. 逻辑结构D. 所有以上内容答案:D2. 在数据结构中,通常采用()方式来表示数据元素之间的逻辑关系。
A. 顺序存储结构B. 链式存储结构C. 索引存储结构D. 散列存储结构答案:B3. 下面哪一个不是栈的基本操作?()A. 入栈B. 出栈C. 判断栈空D. 获取栈顶元素答案:D4. 下面哪一个不是队列的基本操作?()A. 入队B. 出队C. 判断队列空D. 获取队头元素答案:D5. 下面哪一个不是线性表的特点?()A. 有且只有一个根节点B. 每个节点最多有一个前驱和一个后继C. 数据元素类型相同D. 数据元素类型可以不同答案:D6. 在下列哪种情况中,使用链式存储结构比顺序存储结构更合适?()A. 数据元素经常插入和删除B. 数据元素大小不固定C. 数据元素个数不确定D. 所有以上情况答案:D7. 下面哪一个不是树的遍历方式?()A. 前序遍历B. 中序遍历C. 后序遍历D. 翻转遍历答案:D8. 在下列哪种情况中,使用散列存储结构比其他存储结构更合适?()A. 数据元素个数较少B. 数据元素查找频繁C. 数据元素插入和删除频繁D. 数据元素大小不固定答案:B二、填空题(每题5分,共30分)9. 栈是一种特殊的线性表,它的插入和删除操作都限定在表的一端进行,这一端称为______。
答案:栈顶10. 队列是一种特殊的线性表,它的插入操作在表的一端进行,这一端称为______,而删除操作在另一端进行,这一端称为______。
答案:队尾、队头11. 二叉树中的节点包括______和______。
答案:根节点、子节点12. 在图的存储结构中,邻接矩阵表示法用______个一维数组来表示图中各个顶点之间的关系。
答案:两个13. 散列存储结构中,关键码到存储地址的映射方法称为______。
数据结构习题和答案及解析【范本模板】

第 1 章绪论课后习题讲解1。
填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理.【解答】数据元素⑵( )是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。
【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系.⑶从逻辑关系上讲,数据结构主要分为()、( )、()和()。
【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有( )和( )两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。
【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是( )、()、()、( )、()。
【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹算法的描述方法通常有()、()、( )和( )四种,其中,( )被称为算法语言。
【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺在一般情况下,一个算法的时间复杂度是()的函数。
【解答】问题规模⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。
【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。
2。
选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的.A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。
⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是( )。
数据结构的试题及答案

数据结构的试题及答案一、选择题1. 在数据结构中,线性表的顺序存储方式被称为:A. 栈B. 队列C. 链表D. 数组答案:D2. 以下哪种数据结构是动态数据结构?A. 数组B. 链表C. 栈D. 队列答案:B3. 树的度是树内所有节点的度的最大值,树的深度是树的最长路径上的节点数。
以下哪个选项正确描述了树的度和深度?A. 度是节点的最大值,深度是路径上节点数B. 度是路径上节点数,深度是节点的最大值C. 度是节点的最大值,深度是节点的最大值D. 度是路径上节点数,深度是路径上节点数答案:A二、简答题1. 请简述链表和数组的区别。
答案:链表和数组是两种不同的数据存储方式。
数组是连续的内存空间,可以通过索引快速访问元素,但插入和删除操作可能需要移动大量元素。
链表由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针,链表的插入和删除操作不需要移动其他元素,但访问特定元素需要从头开始遍历。
2. 什么是二叉搜索树?它有哪些特点?答案:二叉搜索树(BST)是一种特殊的二叉树,其中每个节点的值都大于或等于其左子树中的任何节点的值,并且小于或等于其右子树中的任何节点的值。
BST的主要特点是它支持快速的查找、插入和删除操作,时间复杂度为O(log n)。
三、计算题1. 给定一个链表,编写一个算法来删除链表中的重复元素。
答案:以下是删除链表中重复元素的算法步骤:- 遍历链表,使用一个哈希表来记录已经遇到的元素。
- 当遍历到一个新元素时,检查它是否已经在哈希表中。
- 如果已经存在,删除当前节点,并继续遍历。
- 如果不存在,将元素添加到哈希表中,并继续遍历。
- 完成遍历后,链表中的重复元素将被删除。
2. 假设有一个二叉搜索树,编写一个算法来找到树中第k小的元素。
答案:以下是找到二叉搜索树中第k小元素的算法步骤:- 从根节点开始,使用中序遍历(左-根-右)。
- 遍历过程中,记录访问的节点数量。
- 当访问到第k个节点时,该节点即为所求的第k小的元素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
六、(15分)设有n个大小不等的数据组(n个数据组中数据的总数为 m),顺序存放在空间区D内,每个数据占一个存储单元。数据组的 首地址由数组S给出(如下图所示),试编写将新数据x插入到第i个 数据组的末尾且属于第i个数据组的算法,插入后,空间区D和数组S 的相互关系仍保持正确。 解:void lnsert_x(sqlist ﹠L, int I, ElemType x ) { // 将数据x插入到D区,插入后D和S关系不变 if( i>=I &&i<=L.length) { for(j=0 , p=L. elem[ 0 ],j<=m; j+ +) p+ +; // 求D区空闲空间首地址 if(i==L.lingth) *p=x; else { // 不插入第n个数组 for(q=L.elem[ i ]; p>=q;--p) *(p+l)=*p; //后移 *p=x; //插入x
if(count==G.vexnum) printf (G.ver[ v ].data); } //for } //DfsTraverse void DFS(ALGraph G,int v) { //从第v个顶点出发递归地深度优先遍历图G visited[ v ]=1; count+ +; for(p=G.vertices[ v ].firstarc; p; p=p→nextarc) { w=p→adjvex; if(!visited[ w ]) } //for } // DFS
pre=la; la →next=NULL; . // q指最小元素 while(p&&p→data<x) { //比x小的数递减
r =p→next; p→next=La →next;
La →next=p; p=r ; //置逆
} // while
q→next=p; pre=q; //重新链接 while(p→data=x) { // 考察等于x的情况 pre=p; p=p→next; } // while while(p) { // k为计数器 k+ +; x=p→data; //避免重复计算 if(x%2==0) { //删除偶数 while (p→data==x) { // 考察等于x的情况 u=p ; p=p→next; free(u); } / /while pre→next=p; } // if else // 处理奇数 while(p→data==x) { pre →next=p; pre=p; p=p→next; } // while } // while(p) } // exam
三、(15分) 设T是一棵满二叉树,编写一个将T的先序遍历序列转换为后 序遍历序列的递归算法。 解:对于满二叉树,已知任一遍历序列可唯一确定一棵二叉树,即可 将任一遍历序列转换为另一遍历序列。 void pretopost(ElemType pre [ ],ElemType post [ ],int L1,int H1, int L2,int H2) { H1为主段,L1为序列位置 if (H1>L1) { post[ H2]=pre[L1]; // 根结点 half=(H1-L1)/2; pretopost(pre ,post, L1+1, L1+half, L2+half-1); pretopost(pre, post, L1+half+1 ,H1, L2+half, H2-1) } //if } // preropost
k=Locatevex(G,v2); // 确定v1,v2在G中位置
p=(ArcNode)malloc(sizeof(ArcNode) ); p →adjvex=k; p→next=G.ver[ j ].firstarc; G.ver[ j ]. Firstarc=p; } //for } //CreatALG
for(q=&L.elem[ i ],p=&L.elem[ L.length-I];p>=q;q++)
(*q)++; m++; } //Insert_x
二、(17分)设有一个正整数序列组成的有序单链表(按递 增次序有序,且允许有相等的整数存在),试编写能实现 下列功能的算法:(要求用最少的时间和最小的空间) (1) 确定在序列中比正整数x大的数有几个(相同的数只计 算一次,如序列(20,20,17,16,15,15,11,10,8, 7,7,5,4)中比10大的数有5个); (2) 在单链表中将比正整数x小的数按递减次序排列; (3) 在单链表中将比正整数x大的偶数从单链表中删除; 解:void exam(Linklist,La,int,x) { p=La→next; q=p; k=0; // p为工作指针
if(H[ j ]==Null)
exist(1);
else if(j=i) exist(1); else if(H[ j ]==key) { e=H[ j ]; H[ j ]=EMPTY; } //if } //else } //HSDelete
1.
如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头 指针front,不设队列尾指针rear,而改置计数器count用以记录队列中 结点的个数。 (1)编写实现队列的三个基本运算:判空、入队、出队(3分) (2)队列中能容纳元素的最多个数是多少?(1分) 解:TYPE qu=ARRAY[0..m-1] of elemtp (1) FUNC empty(VAR q:qu; VAR fornt,count:integer):bollean; if count=0 then empry:=true else empty: =false ENDF; FUNC enqueue(VAR q: qu; VAR fornt,count:integer;VAR x:elemtp):boolean; if count=m then RETURN (false) {队列已满} else [count=count=1]; i:=(front=count) MOD m;
五、(15分)在有向图G中,如果r到G的每个结点都有路径可达, 则称结点r为G的根结点,编写一个算法完成下列功能: (1)、建立有向图G的邻接表存储结构: (2)、判断有向图G是否有根,若有,则打印出所有根结点的值。
解:1、void CreatALG(ALGraph &G) { // 建立有向图的邻界表存储结构 int I, ArcNode *p; scanf(&G →vexnum, &G →arcnum); for(i=0;i<G→ vexnum;i+ + ) { scanf ((&G →ver[ i ].data); G→ver[ i ].firstarc=Null; } //for for(i=0; i<G→arcnum; i+ +) { scanf(&v1, &v2); j=、(15分)写出删除二叉排序树bt中值为x的结点的算法(二叉排 序树以二叉链表形式存储,删除后仍保持二叉排序性质)。 解: Status delete(BiTree ﹠t ,ElemType x) { // 删除二叉排序树中的x接点 if(x<p→data { q=p; p=p→lchild; } // if else { q=p; p=p→rchild; } // else if(!p) return false; // 来找到 else if(!p→rchild) { //被删结点无右子权 q=p; p=p→lchild; // 重接 free(q); } // if
六、(18分)对下面的关键字集(30,15,21,40,25,26,36,37),若 查找表的装填因子为0.8,采用线性探测再散列解决冲突,做: (4)将删除后的空间置标记为‘EMPTY’ Void HSDelete(HashTable &H,KeyType key) { // 删除哈希素中等于key的关键字,用线性探测再散列解决冲突 i=H(key ); // 取得哈希地址 if(H[ i ]==Null) exit(1); if (H[ i ]==key) { e=H [ i ] ; H[ i ]=EMPTY; } //if else{ di=1; j=(H(key)+di )%m; // m 为表长 while(H[ j ]&&j!=i) { di=di+1; j=((H(key)+di)%m; } //while
2、void DfsTraverse(ALGraph G) { //利用深度优先搜索,判断有向图G是否有根结点。 int visited[maxsige],count; //count为记录结构的顶点数。 for(v=0;v<G.vexnum ; v+ +) { for(v=0;v<G.vexnum ; v+ +) visited[ v ]=0; count=0; DFS(G,v) ;
四、(15分) 2、写出后序线索二叉树的非递归遍历算法。 解:根据后序线索二叉树的特点,利用前驱线索逆向先序遍历 void PreorderTraverse_Thr(BiThrTree T) { // T指向头结点,T的左链指向根结点. p=T→lchild; while(p!=T) { printf‘(p→data); if(p→rtag==0) p=p→rchild; else p=p→lchild; } // while } //PreorderTraverse_Thr
3、(12分)假设一个有向图g已经以十字链表形式存储在 内存中,试写一个判断该有向图中是否有环(回路)的算法。 解:对十字链表储存结构的有向图采用拓扑排序 Status toposort (OLGraph G) ﹛ findindegree (G, indegree); //对各项点求入度 InitQueue (Q); //队列初始化 Count=0; //计数器初始化 for(i=0;i<G.Vernum;i++) if(G.Ver[ i ].indegree==0) Enqueue(Q,i); //入度为零的顶点入队 While(!QueueEmpty (Q) ) ﹛ Dequeue(Q,i); //队头出队 Count++; P=G. ver [ i ].firstout; //取邻接点 while(p) ﹛ //处理邻接点的入度 j=p→ headvex; G.ver [ j ].indegree--; if(G.ver [ j ].indegree==0) Enqueue (Q,j); //顶点j入队 p=p→tlink;//指针后移 }//while }//while if ( (count<G.vernum) //有环 return ERROR; else return OK; } // toposort