数据结构基础复习(pta)

本文详细讨论了算法分析中的时间复杂度和空间复杂度,介绍了数据结构中的基本概念如抽象数据类型、逻辑结构(集合、线性、树形和图形)、数据元素、操作对象、链表(单链表、双向链表)以及各种数据结构的特点。同时涵盖了顺序存储、循环队列、二叉树、堆排序和递归等内容。
摘要由CSDN通过智能技术生成

实验一

算法分析的两个主要方面是时间复杂度和空间复杂度的分析。 

抽象数据类型中基本的定义与具体的实现有关。×

算法可以没有输入,但是必须有输出。

一个完整的算法应该具有( 可行性、确定性和有穷性)等特性。

数据的(逻辑结构)包括集合、线性结构、树形结构和图形结构四种基本类型。

(集合)中任何两个结点之间都没有逻辑关系。

数据结构是一门研究非数值计算的程序设计问题中计算机的(操作对象)以及它们之间的关系和运算等的学科。

数据结构形式地定义为(K,R),其中K是(数据元素)的有限集合,R是K上的关系上的有限集合。

在数据结构中,与所使用的计算机无关的数据结构是(逻辑结构)。

线性结构中元素之间存在(一对一)关系。

图形结构中元素之间存在(一对多)关系。

实验二

可以使几个不同类型的变量共用同一段存储单元 

当函数的返回值是数组类型的,传递的是数组第一个元素的地址

链表中逻辑上相邻的元素,其物理位置也一定相邻。 ×

指针p指向结点定义为(data,pre,next)的双向链表中的一个结点,则p->pre->next==p->next->pre。

数据结构涉及数据的逻辑结构、存储结构和施加其上的操作3个方面

被计算机加工的数据元素不是孤立的,它们彼此之间一般存在某种关系,通常把数据元素之间的这种关系称为(结构)

与单链表相比,双链表的优点之一是(顺序访问相邻结点更加灵活)。

将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为 O(m)

设有两个长度为n的单链表,结点类型相同。若以h1为表头指针的链表是非循环的,以h2为表头指针的链表是循环的,则()。

A.对于两个链表来说,删除第一个结点的操作,其时间复杂度都是O(1)

B.对于两个链表来说,删除最后一个结点的操作,其时间复杂度都是O(n)

C.循环链表要比非循环链表占用更多的内存空间

D.h1和h2是不同类型的变量

单链表又称为线性链表,在单链表上实施插入和删除操作( 不需移动结点,只需改变结点指针)。

单链表中,增加一个头结点的目的是(方便运算的实现)

链表要求内存中可用存储单元的地址(连续或不连续都可以)

双链表 - 删除结点

在双链表中,删除 s 所指结点,其语句应该为 :s->next->prev = s->prev; s->prev->next = s->next;

线性表在(线性表需经常插入或删除数据元素)情况下适合采用链式存储结构。

若单链表L(无头结点)则如何求出链表长度len:

int len=0;
while(L)
{
L=L->next;
len++;
}

以下关于递归调用的说法正确的是( )。

A.函数间接调用自己不是递归

B.递归调用可以用队列实现

C.递归调用可以用栈实现

D.函数直接调用自己是递归

实验三

(neuDS)顺序存储的线性表不支持随机存取  ×

顺序表中逻辑上相邻的元素,其物理位置也一定相邻。

在n个元素连续进栈以后,它们的出栈顺序和进栈顺序一定正好相反。

栈的链式存储结构实际上就是一个单链表,叫做链栈。插入和删除操作只能在链栈的栈顶进行。

链式栈无栈满问题,空间可扩充

插入与删除仅在栈顶处执行

链式栈的栈顶在链头

某线性表采用顺序存储结构,每个元素占4个存储单元,首地址为100,则第12个元素的存储地址为(144)。

100+(12-1)*4=144

若设一个顺序表的长度为n,那么,在表中顺序查找一个值为x的元素时,在等概率的情况下,查找成功的数据平均比较次数为 (n+1)/2

设顺序表L中有n个数据元素,则删除该表中第i个数据元素需要移动(n-i)个元素。

在包含 n 个数据元素的顺序表中,访问第 i(1≤i≤n) 个数据元素  的时间复杂度为 O(1)。

