数据结构简答题复习过程
数据结构考试复习题及答案 (4)

一、选择题1. 以下哪种数据结构是一种抽象数据类型?A. 队列B. 数组C. 栈D. 树答案:D. 树。
树是一种抽象数据类型,用于表示具有层次关系的数据。
2. 下列哪个操作是栈所特有的?A. 插入元素B. 删除元素C. 查看元素D. 出栈答案:D. 出栈。
栈是一种后进先出(LIFO)的数据结构,其特性是只能执行出栈操作。
3. 对于一个具有n个节点的二叉树,其高度最大为:A. log2nB. n/2C. nD. n-1答案:A. log2n。
二叉树的高度与节点数和节点数有关,但通常可以通过节点数的对数来近似计算。
对于具有n个节点的二叉树,其高度最大为log2(n+1)。
二、填空题4. 在一个循环队列中,当front 和rear 指针的值满足________ 时,队列为空。
答案:front==rear。
循环队列是一种具有循环性质的队列,当front和rear指针的值相等时,表示队列为空。
5. 在二叉搜索树中,查找一个节点的平均时间复杂度为________ 。
答案:O(logn)。
在二叉搜索树中,查找一个节点的平均时间复杂度为O(logn),因为每次查找都会沿着树向下移动,直到找到目标节点或到达根节点。
三、简答题6. 描述两种不同的链式栈,并比较它们的优缺点。
答案:链式栈是一种使用链表实现的栈,其优点在于可以动态地分配和回收内存,不需要预先分配固定大小的内存空间。
此外,链式栈也更容易进行插入和删除操作,因为这些操作只需要修改链表中的几个节点。
然而,链式栈也有一些缺点,例如在处理大量数据时可能会占用更多的内存空间,并且需要更多的时间来创建和销毁链表。
7. 解释并描述哈希表的工作原理。
答案:哈希表是一种基于哈希函数的数据结构,它将键值映射到特定的位置或桶中。
在哈希表中,可以通过键直接访问对应的值,因此哈希表提供了快速的查找操作。
哈希表的实现通常包括哈希函数的设计、哈希表的建立和维护(如处理冲突)、插入和删除操作等步骤。
数据结构复习题及答案

数据结构复习题及答案一、选择题1. 在数据结构中,以下哪种数据结构允许在任何位置进行插入和删除操作?A. 栈B. 队列C. 链表D. 数组答案:C2. 以下哪个选项是二叉搜索树的特性?A. 所有左子树的节点值小于根节点值B. 所有右子树的节点值大于根节点值C. 所有左子树的节点值大于根节点值D. 所有右子树的节点值小于根节点值答案:A3. 在图的遍历中,深度优先搜索(DFS)使用的是哪种数据结构?A. 栈B. 队列C. 链表D. 数组答案:A二、填空题1. 在一个有n个节点的完全二叉树中,如果节点按层次从上到下、从左到右编号为1, 2, 3, ..., n,则第i个节点的左孩子节点的编号为____。
答案:2i2. 哈希表解决冲突的一种方法是使用链地址法,其中每个哈希表项是一个____。
答案:链表3. 在图的表示方法中,邻接矩阵适合表示____图,邻接表适合表示____图。
答案:稠密;稀疏三、简答题1. 描述什么是递归,并给出一个简单的递归算法的例子。
答案:递归是一种在算法中调用自身的方法,用于解决可以分解为相似子问题的问题。
一个简单的递归算法例子是计算阶乘:n! = n * (n-1)!,其中基本情况是0! = 1。
2. 解释什么是图的广度优先搜索(BFS)算法,并说明其在哪些情况下适用。
答案:广度优先搜索(BFS)是一种遍历或搜索树或图的算法,它从根节点开始,逐层遍历节点。
BFS适用于寻找最短路径或在层次结构中按层次顺序访问节点的情况。
四、编程题1. 给定一个单链表,请编写一个函数来反转该链表。
答案:(此处省略具体代码实现,只提供解题思路)要反转一个单链表,可以创建一个新的链表头节点,然后遍历原链表,将每个节点的next指针指向前一个节点,直到链表末尾。
最后,将新链表的头节点设置为原链表的最后一个节点的前驱节点。
(题)数据结构复习题

