数据结构应用题练习

数据结构应用题练习

一、简介

数据结构是计算机科学中的重要概念,是指数据组织、管理和存储的方式。它是计算机处理和分析数据的基础,在各个领域都有广泛的应用。本文将通过几个数据结构应用题的练习,展示数据结构在实际问题中的应用。

二、链表应用题

链表是一种常见的数据结构,在许多场景中都有广泛的应用。假设有一组学生的信息,包括学生姓名、年龄和成绩,请使用链表来存储并实现以下操作:

1. 添加学生信息

2. 删除学生信息

3. 查找学生信息

4. 修改学生信息

三、栈应用题

栈是一种后进先出(LIFO)的数据结构,在很多应用中都有不可或缺的地位。以网页浏览器的前进和后退功能为例,使用栈可以很方便地实现该功能。请描述如何使用栈来实现浏览器的前进和后退功能,并分析算法的时间复杂度。

四、队列应用题

队列是一种先进先出(FIFO)的数据结构,常用于处理排队等场景。现假设有一个任务队列,多个任务需要按照顺序执行。请使用队列来

存储任务,并实现以下操作:

1. 添加任务到队列

2. 从队列中取出并执行任务

3. 判断队列是否为空

4. 清空队列中的所有任务

五、树应用题

树是一种重要的非线性数据结构,在很多领域都有广泛应用。假设

有一组学生的信息,包括学生姓名、年龄和成绩,请使用树来存储这

些信息,并实现以下操作:

1. 添加学生信息到树中

2. 从树中查找指定学生的信息

3. 删除指定学生的信息

4. 获取树中所有学生的平均成绩

六、图应用题

图是一种用于描述事物之间关系的数据结构,在网络分析、路径规划等领域有广泛应用。假设有一张地图,其中包含若干城市和连接它们的道路,请使用图来存储地图信息,并实现以下操作:

1. 添加城市和道路到图中

2. 查找两个城市之间的最短路径

3. 删除某个城市及其相关的道路

4. 统计图中有多少个孤立的城市

七、哈希表应用题

哈希表是一种通过散列函数实现高效存储和查找的数据结构,在很多场景中都有广泛应用。假设有一组学生的信息,包括学生姓名、年龄和成绩,请使用哈希表来存储这些信息,并实现以下操作:

1. 添加学生信息到哈希表中

2. 从哈希表中查找指定学生的信息

3. 删除指定学生的信息

4. 统计哈希表中学生信息的个数

八、总结

以上是几个常见的数据结构应用题的练习,通过这些练习可以更深入地理解数据结构的应用和算法的设计。数据结构是计算机科学中非常重要的一个领域,其应用广泛且多样化。在实际问题中,合理选择

合适的数据结构并设计高效的算法,可以提高程序的性能和可维护性,对于计算机程序员来说,掌握数据结构是必不可少的技能。希望本文

能够帮助读者更好地理解和应用数据结构。

数据结构练习题及答案

数据结构练习题(一) 一、单选题 1.栈和队列的共同特点是( )。 A.只允许在端点处插入和删除元素 B.都是先进后出 C.都是先进先出 D.没有共同点 2.用链接方式存储的队列,在进行插入运算时( )。 A. 仅修改头指针 B. 头、尾指针都要修改 C. 仅修改尾指针 D.头、尾指针可能都要修改 3.以下数据结构中( )是非线性结构。 A. 队列 B. 栈 C. 线性表 D. 二叉树 4.设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10), 每个元素占一个空间,问A[3][3](10)存放在()位置。脚注(10)表示用10进制表示。 A.688 B.678 C.692 D.696 5.树最适合用来表示( )。 A.有序数据元素 B.无序数据元素 C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据 6.二叉树的第k层的结点数最多为( )。 A.2k-1 B.2K+1 C.2K-1 D. 2k-1 7.若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二 分查找,则查找A[3]的比较序列的下标依次为( )。 A. 1,2,3 B. 9,5,2,3 C. 9,5,3 D. 9,4,2,3 8.对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K) =K %9作为散列函数,则散列地址为1的元素有()个。 A.1 B.2 C.3 D.4 9.设有6个结点的无向图,该图至少应有( )条边才能确保是一个连通图。 A.5 B.6 C.7 D.8 二、填空题 1.通常从四个方面评价算法的质量:_________、_________、_________和_________。 2.一个算法的时间复杂度为(n3+n2log2n+14n)/n2,其数量级表示为________。 3.假定一棵树的广义表表示为A(C,D(E,F,G),H(I,J)),则树中所含的结点数为 __________个,树的深度为___________,树的度为_________。 4.若用链表存储一棵二叉树时,每个结点除数据域外,还有指向左孩子和右孩子的两个指 针。在这种存储结构中,n个结点的二叉树共有________个指针域,其中有________个指针域是存放了地址,有________________个指针是空指针。 5.对于一个具有n个顶点和e条边的有向图和无向图,在其对应的邻接表中,所含边结点 分别有_______个和________个。 6.AOV网是一种___________________的图。 7.在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有 向完全图中,包含有________条边。 8.假定一个线性表为(12,23,74,55,63,40),若按Key % 4条件进行划分,使得同一余数的元 素成为一个子表,则得到的四个子表分别为____________________________、___________________、_______________________和__________________________。 9.在快速排序、堆排序、归并排序中,_________排序是稳定的。 三、计算题 1.在如下数组A中链接存储了一个线性表,表头指针为A [0].next,试写出该线性表。 A 0 1 2 3 4 5 6 7