若一个栈以向量V[1..n]存储,初始栈顶指针top设为n+1,则元素x进栈的正确操作是(

top--; V[top]=x; )。

实验四

所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。×

不论是入队列操作还是入栈操作,在顺序存储结构上都需要考虑"溢出"情况

允许插入的一端叫做队尾,删除的一端叫做队头。

若采用“队首指针和队尾指针的值相等”作为环形队列为空的标志,则在设置一个空队时只需将队首指针和队尾指针赋同一个值,不管什么值都可以。

二叉树通常有顺序存储结构和链式存储结构。

具有10个叶子结点的二叉树中有9个度为2的结点 。叶子结点个数=度为2的结点个数+1

深度为d(只有一个根结点时,d为1)的二叉树只有度为0和2的结点,则此类二叉树的结点数至少为2d-1

二叉树是一种特殊的树。×,树和二叉树是两种不同的树形结构,二叉树不是树的特殊形式。树是树,二叉树是二叉树,树并没有包含二叉树 ,但是他们都属于树形结构

度为二的树就是二叉树。×,是有左右孩子之分的一种度为2的数

在由n个元素组成的顺序存储的循环队列sq中,假定f和r分别为队头指针和队尾指针,则判断队满的条件是:f ==(r+1)%n

用链接方式存储的队列,在进行删除运算时:头、尾指针可能都要修改

若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为( )

A.1和5

B.2和4

C.4和2

D.5和1

深度为6的二叉树最多有( 63)个结点。 2^6-1

一棵高度为8的完全二叉树至少有( 64)叶子节点

完全二叉树的最后一个结点的编号是n,则它的父结点的编号为[n/2],则叶子结点个数为n-[n/2]。

在完全二叉树中,若一个结点度为1,则它没有( 右子树)

具有9个叶结点的二叉树中有8个度为2的结点

对于一棵具有n个结点、度为4的树来说,树的高度最多是n-3

度为4、高度为h的树:至少有h+3个结点

实验五

先序、中序和后序序列中,叶子结点的顺序一定是一致的。

在任意一棵非空二叉排序树中,删除某结点后又将其插入,则所得二排序叉树与原二排序叉树相同。×

二叉树中有双子女的父结点,在中序遍历中后继一定是其中一个子女结点。×

用链表存储柏寒n个结点的二叉树,结点的2n个指针区域中有n-1个空指针。×

边数 m=n-1

空指针数 =2n-m=n+1

任何二叉搜索树中同一层的结点从左到右是有序的(从小到大)

中根遍历二叉查找树所得序列一定是有序序列。

二叉搜索树T的最小元素有可能不位于树根的左子树。

对于下列关键字序列,不可能构成某二叉排序树中一条查找路径的序列是( )。

A.95,22,91,24,94,71

B.92,20,91,34,88,35

C.21,89,77,29,36,38

D.12,25,71,68,33,34

由二叉排序树的性质可知,一个数后面的数字都要全部大于或全部小于它

二叉树的第i层上最多含有结点数为2^{i-1}

在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序:完全相同

若有一个叶子结点是二叉树中某个子树的中序遍历结果序列的最后一个结点,则它一定是该子树的前序遍历结果序列的最后一个结点

某二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树一定是(高度等于其节点数) 

对于先序遍历与中序遍历结果相同的二叉树为:任意节点均无左子树的二叉树

实验六

最大堆的前序遍历结果是从大到小排序的。×

实验七

实验八

无向图的邻接矩阵一定是对称矩阵,有向图的邻接矩阵一定是非对称。×

图的深度优先遍历非递归算法通常采用队列实现,广度优先遍历非递归算法通常采用堆栈实现。×,深搜用堆栈,广搜用队列。

广度优先搜索遍历图的时间复杂度和深度优先探索遍历相同

无向图G=(V,E)中含8个顶点,要保证G在任何情况下都是联通的,需要的边数最少是:7(7-1)/2 +1=22

实验九

直接选择排序算法在最好情况下的时间复杂度为O(N)×,是O(n^2),不受数据初始排列影响

排序的稳定性是指排序算法中的比较次数保持不变,且算法能够终止。×

对nn个记录进行堆排序,需要的额外空间为:O(1)

堆是完全二叉树,完全二叉树不一定是堆。