(题)数据结构复习题Ch3链表一、选择题(共18题,11道算法设计题)1、设单链表中结点的结构为(data, link)。
已知指针q所指结点是指针p所指结点的直接前驱,若在*q与*p之间插入结点*s,则应执行下列哪一个操作?(1) s->link = p->link; p->link = s;(3) p->link = s->link; s->link = p;Key:(2)2、设单链表中结点的结构为(data, link)。
已知指针p所指结点不是尾结点,若在*p之后插入结点*s,则应执行下列哪一个操作?(1) s->link = p;p->link = s;(2) s->link = p->link;p->link = s;(4) p->link = s;s->link = p;(2) q->link = s; s->link = p;(4) p->link = s; s->link = q;(3) s->link = p->link; p = s;Key:(2)3、设单链表中结点的结构为(data, link)。
若想摘除结点*p的直接后继,则应执行下列哪一个操作?(2) p = p->link; p->link = p->link->link;(4) p = p->link->link;(1) p->link = p->link->link;(3) p->link = p->link;Key:(1)4、设单循环链表中结点的结构为(data, link),且rear是指向非空的带表头结点的单循环链表的尾结点的指针。
若想删除链表第一个结点,则应执行下列哪一个操作?(1) s = rear; rear = rear->link; free(s);(2) rear = rear->link;free(rear);(3) rear = rear->link->link; free(rear);(4) s = rear->link->link; rear->link->link = s->link; free(s);1Key:(4)5、设双向循环链表中结点的结构为(data, prior, next),且不带表头结点。
数据结构期末考试复习总结

《数据结构》期末考试题型及分值(1)简答题6题*5分=30分简要回答要点(2)分析题6题*5分=30分给出结果(3)设计题1题*10分=10分设计思想及结果(4)编程题1题*10分=10分完整代码(5)综合题1题*20分=20分抽象数据类型的定义、表示、实现、算法分析{定义=功能(ADT)表示=存储结构体实现=算法(基本操作)算法分析=时间、空间复杂度}考试概念有:1.数据结构{一、线性表(栈-队-列-串-数组-广义表-逻辑结构-存储结构-运算结构)二、非线性表(集合-树-图)}2.抽象数据类型数据对象-数据关系-基本操作3.算法性质-要求(设计)-效率(度量)4.实例查找:高效查找算法排序:高效的排序算法分析题考试题目参考(1)1-2-3-4-5-6顺序建BBST(2)6-5-4-3-2-1顺序建BBST简答题实例设计题:(1)(2)数据结构试卷(一)三、计算题(每题 6 分,共24分)1. 在如下数组A 中存储了一个线性表,表头指针为A [0].next ,试写出该线性表。
A 0 1 2 3 4 5 6 7data 60 50 78 90 34 40 next357241线性表为:(78,50,40,60,34,90)⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡0111010*******110101011102.请画出下图的邻接矩阵和邻接表。
3. 已知一个图的顶点集V 和边集E 分别为:V={1,2,3,4,5,6,7};E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25};用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。
用克鲁斯卡尔算法得到的最小生成树为:(1,2)3, (4,6)4, (1,3)5, (1,4)8, (2,5)10, (4,7)204.画出向小根堆中加入数据4, 2, 5, 8, 3时,每加入一个数据后堆的变化。
数据结构复习_2