《数据结构》应用题练习

《数据结构》应用题练习 1、将下图所示的森林转换成二叉树。 2、已知一棵二叉树的中序序列和后序序列分别如下 先序序列:A B D E C F H K G 中序序列:B E D A H F K C G 请完成:(1)画出该二叉树(2分); (2)写出该二叉树的后序序列(2分)。 3、对于一组给定的权值W={4,18,6,22,10,15},请完成: (1)建立相应的哈夫曼树; (2)计算其WPL值。 4、如下所示的有向图,回答下面问题: (1)该图是强连通的吗?若不是,给出强连通分量。 (2)请给出图的邻接矩阵 (3)请给出图的邻接表和逆邻接表。 (4) 计算各点的入度和出度 5、下图是一个带权无向图,要求: (1)画出以V1为初始顶点、按Prim算法构造最小生成树的过程;

(2)求出最小生成树的总代价; (3)Prim算法求最小生成树适用于什么情形? 6下图是一个带权无向图,要求: (1)画出以V1为初始顶点、按克鲁斯卡尔算法构造最小生成树的过程; (2)求出最小生成树的总代价; (3)克鲁斯卡尔算法求最小生成树适用于什么情形? 7、设有一组初始记录关键字为(10, 2, 26, 4, 18, 24, 21, 15, 8,) 要求: (1)构造一棵二叉排序树并给出构造过程。 (2)查找关键字2需要和哪些结点进行比较? (3)等概率查找下的ASL是多少? 8、已知哈希函数为H(key)=key%11,哈希表长度为13,用平方探测再散列的方法处理冲突。 表中已依次存放了关键字为33、23、32、54和42的5个记录: (1)现将关键字65填入哈希表,确定其存储地址(要求写出每一步的哈希地址计算表达式)。 (2)若查找关键字65的记录,需依次与哪些关键字进行比较? (3)为确保查找正确,如果删除关键字为54的记录应作何处理? 9关键码集为{47,7,29,11,16,92,22,8,3},散列表表长为m=11,散列函数为H(key)=key mod 11 ,线性探测法处理冲突。 (1)生成哈希表 (2)计算查找成功的ASL

数据结构练习附答案

一、单项选择题 1.逻辑关系是指数据元素间的() A.类型B.存储方式C.结构D.数据项 2.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构 为( ) A.顺序表 B.用头指针表示的单循环链表 C. 用尾指针表示的单循环链表 D. 单链表 3.设数组data[m]作为循环队列SQ的存储空间,front为队头指针,rear 为队尾指针,则执行出队操作后其头指针front值为() A.front=front+1B.front=(f ront+1)%(m-1) C.front=(front-1)%m D.front=(front +1)%m 4.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为 队头指针和队尾指针,则判断队满的条件为( )。 A.rear%n==front B.(front+l)%n==rear C.rear%n-1==front D.(rear+l)%n==front

5.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为 队头指针和队尾指针,则判断队空的条件为( )。 A.rear%n==front B.front+l=rear C.rear==front D.(rear+l)%n=front 6.已知一颗二叉树上有92个叶子结点,则它有____个度为2的结点。 ( ) A. 90 B. 91 C. 92 D. 93 7.在一棵非空二叉树的中序遍历序列中,根结点的右边_____。 A. 只有右子树上的所有结点 B. 只有右子树上的部分结点 C. 只有左子树上的所有结点 D. 只有左子树上的部分结点 8.有n条边的无向图的邻接表存储法中,链表中结点的个数是( )个。 A. n B. 2n C. n/2 D. n*n 9.判断有向图是否存在回路,除了可利用拓扑排序方法外,还可以利 用()。 A. 求关键路径的方法 B.求最短路径的方法 C. 深度优先遍历算法 D.广度优先遍历算法 10.对线性表进行二分查找时,要求线性表必须( )。 A.键值有序的顺序表 B.键值有序的链接表 C.链接表但键值不一定有序 D.顺序表但键值不一定有序

数据结构计算题及参考答案

