数据结构简答题打印版

合集下载

数据结构考试题及答案

数据结构考试题及答案

数据结构考试题及答案一、选择题(每题2分,共20分)1. 以下哪个不是线性数据结构?A. 数组B. 链表C. 树D. 图2. 在一个单链表中,删除一个节点的操作需要知道该节点的:A. 地址B. 值C. 索引D. 前驱节点的引用3. 栈(Stack)是一种:A. 线性表B. 树状结构C. 图结构D. 散列表4. 哈希表解决冲突最常用的方法是:A. 排序B. 链地址法C. 再散列D. 除留余数法5. 以下哪个排序算法是稳定的?A. 快速排序B. 冒泡排序C. 选择排序D. 堆排序二、简答题(每题10分,共30分)1. 简述数组和链表的区别。

2. 解释二叉搜索树的基本概念及其优势。

3. 什么是递归?请给出一个简单的递归算法例子。

三、计算题(每题25分,共50分)1. 给定一个无序数组,请写出一个时间复杂度为O(n log n)的排序算法,并说明其工作原理。

2. 描述如何使用队列来实现一个简单的文本编辑器的撤销和重做功能。

四、编程题(共30分)编写一个函数,该函数接受一个整数数组作为参数,返回数组中所有元素的和。

如果数组为空,返回0。

答案一、选择题1. 答案:C(树和图都是非线性结构)2. 答案:D(需要前驱节点的引用来删除节点)3. 答案:A(栈是一种后进先出的特殊线性表)4. 答案:B(链地址法是解决哈希冲突的常用方法)5. 答案:B(冒泡排序是稳定的排序算法)二、简答题1. 数组和链表的区别:- 数组是连续的内存空间,链表是非连续的。

- 数组的索引访问速度快,链表需要遍历。

- 数组的大小固定,链表动态可变。

2. 二叉搜索树的基本概念及其优势:- 二叉搜索树是一种特殊的二叉树,左子树上所有节点的值小于它的根节点的值,右子树上所有节点的值大于它的根节点的值。

- 优势:支持快速的查找、插入和删除操作。

3. 递归是函数自己调用自己的过程。

例如,计算n的阶乘的递归算法: ```cint factorial(int n) {if (n <= 1) return 1;return n * factorial(n - 1);}```三、计算题1. 快速排序算法:- 选择一个元素作为“基准”(pivot)。

数据结构简答题

数据结构简答题

数据结构简答题引言概述:数据结构是计算机科学中的重要概念,它涉及到如何组织和存储数据,以便能够高效地使用和操作。

在这篇文章中,我们将回答一些关于数据结构的简答题,以帮助读者更好地理解这一概念。

一、数据结构的定义和作用1.1 数据结构的定义:数据结构是指一组数据元素及其之间的关系,它可以用来描述数据的逻辑结构和物理存储方式。

1.2 数据结构的作用:数据结构可以提供一种有效的组织和管理数据的方式,使得我们能够高效地进行数据的存储、检索和操作。

它是计算机科学中的基础,为算法设计和问题解决提供了重要的支持。

二、数据结构的分类和常见类型2.1 数据结构的分类:数据结构可以分为线性结构和非线性结构两大类。

2.1.1 线性结构:线性结构是指数据元素之间存在一对一的关系,如数组、链表和栈等。

2.1.2 非线性结构:非线性结构是指数据元素之间存在一对多或多对多的关系,如树和图等。

2.2 常见的线性结构:常见的线性结构包括数组、链表和栈。

2.2.1 数组:数组是一种连续存储数据元素的数据结构,它通过索引来访问元素,具有快速访问的特点。

2.2.2 链表:链表是一种通过指针将数据元素连接起来的数据结构,它可以动态地分配内存,具有灵活性和高效的插入和删除操作。

2.2.3 栈:栈是一种特殊的线性结构,它遵循后进先出(LIFO)的原则,只能在栈顶进行插入和删除操作,常用于函数调用和表达式求值等场景。

2.3 常见的非线性结构:常见的非线性结构包括树和图。

2.3.1 树:树是一种层次结构,由节点和边组成,它具有分支和层次的特点,常用于组织具有层次关系的数据。

2.3.2 图:图是一种由节点和边组成的网络结构,节点之间的关系可以是任意的,常用于描述复杂的关系和网络拓扑。

三、数据结构的时间复杂度和空间复杂度3.1 时间复杂度:时间复杂度是衡量算法执行时间随输入规模增长的增长率,常用大O表示法表示。