7、抽象数据类型的概念 由用户定义,用以表示应用问题的数据模型,是将数据结构作为一个软件构建的实现, 由基本的数据类型组成, 并包括一组相关的服务(或称操作) 抽象数据类型的的特征是使用与实现相分离,信息隐蔽和数据封装, 8、类的特征 信息隐蔽和数据封装,使用与实现相分离。 9、自然数的抽象数据类型定义 ADT NaturalNumber is objects: 一个整数的有序子集合,它开始于 0, 结束于机器能表示的最大整数(MaxInt)。 Function: 对于所有的 x, y NaturalNumber; False, True Boolean, +、-、<、==、=等都是可用的服务。 Zero( ) : NaturalNumber 返回自然数 0
4、数据结构涉及的三个方面: 数据的运算,即对数据元素施加的操作。 数据的逻辑结构 数据的存储结构 是指数据应该如何在计算机中存放, 是数据逻辑结构的物理存储方式, 是属于具体实现 的视图,是面向计算机的。 四种基本的存储方法: 顺序存储表示:该方法把逻辑上相邻的元素存放到物理位置上相邻的存储单元中; 链接存储表示:该方法不要求逻辑上相邻的元素在物理位置上也相邻; 索引存储表示:该方法在存储元素信息的同时,还建立附加的索引表。索引表中每一项 称 为索引项,索引项的一般形式是:(关键码,地址); 散列存储表示:根据结点的关键码通过一个函数计算直接得到该结点的存储地址。 5、数据类型 数据类型是一组性质相同的值的集合, 以及定义于这个值集合上的一组操作的总称. 6、线性表数据类型的两种表示方式 基于数组的顺序表示和基于链表的链接表示
第五章树 一、树的定义和术语 1.自由树 一棵自由树 Tf 可定义为一个二元组 Tf = (V, E) 其中 V = {v1, ..., vn} 是由 n (n>0) 个元素组成的有限非空集合,称为顶点集合。 E = {(vi, vj) | vi, vj V, 1≤i, j≤n} 是 n-1 个序对的集合,称为边集合,E 中的元素 (vi, vj)称 为边或分支。
数据结构期末复习题(有答案)