数据结构计算题及参考答案 数据结构计算题及参考答案 数据结构是计算机科学中的重要概念,它用于组织和管理数据。在计算机科学 的学习过程中,我们经常会遇到一些与数据结构相关的计算题。这些题目旨在 帮助我们加深对数据结构的理解,并提高我们的编程能力。在本文中,我将为 大家提供一些常见的数据结构计算题及其参考答案。 1. 栈的应用题 栈是一种具有后进先出(Last In First Out)特性的数据结构。下面是一个栈的 应用题: 题目:使用栈判断一个字符串中的括号是否匹配。 解答:我们可以遍历字符串中的每个字符,如果遇到左括号,则将其入栈;如 果遇到右括号,则判断栈顶元素是否为对应的左括号,如果是,则将栈顶元素 出栈,继续遍历下一个字符;如果不是,则说明括号不匹配。最后,如果栈为空,则说明字符串中的括号全部匹配,否则不匹配。 2. 队列的应用题 队列是一种具有先进先出(First In First Out)特性的数据结构。下面是一个队 列的应用题: 题目:使用队列模拟击鼓传花游戏。 解答:我们可以使用队列来模拟击鼓传花游戏。首先,将所有参与游戏的人依 次加入队列。然后,从队列中取出第一个人,并将其加入队尾。重复这个过程,直到传花的次数达到指定的次数。最后,队列中的最后一个人即为被淘汰的人。 3. 链表的应用题

链表是一种常见的动态数据结构,它可以在运行时动态分配内存。下面是一个链表的应用题: 题目:反转链表。 解答:我们可以使用迭代或递归的方式来反转链表。迭代的方法是从链表头开始,依次将每个节点的指针方向反转。递归的方法是先反转链表的子链表,然后将当前节点的指针指向前一个节点。最后,将链表的头节点指向反转后的链表的头节点。 4. 树的应用题 树是一种非常重要的数据结构,它具有层次结构和分支结构。下面是一个树的应用题: 题目:计算二叉树的深度。 解答:我们可以使用递归的方式来计算二叉树的深度。对于一个二叉树,它的深度等于左子树的深度和右子树的深度中的较大值加1。递归的终止条件是当节点为空时,返回0。 通过以上的计算题,我们可以更好地理解和应用数据结构。数据结构不仅仅是一种抽象的概念,它在实际编程中起到了至关重要的作用。通过解决这些计算题,我们可以提高我们的编程能力,培养我们的逻辑思维能力,并加深对数据结构的理解。 总结起来,数据结构计算题是一种锻炼编程能力和加深对数据结构理解的有效方式。通过解决栈、队列、链表和树等不同类型的计算题,我们可以更好地掌握数据结构的应用和实现。希望本文提供的计算题及其参考答案能够对大家在学习数据结构的过程中有所帮助。

数据结构应用题

