(完整word版)数据结构简答题打印版1

合集下载

数据结构简答题

数据结构简答题

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

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

一、数据结构的定义和作用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)等。

(完整word版)数据结构试题集(包含答案完整版)(word文档良心出品)

(完整word版)数据结构试题集(包含答案完整版)(word文档良心出品)

第一章概论一、选择题1、研究数据结构就是研究( D )。

A. 数据的逻辑结构B. 数据的存储结构C. 数据的逻辑结构和存储结构D. 数据的逻辑结构、存储结构及其基本操作2、算法分析的两个主要方面是( A )。

A. 空间复杂度和时间复杂度B. 正确性和简单性C. 可读性和文档性D. 数据复杂性和程序复杂性3、具有线性结构的数据结构是( D )。

A. 图B. 树C. 广义表D. 栈4、计算机中的算法指的是解决某一个问题的有限运算序列.它必须具备输入、输出、( B )等5个特性。

A. 可执行性、可移植性和可扩充性B. 可执行性、有穷性和确定性C. 确定性、有穷性和稳定性D. 易读性、稳定性和确定性5、下面程序段的时间复杂度是( C )。

for(i=0;i<m;i++)for(j=0;j<n;j++)a[i][j]=i*j;A. O(m2)B. O(n2)C. O(m*n)D.O(m+n)6、算法是( D )。

A. 计算机程序B. 解决问题的计算方法C. 排序算法D. 解决问题的有限运算序列7、某算法的语句执行频度为(3n+nlog2n+n2+8),其时间复杂度表示( C )。

A. O(n)B. O(nlog2n)C. O(n2)D.O(log2n)8、下面程序段的时间复杂度为( C )。

i=1;while(i<=n)i=i*3;A. O(n)B. O(3n)C. O(log3n)D. O(n3)9、数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的()和运算等的学科。

A. 结构B. 关系C. 运算D. 算法10、下面程序段的时间复杂度是(A )。

i=s=0;while(s<n){i++;s+=i;}A. O(n)B. O(n2)C. O(log2n)D. O(n3)11、抽象数据类型的三个组成部分分别为( A)。

A. 数据对象、数据关系和基本操作B. 数据元素、逻辑结构和存储结构C. 数据项、数据元素和数据类型D. 数据元素、数据结构和数据类型12、通常从正确性、易读性、健壮性、高效性等4个方面评价算法的质量.以下解释错误的是()。

数据结构简答题

数据结构简答题

数据结构简答题数据结构是计算机科学中的重要概念,用于组织和管理数据的方式。

它提供了一种存储和操作数据的方法,使得计算机程序可以高效地访问和处理数据。

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

1. 什么是数据结构?数据结构是一种组织和存储数据的方式,它定义了数据对象之间的关系以及对这些数据对象进行操作的规则。

数据结构可以分为线性结构(如数组、链表)、树形结构(如二叉树、堆)、图形结构(如有向图、无向图)等多种类型。

2. 数据结构有何作用?数据结构的主要作用是提供一种高效的数据存储和访问方式,以满足不同的应用需求。

通过选择合适的数据结构,可以使得程序的运行效率更高,减少资源消耗,并且使得程序的逻辑更加清晰和易于理解。

3. 请举例说明线性结构和非线性结构。

线性结构是指数据元素之间存在一对一的关系,数据元素之间只有一个直接前驱和一个直接后继。

例如,数组和链表就是线性结构的典型代表。

非线性结构是指数据元素之间存在一对多或多对多的关系,数据元素之间不仅有直接前驱和直接后继,还可能存在其他关系。

例如,树和图就是非线性结构的典型代表。

4. 什么是算法?算法是解决特定问题的一系列步骤或操作的有限序列。

它描述了在给定输入下,通过执行一系列定义好的操作,可以得到期望的输出。

算法可以用于解决各种问题,如排序、查找、图形算法等。

5. 数据结构和算法之间有何关系?数据结构和算法是紧密相关的。

数据结构提供了存储和组织数据的方式,而算法则定义了对这些数据进行操作的步骤和规则。

选择合适的数据结构可以提高算法的效率,而设计高效的算法也需要考虑数据结构的选择。

6. 什么是时间复杂度和空间复杂度?时间复杂度是衡量算法执行时间的度量,它表示算法的运行时间与问题规模之间的关系。

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

空间复杂度是衡量算法所需存储空间的度量,它表示算法所需的额外空间与问题规模之间的关系。

数据结构简答题