常见的时间复杂度有O(1)、O(logn)、O(n)、O(nlogn)和O(n^2)等。

数据结构简答题

数据结构简答题

数据结构简答题数据结构是计算机科学中的重要概念,它是指组织和存储数据的方式。

数据结构可以影响到程序的性能、效率和可扩展性。

在这篇文章中,我们将回答一些关于数据结构的简答题。

1. 什么是数据结构?数据结构是一种组织和存储数据的方式,它定义了数据的逻辑关系和操作。

它可以是线性的,如数组和链表,也可以是非线性的,如树和图。

2. 数据结构有哪些常见的分类?常见的数据结构分类包括线性数据结构和非线性数据结构。

线性数据结构包括数组、链表、栈和队列;非线性数据结构包括树和图。

3. 数组和链表有什么区别?数组是一种线性数据结构,它由一组连续的内存单元组成,可以通过索引访问元素。

链表也是一种线性数据结构,但它的元素在内存中可以是不连续的,每一个元素包含一个指向下一个元素的指针。

4. 栈和队列有什么区别?栈和队列都是线性数据结构,但它们的操作方式不同。

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

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

5. 什么是树?树是一种非线性数据结构,它由节点和边组成。

每一个节点可以有零个或者多个子节点,除了根节点外,每一个节点惟独一个父节点。

树的应用包括二叉搜索树、堆和哈夫曼树等。

6. 什么是图?图是一种非线性数据结构,它由节点和边组成。

每一个节点可以与其他节点通过边相连,边可以是有向的或者无向的。

图的应用包括社交网络、地图和网络拓扑等。

7. 什么是哈希表?哈希表是一种通过哈希函数将键映射到值的数据结构。

它可以实现快速的插入、删除和查找操作。

哈希表的实现基于数组和链表,通过将键映射到数组索引来加快查找速度。

8. 什么是排序算法?排序算法是一种将数据按照特定顺序罗列的算法。

常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序和归并排序等。

每种排序算法的时间复杂度和空间复杂度不同,选择合适的排序算法可以提高程序的性能。

9. 什么是查找算法?查找算法是一种在数据集中查找特定元素的算法。

数据结构简答题

数据结构简答题

数据结构简答题数据结构是计算机科学中重要的概念之一。

它定义了一种存储、组织和管理数据的方法,以使其能高效地被访问和操作。

在计算机编程和算法设计中,数据结构的选择对于程序的性能和可维护性至关重要。

下面将对数据结构的一些简答题进行回答。

1. 什么是数据结构?数据结构是一种组织和存储数据的方式,它定义了数据元素之间的关系和操作。

数据结构可以分为线性结构和非线性结构,线性结构中的数据元素之间只有一个前驱和一个后继,而非线性结构中的数据元素之间存在多个关联关系。

2. 数据结构的分类有哪些?数据结构按照逻辑结构可以分为线性结构和非线性结构;按照存储结构可以分为顺序存储结构和链式存储结构;按照数据操作的方式可以分为静态数据结构和动态数据结构。

3. 简述数组和链表的区别。

数组和链表都是线性数据结构,但它们在存储方式和操作上有很大的区别。

数组是一种连续存储结构,它的元素在内存中是按照一定的顺序排列的,可以通过下标直接访问元素。

链表是一种离散的存储结构,它的数据元素在内存中可以是不连续的,通过指针来表示元素之间的关系。

4. 什么是栈和队列?栈和队列是常用的数据结构。

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

插入操作叫做入栈,删除操作叫做出栈。

队列是一种先进先出(FIFO)的数据结构,允许在一端插入元素,在另一端删除元素,插入操作叫做入队,删除操作叫做出队。

5. 二叉树和图的区别是什么?二叉树和图都是非线性数据结构,但它们之间存在一些区别。

二叉树是每个节点最多有两个子节点的树结构,它有左子树和右子树之分。

图是由一组节点和连接节点的边组成的集合,图中的节点之间可以有多条边相连。

二叉树可以看成是一种特殊的图,它限制了节点之间的连接方式。

6. 简述哈希表的原理和应用。

哈希表是一种根据关键字直接访问存储位置的数据结构。

它通过一个哈希函数将关键字映射为存储位置,可以快速地插入、查找和删除元素。

数据结构简答题

数据结构简答题

数据结构简答题一、什么是数据结构?数据结构是计算机中组织和存储数据的方式,它涉及到数据元素之间的关系、数据元素的逻辑结构以及数据元素的物理存储结构。