北京语言大学网络教育学院 《数据结构》 【应用题】( 1、已知序列(12,4,17,10,7,30),用直接选择排序法对其进行递增排序,写出每一趟的排序结果。答:第1趟:4 12 17 10 7 30 第2趟:4 7 17 10 12 30 第3趟:4 7 10 17 12 30 第4趟:4 7 10 12 17 30 第5趟:4 7 10 12 17 30 2、单链表结点的类型定义如下: typedef struct LNode { int data; struct LNode *next; } LNode, *Linklist; 写一算法,将带头结点的有序单链表A和B合并成一新的有序表C。 (注:不破坏A和B的原有结构) 答:Merge(Linklist A, Linklist B, Linklist &C ) void Merge(Linklist A, Linklist B, Linklist &C) { C=(Linklist)malloc(sizeof(LNode)); pa=A->next; pb=B->next; pc=C; while(pa&&pb) { pc->next=(Linklist)malloc(sizeof(LNode)); pc=pc->next; if(pa->data<=pb->data) { pc->data=pa->data; pa=pa->next;} else { pc->data=pb->data; pb=pb->next;} } if(!pa) pa=pb; while(pa) { pc->next=(Linklist)malloc(sizeof(LNode)); pc=pc->next; pc->data=pa->data; pa=pa->next; } pc->next=NULL; } 3、已知一棵非空二叉树,其按中序和后序遍历的结果分别为: 中序:CGBAHEDJFI 后序:GBCHEJIFDA 请画出这棵二叉树,并写出其前序遍历的结果。 答:前序遍历结果:ACBGDEHFJI 4、已知字符:C1,C2,C3,C4,C5,C6的权分别为:17,5,16,4,8,11,请构造相应的赫夫曼树,并

数据结构应用题练习

数据结构应用题练习 一、简介 数据结构是计算机科学中的重要概念,是指数据组织、管理和存储的方式。它是计算机处理和分析数据的基础,在各个领域都有广泛的应用。本文将通过几个数据结构应用题的练习,展示数据结构在实际问题中的应用。 二、链表应用题 链表是一种常见的数据结构,在许多场景中都有广泛的应用。假设有一组学生的信息,包括学生姓名、年龄和成绩,请使用链表来存储并实现以下操作: 1. 添加学生信息 2. 删除学生信息 3. 查找学生信息 4. 修改学生信息 三、栈应用题 栈是一种后进先出(LIFO)的数据结构,在很多应用中都有不可或缺的地位。以网页浏览器的前进和后退功能为例,使用栈可以很方便地实现该功能。请描述如何使用栈来实现浏览器的前进和后退功能,并分析算法的时间复杂度。

四、队列应用题 队列是一种先进先出(FIFO)的数据结构,常用于处理排队等场景。现假设有一个任务队列,多个任务需要按照顺序执行。请使用队列来 存储任务,并实现以下操作: 1. 添加任务到队列 2. 从队列中取出并执行任务 3. 判断队列是否为空 4. 清空队列中的所有任务 五、树应用题 树是一种重要的非线性数据结构,在很多领域都有广泛应用。假设 有一组学生的信息,包括学生姓名、年龄和成绩,请使用树来存储这 些信息,并实现以下操作: 1. 添加学生信息到树中 2. 从树中查找指定学生的信息 3. 删除指定学生的信息 4. 获取树中所有学生的平均成绩 六、图应用题

图是一种用于描述事物之间关系的数据结构,在网络分析、路径规划等领域有广泛应用。假设有一张地图,其中包含若干城市和连接它们的道路,请使用图来存储地图信息,并实现以下操作: 1. 添加城市和道路到图中 2. 查找两个城市之间的最短路径 3. 删除某个城市及其相关的道路 4. 统计图中有多少个孤立的城市 七、哈希表应用题 哈希表是一种通过散列函数实现高效存储和查找的数据结构,在很多场景中都有广泛应用。假设有一组学生的信息,包括学生姓名、年龄和成绩,请使用哈希表来存储这些信息,并实现以下操作: 1. 添加学生信息到哈希表中 2. 从哈希表中查找指定学生的信息 3. 删除指定学生的信息 4. 统计哈希表中学生信息的个数 八、总结 以上是几个常见的数据结构应用题的练习,通过这些练习可以更深入地理解数据结构的应用和算法的设计。数据结构是计算机科学中非常重要的一个领域,其应用广泛且多样化。在实际问题中,合理选择

《数据结构》应用题参考习题

《数据结构》应用题参考习题数据结构是计算机科学中的一门基础课程,它主要研究数据的组织、存储和管理方式,以及不同数据结构对算法执行效率的影响。在实际 应用中,数据结构起到了至关重要的作用。本文将介绍一些《数据结构》的应用题,并给出相应的参考习题。 一、栈的应用题 1. 符号匹配问题 问题描述:给定一个字符串,在其中包含了一些圆括号"()"、方括号"[]"和花括号"{}",判断字符中的括号是否匹配。 例题:判断字符串"{[()]()}"是否匹配。 解题思路:利用栈的先进后出特点,遍历字符串中的每个字符。如 果是左括号,则入栈;如果是右括号,则判断栈顶元素是否与之匹配。 参考习题:编写一个程序,实现括号匹配的功能,并输出匹配结果。 二、队列的应用题 1. 循环队列的应用 问题描述:设计一个循环队列,实现入队、出队等基本操作。 解题思路:利用数组实现循环队列,需要设置一个队头指针front 和一个队尾指针rear。入队操作时,将元素添加到rear位置;出队操作时,返回front位置元素,并将front后移。

参考习题:实现一个循环队列,并进行相关操作的测试。 三、链表的应用题 1. 单链表反转 问题描述:给定一个单链表,将其反转。 例题:将链表1->2->3->4->5反转为5->4->3->2->1。 解题思路:利用三个指针prev、cur和next,依次遍历链表,并修 改指针指向实现链表的反转。 参考习题:编写一个程序,实现单链表反转,并输出反转后的链表。 四、树的应用题 1. 二叉树的遍历 问题描述:给定一个二叉树,实现它的前序遍历、中序遍历和后序 遍历。 解题思路:分别使用递归和迭代的方式实现二叉树的前序遍历、中 序遍历和后序遍历。 参考习题:编写一个程序,实现二叉树的前序遍历、中序遍历和后 序遍历,并输出遍历结果。 五、图的应用题 1. 图的最短路径

数据结构练习题

第1章绪论 一、选择题 1. 算法的计算量的大小称为计算的()。 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于() A.问题的规模 B. 待处理数据的初态 C. A和B 3. 下面说法错误的是() (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3) 4. 以下数据结构中,哪一个是线性结构() A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 5. 在下面的程序段中,对x的赋值语句的频度为() for (int i=1; i<=n; i++) for (int j=1; i<=n;j++) x+=1; A.2n B.n C.n2D.log2n 二、判断题 1. 数据元素是数据的最小单位。( ) 2. 算法的优劣与算法描述语言无关,但与所用计算机有关。( ) 3. 数据的物理结构是指数据在计算机内的实际存储形式。( ) 4. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( ) 5. 数据结构的抽象操作的定义与具体实现有关。( ) 三、填空 1.数据的物理结构包括的表示和的表示 2. 数据结构中的逻辑结构有(1),(2),(3),__(4)_四种。 3. 一个数据结构在计算机中称为存储结构 4. 数据结构中评价算法的两个重要指标是 5. 一个算法具有5个特性: (1)、(2)、(3),有零个或多个输入、有一个或多个输出。 6. 已知如下程序段, 语句1执行的频度为(1);语句2执行的频度为(2); for (int i=n; i>=1; i--) { x = x+1; //语句1 for (int j = n; j>=1; j--) y = y+1; //语句2 } 7. 下面程序段中带下划线的语句的执行次数的渐进时间复杂度为 int i=1; while (i

数据结构自学考试辅导--应用题

数据结构自学考试辅导--应用题 数据结构自学考试练习题----应用题 1.简述顺序表和链表存储方式的特点。 解:顺序表的优点是可以随机访问数据元素;缺点是大小固定,不利于增减结点(增减操作需要移动元素)。链表的优点是采用指针方式增减结点,非常方便(只需要改变指针指向,不移动结点)。其缺点是不能进行随机访问,只能顺序访问;另外,每个结点上增加指针域,造成额外存储空间增大。 2.在单链表和双向链表中,能否从任意结点出发访问到其他任何一个结点? 在单链表中不能从任意结点(若结点不是第一结点)出发访问到任何一个结点,链表只能从头指针开始,访问到链表中每个结点。在双链表中求前驱和后继都容易,从任何一个结点向前到第一结点,向后到最后结点,可以访问到任何一个结点。 3.线性表有两种存储结构:一是顺序表,二是链表。试问: (1)如果有 n个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。在此情况下,应选用哪种存储结构?为什么? (2)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么应采用哪种存储结构?为什么? (1)选链式存储结构。它可动态申请内存空间,不受表长度(即表中元素个数)的影响,插入、删除时间复杂度为O(1)。 (2)选顺序存储结构。顺序表可以随机存取,时间复杂度为O (1)。 4.线性表的存储结构分成顺序存储结构(顺序表)和链式存储结构(单链表)。请用类C语言描述这两种结构。 顺序表类型定义: const maxsize=顺序表的容量

typedef struct { datatype data[maxsize]; int last; }sqlist; Sqlist L; 单链表类型定义: typedef struct node *pointer; struct node {datatype data; Pointer next; }; typedef pointer lklist; 5.线性表的顺序存储结构具有三个弱点:其一,在作插入或删除操作时,需移动大量元素;其二,由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;其三,表的容量难以扩充。线性表的链式存储结构是否一定都能够克服上述三个弱点,试讨论之。 链式存储结构一般说克服了顺序存储结构的三个弱点。首先,插入、删除不需移动元素,只修改指针,时间复杂度为O(1);其次,不需要预先分配空间,可根据需要动态申请空间;其三,表容量只受可用内存空间的限制。其缺点是因为指针增加了空间开销,当空间不允许时,就不能克服顺序存储的缺点。6.若频繁地对一个线性表进行插入和删除操作,则该线性表宜采用何种存储结构,为什么? 解:宜采用链式存储结构。因为采用链式结构存储线性表,插入和删除操作需要从头指针起查找插入、删除结点的前驱结点,并修改这些结点的指针域,查找过程需平均移动指针域为表长的一半;而采用顺序结构存储线性表,插入和删除操作需要平均移动表中的一半元素。移动指针域操作比移动元素操作花费的时间少得多。 7.对链表设置头结点的作用是什么?(至少说出两条好处) 解其好处有:

数据结构应用题整理

1、二叉树前序 中序遍历(序列与图的相互转化) 例题1: 中序序列BDCEAFHG 前序序列ABCDEFGH 例题2 前序序列:ABCDEFGHIJKLMPQRNO (参考:后序序列: BDEFCAIJKHGQRPMNOL 中序序列:BDEFCAIJKHGPQRMNOL 2、哈夫曼树 例题 1: 7,19,2,6,32,3,21,10 其对应字母分别为 a,b,c,e,f,g,h A G B L H C M I D N P J E Q K F R

哈夫曼编码: a : 0010 b: 10 c:00000 d: 0001 e:01 f: 00001 g:11 h:0011 例题2:w={5, 29, 7, 8, 14, 23, 3, 11} <]>❽碱® ❸❸❼❽ 例题3 例如,设一组电文的字符集D及其概率分布W为:D={a,b,c,d , e} , W={0.12 ,0.40,0.15 , 0.08,0.25},用哈夫曼算法构造哈夫曼树及其对应的编码如下图所示。 3、最小生成树

(e) 4、邻接矩阵(图 <-> 邻接矩阵 <-> 遍历序列(深度、宽度遍历)) 園晞雜矩阵示例 If' 吐 0 111 <0100 A 仁 10 10 A2= 10 10 O 1 1 Q 1 110 0 10 10 Lo 1 0 0- o tt&7无空至塑1暨遵報接怖 Kruskal^法构琲最小杀膻树的过程 (& (0) •-49 •七 ■T 9此取B. F T :B C ■ 算法 Prim E 卜-i —-^1 10 :E j —・j ・u ID

当采用劇接表存睹结构井且甘鰭结构匕确定的情况下,遍历的结果将是确定的. DFS 宇列:Co -> c1 -> -> c4 c5 -> 5、二分法检索又称为折半查找,采用二分法检索可以大大提高查找效率,它要求线性表结点按其关键字从小到大(或从大到小)按序排列并采用顺序存储结构。 采用二分搜索时,先求位于搜索区间正中的对象的下标mid,用其关键码与给定值x比 较: ? ? ? I[mid]. Key = x ,搜索成功; l[mid]. Key > x,把搜索区间缩小到表的前半部分,再继续进行对分搜索; l[mid]. Key < x,把搜索区间缩小到表的后半部分,再继续讲行对分搜索。 每比较一次,搜索区间缩小一半。如果搜索区间已缩小到一个对象,仍未找到想要 搜索的对象,则搜索失败。 例题1: 有一组有序的线性表如下: (10, 14,20,32,45,50,68, 90,100,120) 下面分析在其中二分检索关键字20的过程。 下标;0123456739 1014203245506890100120 low=2 mid=2 hlgh=3 第3灰比亂检索成■咖逋甸拉置N F面分析二分检索关键字95的过程: 下轨0123^56789 1014203245506890100120 hlghi=7 lovr=3 此略hiqzi晞即臺找区司为空,说明检叢知赂迸宵检宋知刘卑息° F面给出二分检索法的非递归与递归实现算法,算法中使用seqlist.h 中定义的顺序查找

数据结构应用题练习

1、假设一棵二叉树的层序序列是ABCDEFGHIJ 和中序序列是DBGEHJACIF,请画出该树。 21、有一个完全二叉树按层次顺序存放在一维数组中,如下所示: 请指出结点P 的父结点,左子女,右子女。 3、给出下列二叉树的先序序列。 4、已知二叉树的先序遍历序列为ABCDEFGH ,中序遍历序列为CBEDFAGH ,画出二叉树。 答案:二叉树形态 A F H G D E C B (2)设一棵二叉树的先序序列: A B D F C E G H ,中序序列: B F D A G E H C ①画出这棵二叉树。 ②画出这棵二叉树的后序线索树。 ③将这棵二叉树转换成对应的树(或森林)。 A B F D ( C E H G

(1) (2) 1、已知一棵二叉树的前序序列为:A,B,D,G,J,E,H,C,F,I,K,L中序序列:D,J,G,B,E,H, A,C,K,I,L,F。 i.写出该二叉树的后序序列; ii.画出该二叉树; iii.求该二叉树的高度(假定空树的高度为-1)和度为2、度为1、及度为0的结点个数。 该二叉树的后序序列为:J,G,D,H,E,B,K,L,I,F,C,A。 该二叉树的形式如图所示: 该二叉树高度为:5。 度为2的结点的个数为:3。 度为1的结点的个数为:5。 度为0的结点个数为:4。 5、试用权集合{12,4,5,6,1,2}构造哈夫曼树,并计算哈夫曼树的带权路径长度。 答案:

2 1 5 6 1118 73 4 12 30 WPL=12*1+(4+5+6)*3+(1+2)*4=12+45+12=69 6、已知权值集合为{5,7,2,3,6,9},要求给出哈夫曼树,并计算带权路径长度WPL 。 答案:(1)树形态: 3 2 5 5 1019 9 7 6 13 32 (2)带权 路 径 长 度 : WPL=(6+7+9)*2+5*3+(2+3)*4=44+15+20=79 (3) 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。 ① 试为这8个字母设计赫夫曼编码。 ② 试设计另一种由二进制表示的等长编码方案。 ③ 对于上述实例,比较两种方案的优缺点。 解:方案1;哈夫曼编码 先将概率放大100倍,以方便构造哈夫曼树。 w={7,19,2,6,32,3,21,10},按哈夫曼规则:【[(2,3),6], (7,10)】, ……19, 21, 32 (100) (40) (60) 19 21 32 (28) () (11) 7 10 6 (5)

(完整版)数据结构练习题及参考答案

数据结构练习题 第一部分绪论 一、单选题 1. 一个数组元素a[i]与________的表示等价。 A、 *(a+i) B、 a+i C、 *a+i D、 &a+i 2. 对于两个函数,若函数名相同,但只是____________不同则不是重载函数。 A、参数类型 B、参数个数 C、函数类型 3. 若需要利用形参直接访问实参,则应把形参变量说明为________参数 A、指针 B、引用 C、值 4. 下面程序段的时间复杂度为____________。 for(int i=0; i

《数据结构》应用题参考习题

一.《树》应用题 1. 已知一棵树边的集合为{},请画出这棵树,并回答下列问题: (1)哪个是根结点? (2)哪些是叶子结点? (3)哪个是结点g的双亲? (4)哪些是结点g的祖先? (5)哪些是结点g的孩子? (6)哪些是结点e的孩子? (7)哪些是结点e的兄弟?哪些是结点f的兄弟? (8)结点b和n的层次号分别是什么? (9)树的深度是多少? (10)以结点c为根的子树深度是多少? 2. 一棵度为2的树与一棵二叉树有何区别。 3. 试分别画出具有3个结点的树和二叉树的所有不同形态? 4. 已知用一维数组存放的一棵完全二叉树:ABCDEFGHIJKL,写出该二叉树的先序、中序和后序遍历序列。

5. 一棵深度为H的满m叉树有如下性质:第H层上的结点都是叶子结点,其余各层上每个结点都有m棵非空子树,如果按层次自上至下,从左到右顺序从1开始对全部结点编号,回答下列问题: (1)各层的结点数目是多少? (2)编号为n的结点的父结点如果存在,编号是多少? (3)编号为n的结点的第i个孩子结点如果存在,编号是多少? (4)编号为n的结点有右兄弟的条件是什么?其右兄弟的编号是多少? 6. 找出所有满足下列条件的二叉树: (1)它们在先序遍历和中序遍历时,得到的遍历序列相同; (2)它们在后序遍历和中序遍历时,得到的遍历序列相同; (3)它们在先序遍历和后序遍历时,得到的遍历序列相同; 7. 假设一棵二叉树的先序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK,请写出该二叉树的后序遍历序列。 8. 假设一棵二叉树的后序序列为DCEGBFHKJIA,中序序列为DCBGEAHFIJK,请写出该二叉树的后序遍历序列。 9. 给出如图1所示的森林的先根、后根遍历结点序列,然后画出该森林对应的二叉树。 10.给定一组权值(5,9,11,2,7,16),试设计相应的哈夫曼树。

数据结构应用题

、应用题(共30分,每题6分) 1.已知一棵度为k的树中有n1个度为1的结点,n2个度为2的结点,…,n k个度为k 的结点,问该树有多少个叶子结点?(6分) 2.对于下面两个图,求出: (1)无向图中每个顶点的度,有向图中每个顶点的入度,出度和度。 (2)是否是连通图/强连通图,如果不是,画出连通分量/强连通分量。(6分) 4 0 3 1 2 0 1 2 4 3

3.分别画出在线性表(a, b, c, d, e, f, g)中进行折半查找,以查关键字等于e、f 和g的过程。(6分) 4.已知一组元素的关键字{46,74,16,53,14,26,40,38,86,65,27,34},利用直接插入 排序法,写出每次向前面的有序表插入一个元素后的排列结果。(6分) 5、将下图转换为二叉树,对转换后的二叉树进行先序、中序、后序遍历序列。(6分) A B C D

五、程序题(20分) 1.将下面算法填完整。(10分,每空2分) int Search_Bin(SSTable ST, KeyType key){ //在有序表ST中折半查找其关键字等于key的数据元素,若找到,则返回该元素//在表中的位置,否则返回0 low=1;high=ST.length; while(low<=high){ mid=____________; if(EQ(key, ST.elem[mid].key)) return ____________; else if(LT(key, ST.elem[mid].key)) high=____________; else low=____________; } return ____________; } 2.将下面算法填完整。(10分,每空2分) void InsertSort(SqList &L){ //对顺序表L作直接插入排序 for(i=2;i<=L.length;++i) if(LT(L.r[i].key, L.r[i-1].key)){

(完整版)数据结构练习题及参考答案

数据结构练习题 第一部分 绪 论 一、单选题 1. 一个数组元素 a[i] 与 __________ 的表示等价。 A 、 *(a+i) B 、 a+i C 、 *a+i D 、 &a+i 2. 对于两个函数,若函数名相同,但只是 _______________ 不同则不是重载函数。 A 、 参数类型 B 、 参数个数 C 、 函数类型 3. 若需要利用形参直接访问实参,则应把形参变量说明为 _____________ 参数 A 、 指针 B 、 引用 C 、 值 4. 下面程序段的时间复杂度为 ______________ 。 for(int i=0; i

数据结构练习

一、选择题 1.广度优先遍历的含义是:从图中某个顶点v出发,在访问了v之后依次访问v的各个未被访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,且“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。是下图的广度优先遍历序列。 A. 1 2 6 3 4 5 B. 1 2 3 4 5 6 C. 1 6 5 2 3 4 D. 1 6 4 5 2 3 2.对于长度为11的顺序存储的有序表,若采用折半查找(向下取整),则找到第5个元素需要与表中的个元素进行比较操作(包括与第5个元素的比较)。 A. 5 B. 4 C. 3 D. 2 3.结点数目为n 的二叉查找树(二叉排序树)的最小高度为( 1 )、最大高度为( 2 )。 (1)A. n B. C. [log2n] D. [log2(n+1)] (2)A. n B. C. [log2n] D. [log2(n+1)] 4.堆排序是一种基于__(1)__ 的排序方法,__(2)__ 不是堆。 (1)A. 计数 B. 插入 C. 选择D. 归并 (2) A.15,28,25,56,68,63,30 B.15,28,25,30,68,63,56 C.68,28,63,25,15,56,30 D.68,56,39,63,28,25,15 5.下面关于串的叙述中,哪一个是不正确的?() A.串是字符的有限序列B.空串是由空格构成的串 C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储 6.设无向图的顶点个数为n,则该图最多有()条边。 A.n-1 B.n(n-1)/2 C.n(n+1)/2 D.0 7.以下数据结构中,()是非线性数据结构。 A.树B.字符串C.队列D.栈 8.下面关于线性表的叙述中,错误的是哪一个?() A.线性表采用顺序存储,必须占用一片连续的存储单元。 B.线性表采用顺序存储,便于进行插入和删除操作。 C.线性表采用链接存储,不必占用一片连续的存储单元。 D.线性表采用链接存储,便于插入和删除操作。 9.假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为()。 A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%m D.(rear-front)%m 10.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是()。 A.p->next=s; s->next=p->next; B.s->next=p->next; p->next=s; C.p->next=s; p->next=s->next; D.p->next=s->next; p->next=s;

数据结构应用题

一、应用题 1. 已知关键字序列为:(74,33,52,41,13,88,66,59)哈希表长为9,哈希函数为:H (k)=k %9,解决冲突用线性补偿探测法 (取Q=5),试构造哈希表,并求出等概率下查找成功的平均查找长度。 【答案】 (1)哈希表: 0 1 2 3 4 5 6 7 8 59 74 88 13 41 33 52 66 2 1 2 1 1 1 1 2 (2) ASL=(5*1+3*2)/8=11/8 2. 已知一个AOV 网如图所示。 (1)试画出它的邻接链表。(顶点号递减出现在各邻接表中) (2)试写出按照拓扑排序算法得到的拓扑序列。 V 6 V 1 V 2 V 4 V 5 V 3 【答案】 (1) 1 v 1 0 6 v 6 1 5 v 5 3 3 V 3 2 4 v 4 0 2 v 2 2 ∧ 6 5 3 ∧ 5 ∧ 5 ∧ 2 ∧ 3 2 ∧ (2)v 4,v 6,v 1,v 3,v 5,v 2 3. 已知线性表的存储结构为顺序表,阅读下列 算法,并回答问题: (1)设线性表L=(21,-7,-8,19,0,-11, 34,30,-10),写出执行f30(&L)后的L 状态; (2)简述算法f30的功能。 void f30 (SeqList *L) { int i,j; for (i=j=0;ilength; i++) if(L->data[i]>=0){ if(i!=j)L->data[j]=L->data[i]; j++; } L->length=j; } 【答案】 (1)L=(21,19,0,34,30) (2) 删除顺序表中小于0的数。 4. 已知关键字序列{34,26,47,12,63,41,22,59},利用堆排序的方法对其排序。 (1)写出在构成初始堆后关键字的排列情况。 (2)写出在堆排序的过程中输出前4个记录时,每次调整后关键字的排列情况。 【答案】 (1)初始堆:{12,26,22,34,63,41,47,59} (2)输出12后:{22,26,41,34,63,59,47} 输出22后:{26,34,41,47,63,59} 输出26后:{34,47,41,59,63} 输出34后:{41,47,63,59} 5. 请用克鲁斯卡尔算法构造下图所示网络的最小生成树。 14 v 1 v 4 v 5 v 2 v 3 V 6 10 8 18 22 12 10 16 19 20 【答案】 最小生成树如下图所示:

相关主题
相关文档
最新文档