一、单选题1. 从物理上可以把数据结构分为(B)两大类。
A. 动态结构、静态结构B. 顺序结构、链式结构C. 线性结构、非线性结构D. 初等结构、构造型结构2. 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为(C )(1≤i≤n+1)。
A. O(0)B. O(1)C. O(n)D. O(n2)3. 链表不具有的特点是(B)。
A. 插入、删除不需要移动元素B. 可随机访问任一元素C. 不必事先估计存储空间D. 所需空间与线性长度成正比4. 下列排序算法中(C)排序在一趟结束后不一定能选出一个元素放在其最终位置上。
A. 选择B. 起泡C. 归并D. 堆5. 在下列排序算法中,哪一个算法的时间复杂度与初始排序无关(D )。
A. 插入排序B. 起泡排序C. 快速排序D. 选择排序6. 一个栈的输入序列为1,2,3,…,n,若输出序列的第一个元素是i,则第j个输出元素是(D)。
A. i-j-1B. i-jC. j-i+1D. 不确定7. 输入序列为ABC,可以变为BCA时,经过的栈操作为(D )。
A. push,pop,push,pop,push,popB. push,push,push,pop,pop,popC. push,push,pop,pop,push,popD. push,push,pop,push,pop,pop8. 有六个元素6 5 4 3 2 1 的顺序进栈,下列(C )不是合法的出栈序列。
A. 5 4 3 6 1 2B. 4 5 3 1 2 6C. 3 4 6 5 2 1D. 2 3 4 1 5 69. 串的长度是指(B )。
A. 串中所含不同字母的个数B. 串中所含字符的个数C. 串中所含不同字符的个数D. 串中所含非空格字符的个数10. 设二维数组A[1.. m,1.. n](即m行n列)按行存储在数组B[1.. m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为( A)。
数据结构简答题

数据结构简答题引言概述:数据结构是计算机科学中的重要概念,用于组织和存储数据以便有效地访问和操作。
在计算机科学课程中,经常会遇到关于数据结构的简答题,考察学生对数据结构基本概念的理解。
本文将介绍一些常见的数据结构简答题,并提供详细的解答。
一、数组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、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构简答题试比较顺序存储结构和链式存储结构的优缺点。
在什么情况下用顺序表比链表好?答:①顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。
优点:存储密度大(=1),存储空间利用率高。
缺点:插入或删除元素时不方便。
②链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针优点:插入或删除元素时很方便,使用灵活。
缺点:存储密度小(<1),存储空间利用率低。
顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。
若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。
一棵度为2的有序树与一棵二叉树有何区别?答:一棵度为二的有序树与一棵二叉树的区别在于:有序树的结点次序是相对于另一结点而言的,如果有序树中的子树只有一个孩子时,这个孩子结点就无须区分其左右次序.而二叉树无论其孩子数是否为2,均需确定其左右次序,也就是说二叉树的结点次序不是相对于另一结点而言而是确定的。
简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。
数据是对客观事物的符号表示。
在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据对象是性质相同的数据元素的集合,是数据的一个子集。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
存储结构是数据结构在计算机中的表示。
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。
是对一般数据类型的扩展。
试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。
解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。
一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。
抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。
在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。
描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。
头指针是指向链表中第一个结点的指针。
首元结点是指链表中存储第一个数据元素的结点。
头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的操作。
它可以对空表、非空表以及首元结点的操作进行统一处理。
线性表的两种存储结构各有哪些优缺点?线性表具有两种存储结构即顺序存储结构和链接存储结构。
线性表的顺序存储结构可以直接存取数据元素,方便灵活、效率高,但插入、删除操作时将会引起元素的大量移动,因而降低效率:而在链接存储结构中内存采用动态分配,利用率高,但需增设指示结点之间关系的指针域,存取数据元素不如顺序存储方便,但结点的插入、删除操作较简单。
对于线性表的两种存储结构,如果有n个线性表同时并存,而且在处理过程中各表的长度会动态发生变化,线性表的总数也会自动改变,在此情况下,应选用哪一种存储结构?为什么?应选用链接存储结构,因为链式存储结构是用一组任意的存储单元依次存储线性表中的各元素,这里存储单元可以是连续的,也可以是不连续的:这种存储结构对于元素的删除或插入运算是不需要移动元素的,只需修改指针即可,所以很容易实现表的容量的扩充。
对于线性表的两种存储结构,若线性表的总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素,应选用何种存储结构?试说明理由。
应选用顺序存储结构,因为每个数据元素的存储位置和线性表的起始位置相差一个和数据元素在线性表中的序号成正比的常数。
因此,只要确定了其起始位置,线性表中的任一个数据元素都可随机存取,因此,线性表的顺序存储结构是一种随机存取的存储结构,而链表则是一种顺序存取的存储结构。
在单循环链表中设置尾指针比设置头指针好吗?为什么?设尾指针比设头指针好。
尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear->next->next 和 rear, 查找时间都是O(1)。
若用头指针来表示该链表,则查找终端结点的时间为O(n)。
假定有四个元素A, B, C, D依次进栈,进栈过程中允许出栈,试写出所有可能的出栈序列。
共有14种可能的出栈序列,即为:ABCD, ABDC,ACBD, ACDB,BACD,ADCB,BADC,BCAD, BCDA,BDCA,CBAD, CBDA,CDBA, DCBA什么是队列的上溢现象?一般有几种解决方法,试简述之。
在队列的顺序存储结构中,设队头指针为front,队尾指针为rear,队列的容量(即存储的空间大小)为maxnum。
当有元素要加入队列(即入队)时,若rear=maxnum,则会发生队列的上溢现象,此时就不能将该元素加入队列。
对于队列,还有一种“假溢出”现象,队列中尚余有足够的空间,但元素却不能入队,一般是由于队列的存储结构或操作方式的选择不当所致,可以用循环队列解决。
一般地,要解决队列的上溢现象可有以下几种方法:(1)可建立一个足够大的存储空间以避免溢出,但这样做往往会造成空间使用率低,浪费存储空间。
(2)要避免出现“假溢出”现象可用以下方法解决:第一种:采用移动元素的方法。
每当有一个新元素入队,就将队列中已有的元素向队头移动一个位置,假定空余空间足够。
第二种:每当删去一个队头元素,则可依次移动队列中的元素总是使front指针指向队列中的第一个位置。
第三种:采用循环队列方式。
将队头、队尾看作是一个首尾相接的循环队列,即用循环数组实现,此时队首仍在队尾之前,作插入和删除运算时仍遵循“先进先出”的原则。
如何知道循环队列是空还是满?第一,采用计数器来判断,空时,计数器为0,满时,计数器为maxsize;第二,另设一个布尔变量以匹别队列的空和满;第三,少用一个元素的空间,约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队满(注意:rear所指的单元始终为空);说明线性表,栈,队列的异同点相同点:都是线性结构,都是逻辑结构的概念,都可以用顺序存储或者链表存储.栈和队列两种特殊的线性表,即受限的线性表,只是对插入, 删除运算加以限制.不同点:1 运算规则不同: 线性表为随机存取. 栈只允许在一端进行插入.删除运算. 列队只允许在一端进行插入,另一端进行删除运算.2 用途不同,堆栈用于子程序调用和保护现场,队列用于多道作业处理,指令存储及其他运算等等.当你为解决某一问题而选择数据结构时,应从哪些方面考虑?通常从两方面考虑:第一是算法所需的存储空间量;第二是算法所需的时间。
对算法所需的时间又涉及以下三点:(1)程序运行时所需输入的数据总量。
(2)计算机执行每条指令所需的时间。
(3)程序中指令重复执行的次数简述逻辑结构与存储结构的关系答:数据的逻辑结构反映数据元素之间的逻辑关系(即数据元素之间的关联方式或“邻接关系”),数据的存储结构是数据结构在计算机中的表示,包括数据元素的表示及其关系的表示。
数据运算是数据结构的一个重要方面,试举例说明两个数据结构的逻辑结构和存储方式完全相同,只是对于运算的定义不同,因而两个结构具有显著不同的特性,则这两个数据结构是不同的.答:栈和队列的逻辑结构相同,其存储表示也可相同(顺序存储和链式存储),但由于其运算集合不同而成为不同的数据结构。
线性表有两种存储结构:一是顺序表,二是链表。
试问: (1)两种存储表示各有哪些主要优缺点?(2)如果有n个线性表同时并存,并且在处理过程中各表的长度会动态发生变化,线性表的总数也会自动地改变。
在此情况下,应选用哪种存储结构?为什么?(3)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么,应采用哪种存储结构?为什么?解答:(1)顺序存储是按索引(隐含的)直接存取数据元素,方便灵活,效率高,但插入、删除操作时将引起元素移动,因而降低效率;链接存储内存采用动态分配,利用率高,但需增设指示结点之间有序关系的指针域,存取数据元素不如顺序存储方便,但结点的插入、删除操作十分简单。
(2)应选用链接表存储结构。
其理由是,链式存储结构用一组任意的存储单元依次存储线性表里各元素,这里存储单元可以是连续的,也可以是不连续的。
这种存储结构,在对元素作插入或删除运算时,不需要移动元素,仅修改指针即可。
所以很容易实现表的容量扩充。
(3)应选用顺序存储结构。
其理由是,每个数据元素的存储位置和线性表的起始位置相差一个和数据元素在线性表中的序号成正比的常数。
由此,只要确定了起始位置,线性表中任一数据元素都可随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。
而链表则是一种顺序存取的存储结构。
2、用线性表的顺序结构来描述一个城市的设计和规划合适吗?为什么?不合适。
因为一个城市的设计和规划涉及非常多的项目,很复杂,经常需要修改、扩充和删除各种信息,才能适应不断发展的需要。
有鉴于此,顺序线性表不能很好适应其需要,故是不合适的。
3、在单链表和双向表中,能否从当前结点出发访问到任一结点?在单链表中只能由当前结点访问其后的任一结点,因为没有指向其前驱结点的指针。
而在双向链表中,既有指向后继结点的指针又有指向前驱结点的指针,故可由当前结点出发访问链表中任一结点。
对链表设置头结点的作用是什么?(至少说出两条好处)(1) 对带头结点的链表,在表的任何结点之前插入结点或删除表中任何结点,所要做的都是修改前一结点的指针域,因为任何元素结点都有前驱结点。
若链表没有头结点,则首元素结点没有前驱结点,在其前插入结点或删除该结点时操作会复杂些。
(2) 对带头结点的链表,表头指针是指向头结点的非空指针,因此空表与非空表的处理是一样的。
在单链表、双链表和单循环表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?若可以,其时间复杂度各为多少?1. 单链表。
当我们知道指针p指向某结点时,能够根据该指针找到其直接后继,但是由于不知道其头指针,所以无法访问到p指针指向的结点的直接前趋。
因此无法删去该结点。
2. 双链表。
由于这样的链表提供双向链接,因此根据已知结点可以查找到其直接前趋和直接后继,从而可以删除该结点。