数据结构可以帮助我们有效地组织和管理数据,使得数据的操作和处理更加高效和方便。

二、数据结构的分类有哪些?数据结构可以分为以下几类:1. 线性结构:线性结构中的数据元素之间存在一对一的关系,比如线性表、栈、队列等。

2. 非线性结构:非线性结构中的数据元素之间存在一对多或多对多的关系,比如树、图等。

3. 数组结构:数组结构是一种线性结构,它将相同类型的数据元素按一定的顺序排列在连续的存储空间中。

4. 链表结构:链表结构也是一种线性结构,它通过指针将数据元素链接在一起,可以分为单链表、双链表等。

5. 树结构:树结构是一种非线性结构,它由节点和边组成,每个节点可以有多个子节点。

6. 图结构:图结构也是一种非线性结构,它由节点和边组成,节点之间可以有多种关系。

三、什么是算法?算法是解决问题的一系列步骤或指令,它描述了如何通过有限的步骤来解决特定的问题。

算法是一种精确而又有序的计算过程,它可以用来处理数据、进行计算和执行特定的操作。

四、算法的特性有哪些?算法具有以下几个特性:1. 有穷性:算法必须在有限的步骤内结束,不能无限循环。

2. 确定性:算法的每个步骤必须明确而且无歧义,不会产生二义性。

3. 可行性:算法的每个步骤都必须可行,能够通过已知的基本操作实现。

4. 输入:算法必须有输入数据,可以是零个或多个。

5. 输出:算法必须有输出结果,可以是零个或多个。

6. 有零个或多个参数:算法可以接受零个或多个参数,用于控制算法的行为。

五、请简要描述栈和队列的特点和应用场景。

1. 栈(Stack):栈是一种先进后出(Last In First Out,LIFO)的数据结构。

栈的特点是只能在栈顶进行插入和删除操作,即最后插入的元素最先删除。

栈的应用场景包括函数调用、表达式求值、括号匹配等。

数据结构形考简答题.pdf

数据结构形考简答题.pdf

数据结构形考简答题.pdf数据结构形考简答题1.简述数据的逻辑结构和存储结构的区别与联系,它们如何影响算法的设计与实现答:若用结点表示某个数据元素,则结点与结点之间的逻辑关系就称为数据的逻辑结构。

数据在计算机中的存储表示称为数据的存储结构。

可见,数据的逻辑结构是反映数据之间的固有关系,而数据的存储结构是数据在计算机中的存储表示。

尽管因采用的存储结构不同,逻辑上相邻的结点,其物理地址未必相同,但可通过结点的内部信息,找到其相邻的结点,从而保留了逻辑结构的特点。

采用的存储结构不同,对数据的操作在灵活性,算法复杂度等方面差别较大。

2.解释顺序存储结构和链式存储结构的特点,并比较顺序存储结构和链式存储结构的优缺点。

答:顺序结构存储时,相邻数据元素的存放地址也相邻,即逻辑结构和存储结构是统一的,要求内存中存储单元的地址必须是连续的。

优点:一般情况下,存储密度大,存储空间利用率高。

缺点:(1)在做插入和删除操作时,需移动大量元素;(2)由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;(3)表的容量难以扩充。

链式结构存储时,相邻数据元素可随意存放,所占空间分为两部分,一部分存放结点值,另一部分存放表示结点间关系的指针。

优点:插入和删除元素时很方便,使用灵活。

缺点:存储密度小,存储空间利用率低。

1.栈、队列和线性表的区别是什么答:栈是一种先进后出的线性表,栈的插入和删除操作都只能在栈顶进行,而一般的线性表可以在线性表的任何位置进行插入和删除操作。

队列是一种先进先出的线性表,队列的插入只能在队尾进行,队列的删除只能在队头进行,而一般的线性表可以在线性表的任何位置进行插入和删除操作2.设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1,则栈S的容量至少应该是多少出队序列是e2,e4,e3,e6,e5,e1的过程:(1)e1入栈(栈底到栈顶元素是e1)(2)e2入栈(栈底到栈顶元素是e1,e2)(3)e2出栈(栈底到栈顶元素是e1)(4)e3入栈(栈底到栈顶元素是e1,e3)(5)e4入栈(栈底到栈顶元素是e1,e3,e4)(6)e4出栈(栈底到栈顶元素是e1,e3)(7)e3出栈(栈底到栈顶元素是e1)(8)e5入栈(栈底到栈顶元素是e1,e5)(9)e6入栈(栈底到栈顶元素是e1,e5,e6)(10)e6出栈(栈底到栈顶元素是e1,e5)(11)e5出栈(栈底到栈顶元素是e1)(12)e1出栈(栈底到栈顶元素是空)栈中最多时有3个元素,所以栈S的容量至少是3。