有一大根堆,堆中任意结点的关键字均大于它的左右孩子关键字,则其具有最小值的结点一定是一个叶子结点并可能在堆的最后两层中。

对于10个数的简单选择排序,最坏情况下需要交换元素的次数为:9

实验十

随堂测试一

结构体成员的类型必须是基本数据类型  × 可以是另一结构体

数据的逻辑结构是指数据的各数据项之间的逻辑关系  × 逻辑结构是指数据的数据元素之间的逻辑关系

区别:

数据元素是数据的基本单位;
数据项是组成数据元素、有独立含义的、不可分割的最小单位;
数据对象是性质相同的数据元素的集合,是数据的一个子集;

数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的存储结构  ×,数据的逻辑结构是从数据元素之间的属性和关系中抽象出来的,不依赖于计算机的存储结构,与具体操作无关。

 算法和程序没有区别,在数据结构中二者是通用的 ×,程序是实现算法的具体代码

 树是表示多对多关系的数据结构 ×,树:一对多

用渐进表示法分析算法复杂度的增长趋势 

在一个长度为n(n>1)的单链表上,设有头和尾两个指针,执行()操作与链表的长度有关。

A.删除单链表中的第一个元素

B.删除单链表中的最后一个元素

C.在单链表第一个元素前插入一个新元素

D.在单链表最后一个元素后插入一个新元素

单链表 - 插入结点

在单链表中,将 s 所指新结点插入到 p 所指结点之后,其语句应该为:

s->next = p->next; p->next = s;

双链表 - 插入结点

在双链表中,将 s 所指新结点插入到 p 所指结点之后,其语句应该为 :

s->next = p->next; p->next->prev = s; p->next = s; s->prev = p;

单链表 - 删除结点

在单链表中,删除 p 所指结点的后继结点,其语句应该为:

s = p->next; p->next = s->next;

双链表 - 删除结点

在双链表中,删除 p 所指结点的后继结点,其语句应该为 :

s = p->next;//标记待删除结点

s->next->prev = p;//修改指针域

p->next = s->next;//修改指针域

(2、3句可以颠倒)

频繁插入删除操作,使用什么数据结构比较合适,链表还是数组 (链表 )

随堂测试二

顺序存储的线性表不支持随机存取。×

线性表的唯一存储形式是链表。×

栈是插入和删除只能在一端进行的线性表;队列是插入在一端进行,删除在另一端进行的线性表。

栈:先进先出

在用数组表示的循环队列中,front值一定小于等于rear值。×

设二叉树的深度为h,且只有度为1和0的结点,则此二叉树的结点总数为:h

一棵二叉树的先序序列:abdfcegh,中序序列:bfdagehc。该二叉树中左子树的根结点是(b)。

对一个二叉搜索树进行( 中序遍历)遍历可以得到一个从小到大的有序序列。

随堂测试三

邻接矩阵作为有向图的存储结构,则某顶点的度就是该顶点所在列的·非零元素个数。×

散列表与处理冲突方法有关而与表的长度无关

随堂测试四

冒泡排序算法的最坏时间复杂性是O(n2),而快速排序算法的最坏时间复杂性是O(nlog2​n),所以快速排序比冒泡排序效率好。×

冒泡排序使用了分治思想。×,快速排序用了分治思想

用希尔(shell)方法排序时,若关键字的初始排序杂乱无序,则排序效率就低。×

若一组记录的排序码为(39,27,76,29,46,85,58),则利用堆排序的方法从小到大排序,建立的初始堆为( )。

A.(27,29,39,46,58,76,85)

B.(27,29,58,39,46,85,76)

C.(85,76,58,46,39,29,27)

D.(85,46,76,29,27,39,58)

Step1:依据原始序列构建完全二叉树;
Step2:调整使其变为大根堆

常见处理冲突的方法:开放地址法,链地址法

堆是一种(选择)排序

从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,这种排序方法称为( 插入排序)。

期中

在二叉排列树中,凡是新插入的结点都是没有孩子的。

二叉树的退化,会退化为链表

用邻接表存储图所用的空间大小与图的顶点和边数有关。

在任意一颗非空二叉排序树中,删除某结点后又将其插入,则所得排序树和原排序树相同。×

要删除的结点只有一个孩子节点:删除前需改变其父结点指针,指向要删除节结点的孩子结点

  • 24
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值