数据结构简答题

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

数据结构简答题

数据结构简答题

数据结构简答题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、数据结构是⼀门研究什么的学科?数据结构是⼀门研究⾮数值计算的程序设计问题中,计算机操作对象及对象间的关系和施加于对象的操作等的学科。

2、数据存储结构有哪⼏种类型?存储结构可分为顺序存储、链式存储、索引存储和散列存储。

3、数据逻辑结构包括哪⼏种类型?逻辑结构包括线性结构和⾮线性结构。

更细分的话可以说,逻辑结构包括集合、线性结构(线性表、栈、队列等)、树形结构和⽹状结构。

4、数据结构与数据类型有什么区别?答:数据结构这⼀术语有两种含义,⼀是作为⼀门课的名称,⼆是作为⼀个科学的概念,⽬前尚⽆公认定义,⼀般认为,数据结构包括三个⽅⾯数据的逻辑结构,数据的存储结构,数据的运算。

⽽数据类型是值的集合和操作的集合,可以看做是已实现了的数据结构,后者是前者的⼀种简化情况。

5、数据类型和抽象数据类型是如何定义的?⼆者有何相同和不同之处?抽象数据类型的主要特点是什么?使⽤抽象数据类型的主要好处是什么?数据类型和抽象数据类型是如何定义的?⼆者有何相同和不同之处?抽象数据类型的主要特点是什么?使⽤抽象数据类型的主要好处是什么?答:数据类型是程序设计语⾔中的⼀个概念,数据类型是值的集合和操作的集合,可以看做是已实现了的数据结构抽象数据类型指⼀个数学模型及定义在该模型上的⼀组操作。

抽象的意义在于数据类型的数学抽象特性。

抽象数据类型的定义仅取决于它的逻辑特性,⽽与其在计算机内部如何表⽰与实现⽆关。

⽆论其内部如何变化。

只要它的数学特性不变就不影响它的外部使⽤。

抽象数据类型和数据类型实质上是⼀个概念,但是抽象数据类型的范围更⼴,它已不再局限于机器已定义和实现的数据类型,还包括⽤户在设计软件系统时⾃⾏定义的数据类型。

使⽤抽象数据类型定义的软件模块含定义,表⽰和实现三部分,封装在⼀起,对⽤户透明(提供接⼝),⽽不必了解实现细节。

6、名词解释数据:是对客观事物的符号表⽰,在计算机科学中指所有能输⼊到计算机并能被计算机程序处理的符号总称。

数据结构简答题

数据结构简答题

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

以下是几个常见的数据结构简答题,详细解答如下:1. 什么是数据结构?数据结构是一种组织和存储数据的方式,它定义了数据元素之间的关系和操作。

数据结构可以分为线性结构(例如数组、链表)、树形结构(例如二叉树、堆)、图形结构(例如有向图、无向图)等。

2. 请简要介绍数组和链表的区别。

数组是一种线性结构,它将元素存储在连续的内存空间中。

数组的大小在创建时就确定,访问元素的时间复杂度为O(1),但插入和删除元素的时间复杂度较高,为O(n)。

链表是另一种线性结构,它使用节点存储元素,并通过指针链接这些节点。

链表的大小可以动态改变,插入和删除元素的时间复杂度为O(1),但访问元素的时间复杂度较高,为O(n)。

3. 请简要介绍栈和队列的特点和应用场景。

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

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

队列是一种先进先出(FIFO)的数据结构,只能在一端进行插入操作,在另一端进行删除操作。

队列的应用场景包括任务调度、消息队列、广度优先搜索等。

4. 请简要介绍二叉树和图的特点和应用场景。

二叉树是一种树形结构,每一个节点最多有两个子节点。

二叉树的应用场景包括搜索树、哈夫曼编码、排序算法等。

图是一种复杂的非线性结构,由节点和边组成。

图的应用场景包括社交网络、路径规划、最小生成树等。

5. 请简要介绍哈希表的特点和应用场景。

哈希表是一种使用哈希函数将键映射到值的数据结构,通过哈希函数可以快速定位到对应的值。

哈希表的插入、删除和查找操作都具有常数时间复杂度,适合于需要快速查找的场景,如数据库索引、缓存系统等。

6. 请简要介绍堆的特点和应用场景。

堆是一种彻底二叉树,可以分为最大堆和最小堆。

最大堆中,父节点的值大于或者等于子节点的值;最小堆中,父节点的值小于或者等于子节点的值。

  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。

相关文档
最新文档