数据结构简答题

数据结构简答题

数据结构简答题1. 什么是数据结构?数据结构是一种组织和存储数据的方式,它定义了数据元素之间的关系、操作和存储方式。

数据结构可以帮助我们有效地组织和管理数据,使得数据的存储和访问更加高效和方便。

2. 数据结构的分类有哪些?数据结构可以分为以下几类:- 线性结构:线性结构中的数据元素之间存在一对一的关系,例如数组、链表和栈等。

- 非线性结构:非线性结构中的数据元素之间存在一对多或多对多的关系,例如树和图等。

- 静态结构:静态结构的大小和结构在编译时就确定,不可改变,例如数组。

- 动态结构:动态结构的大小和结构可以在运行时动态地改变,例如链表。

3. 什么是数据结构的时间复杂度和空间复杂度?时间复杂度是衡量算法执行时间的度量,表示算法执行所需要的时间资源。

通常用大O表示法来表示时间复杂度,例如O(1)、O(log n)、O(n)等。

空间复杂度是衡量算法执行所需要的存储空间的度量,表示算法执行所需要的额外空间资源。

同样使用大O表示法来表示空间复杂度,例如O(1)、O(log n)、O(n)等。

4. 什么是数组?数组是一种线性数据结构,它由一组相同类型的元素组成,这些元素在内存中是连续存储的。

数组可以通过索引来访问和修改元素,索引从0开始。

5. 数组的优缺点是什么?数组的优点包括:- 随机访问:可以通过索引快速访问和修改元素。

- 内存连续:元素在内存中连续存储,可以利用CPU缓存提高访问效率。

- 简单易用:数组的操作相对简单,容易理解和实现。

数组的缺点包括:- 大小固定:数组的大小在创建时就确定,无法动态改变。

- 插入和删除效率低:插入和删除元素时,需要移动其他元素,效率较低。

- 内存浪费:如果数组分配了较大的空间但只使用了一部分,会造成内存浪费。

6. 什么是链表?链表是一种线性数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。

链表中的节点在内存中可以是不连续存储的,通过指针将它们连接起来。

数据结构简答题

数据结构简答题

数据结构简答题引言概述:数据结构是计算机科学中的重要概念,用于组织和存储数据以便有效地访问和操作。

在计算机科学课程中,经常会遇到关于数据结构的简答题,考察学生对数据结构基本概念的理解。

本文将介绍一些常见的数据结构简答题,并提供详细的解答。

一、数组1.1 什么是数组?数组是一种数据结构,用于存储相同类型的数据元素。

数组中的元素通过索引访问,索引通常从0开始计数。

1.2 数组的优点是什么?- 数组具有快速的随机访问能力,可以通过索引快速定位元素。

- 数组在内存中是连续存储的,访问效率高。

- 数组支持快速的元素插入和删除操作。

1.3 数组的缺点是什么?- 数组的大小通常是固定的,无法动态调整。

- 插入和删除元素时需要移动其他元素,效率较低。

- 数组只能存储相同类型的数据,不适用于存储不同类型数据。

二、链表2.1 什么是链表?链表是一种线性数据结构,由节点组成,每个节点包含数据和指向下一个节点的指针。

链表中的节点可以动态分配内存,大小可动态调整。

2.2 链表的优点是什么?- 链表的大小可以动态调整,插入和删除元素效率高。

- 链表不需要连续的内存空间,更灵活。

- 链表支持快速的插入和删除操作,不需要移动其他元素。

2.3 链表的缺点是什么?- 链表需要额外的指针存储节点间的连接关系,占用额外空间。

- 链表的随机访问效率较低,需要从头节点开始逐个访问。

- 链表的操作需要更多的指针操作,可能引起指针丢失或内存泄漏。

三、栈3.1 什么是栈?栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。

栈常用于实现函数调用、表达式求值等场景。

3.2 栈的优点是什么?- 栈的插入和删除操作只在栈顶进行,操作简单高效。

- 栈支持递归调用,用于实现函数调用和内存管理。

- 栈可以有效地解决一些问题,如括号匹配、表达式求值等。

3.3 栈的缺点是什么?- 栈的大小通常是固定的,可能会发生栈溢出。

- 栈只能在栈顶进行操作,限制了数据的访问方式。

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

数据结构简答题1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

解:数据是对客观事物的符号表示。

在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。

数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

数据对象是性质相同的数据元素的集合,是数据的一个子集。

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

存储结构是数据结构在计算机中的表示。

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。

是对一般数据类型的扩展。

1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。

解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。

一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。

抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。

在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。

1.7 在程序设计中,可采用下列三种方法实现输出和输入:(1) 通过scanf和printf语句;(2) 通过函数的参数显式传递;(3) 通过全局变量隐式传递。

试讨论这三种方法的优缺点。

解:(1)用scanf和printf直接进行输入输出的好处是形象、直观,但缺点是需要对其进行格式控制,较为烦琐,如果出现错误,则会引起整个系统的崩溃。

(2)通过函数的参数传递进行输入输出,便于实现信息的隐蔽,减少出错的可能。

(3)通过全局变量的隐式传递进行输入输出最为方便,只需修改变量的值即可,但过多的全局变量使程序的维护较为困难。

2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。

解:头指针是指向链表中第一个结点的指针。

首元结点是指链表中存储第一个数据元素的结点。

头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的操作。

它可以对空表、非空表以及首元结点的操作进行统一处理。

2.2 填空题。

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

(2) 顺序表中逻辑上相邻的元素的物理位置必定紧邻。

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

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

(4) 在单链表中设置头结点的作用是插入和删除首元结点时不用进行特殊处理。

2.3 在什么情况下用顺序表比链表好?解:当线性表的数据元素在物理位置上是连续存储的时候,用顺序表比用链表好,其特点是可以进行随机存取。

3.2 简述栈和线性表的差别。

解:线性表是具有相同特性的数据元素的一个有限序列。

栈是限定仅在表尾进行插入或删除操作的线性表。

3.11 简述队列和堆栈这两种数据类型的相同点和差异处。

解:栈是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。

队列也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。

4.1 解:空格串是指一个或多个空格字符(ASCII码为20H)组成的串,而空串中没有任何字符。

4.2 解:串赋值(StrAssign)、串比较(StrCompare)、求串长(StrLength)、串连接(Concat)、求子串(SubString)这五种基本操作构成串类型的最小操作子集。

6.2 一棵度为2的树与一棵二叉树有何区别?解:二叉树是颗有序树,但度为2的树则未必有序。

三、简答题1. 描述以下三个概念的区别:头指针,头结点,表头结点。

1.头指针是指向链表中第一个结点(即表头结点)的指针;在表头结点之前附设的结点称为头结点;表头结点为链表中存储线性表中第一个数据元素的结点。

若链表中附设头结点,则不管线性表是否为空表,头指针均不为空,否则表示空表的链表的头指针为空。

2. 线性表的两种存储结构各有哪些优缺点?2.线性表具有两种存储结构即顺序存储结构和链接存储结构。

线性表的顺序存储结构可以直接存取数据元素,方便灵活、效率高,但插入、删除操作时将会引起元素的大量移动,因而降低效率:而在链接存储结构中内存采用动态分配,利用率高,但需增设指示结点之间关系的指针域,存取数据元素不如顺序存储方便,但结点的插入、删除操作较简单。

3. 对于线性表的两种存储结构,如果有n个线性表同时并存,而且在处理过程中各表的长度会动态发生变化,线性表的总数也会自动改变,在此情况下,应选用哪一种存储结构?为什么?3.应选用链接存储结构,因为链式存储结构是用一组任意的存储单元依次存储线性表中的各元素,这里存储单元可以是连续的,也可以是不连续的:这种存储结构对于元素的删除或插入运算是不需要移动元素的,只需修改指针即可,所以很容易实现表的容量的扩充。

4. 对于线性表的两种存储结构,若线性表的总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素,应选用何种存储结构?试说明理由。

4.应选用顺序存储结构,因为每个数据元素的存储位置和线性表的起始位置相差一个和数据元素在线性表中的序号成正比的常数。

因此,只要确定了其起始位置,线性表中的任一个数据元素都可随机存取,因此,线性表的顺序存储结构是一种随机存取的存储结构,而链表则是一种顺序存取的存储结构。

5. 在单循环链表中设置尾指针比设置头指针好吗?为什么?5.设尾指针比设头指针好。

尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear->next->next 和rear, 查找时间都是O(1)。

若用头指针来表示该链表,则查找终端结点的时间为O(n)。

6. 假定有四个元素A, B, C, D依次进栈,进栈过程中允许出栈,试写出所有可能的出栈序列。

6.共有14种可能的出栈序列,即为:ABCD, ABDC,ACBD, ACDB,BACD,ADCB,BADC,BCAD, BCDA,BDCA,CBAD, CBDA,CDBA, DCBA7. 什么是队列的上溢现象?一般有几种解决方法,试简述之。

7.在队列的顺序存储结构中,设队头指针为front,队尾指针为rear,队列的容量(即存储的空间大小)为maxnum。

当有元素要加入队列(即入队)时,若rear=maxnum,则会发生队列的上溢现象,此时就不能将该元素加入队列。

对于队列,还有一种“假溢出”现象,队列中尚余有足够的空间,但元素却不能入队,一般是由于队列的存储结构或操作方式的选择不当所致,可以用循环队列解决。

一般地,要解决队列的上溢现象可有以下几种方法:(1)可建立一个足够大的存储空间以避免溢出,但这样做往往会造成空间使用率低,浪费存储空间。

(2)要避免出现“假溢出”现象可用以下方法解决:第一种:采用移动元素的方法。

每当有一个新元素入队,就将队列中已有的元素向队头移动一个位置,假定空余空间足够。

第二种:每当删去一个队头元素,则可依次移动队列中的元素总是使front指针指向队列中的第一个位置。

第三种:采用循环队列方式。

将队头、队尾看作是一个首尾相接的循环队列,即用循环数组实现,此时队首仍在队尾之前,作插入和删除运算时仍遵循“先进先出”的原则。

8. 下述算法的功能是什么?LinkList *Demo(LinkList *L){ // L是无头结点的单链表LinkList *q,*p;if(L&&L->next){ q=L; L=L->next; p=L;while (p->next)p=p->next;p->next=q; q->next=NULL;}return (L);}8.该算法的功能是:将开始结点摘下链接到终端结点之后成为新的终端结点,而原来的第二个结点成为新的开始结点,返回新链表的头指针。

四、应用题1. 已知一棵树边的集合为{<i,m>,<i,n>,<e,i>,<b,e>,<b,d>,<a,b>,<g,j>,<g,k>,<c,g>,<c,f>,<h,l>,<c,h>,<a,c>},请画出这棵树,并回答下列问题:(1)哪个是根结点?(2)哪些是叶子结点?(3)哪个是结点g 的双亲?(4)哪些是结点g 的祖先?(5)哪些是结点g 的孩子?(6)哪些是结点e 的孩子?(7)哪些是结点e 的兄弟?哪些是结点f 的兄弟?(8)结点b 和n 的层次号分别是什么?(9)树的深度是多少?(10)以结点c 为根的子树深度是多少?1. 解答:根据给定的边确定的树如图5-15所示。

其中根结点为a ; 叶子结点有:d 、m 、n 、j 、k 、f 、l ; c 是结点g 的双亲; a 、c 是结点g 的祖先; j 、k 是结点g 的孩子; m 、n 是结点e 的子孙; e 是结点d 的兄弟;g 、h 是结点f 的兄弟; 结点b 和n 的层次号分别是2和5;树的深度为5。

2. 一棵度为2的树与一棵二叉树有何区别。

2. 解答:度为2的树有两个分支,但分支没有左右之分;一棵二叉树也有两个分支,但有左右之分,左右子树不能交换。

3. 试分别画出具有3个结点的树和二叉树的所有不同形态?3. 解答: 略4. 已知用一维数组存放的一棵完全二叉树:ABCDEFGHIJKL ,写出该二叉树的先序、中序和后序遍历序列。

4. 解答:先序序列:ABDHIEJKCFLG中序序列:HDIBJEKALFCG后序序列:HIDJKEBLFGCA5. 一棵深度为H 的满k 叉树有如下性质:第H 层上的结点都是叶子结点,其余各层上每个结点都有k 棵非空子树,如果按层次自上至下,从左到右顺序从1开始对全部结点编号,回答下列问题:(1)各层的结点数目是多少?(2)编号为n 的结点的父结点如果存在,编号是多少?ab c d e g f h i m n jk i 图5-15(3)编号为n 的结点的第i 个孩子结点如果存在,编号是多少?(4)编号为n 的结点有右兄弟的条件是什么?其右兄弟的编号是多少?5. 解答:(1)第i 层上的结点数目是mi-1。

(2)编号为n 的结点的父结点如果存在,编号是((n-2)/m)+1。

相关文档
最新文档