数据结构习题

第一章 绪论

与数据元素本身的形式、内容、相对位置、个数无关的是数据的 逻辑结构

第二章 线性表

在一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为 63.5。

n/2

单链表的存储密度 小于1。 

创建一个包括n个结点的有序单链表的时间复杂度是O(n^{2})。

求表长、定位这两种运算在采用顺序存储结构时实现的效率不比采用链式存储结构时实现的效率低。

线性表的链式存储结构在一定场景下优于顺序存储结构。 

第三章 栈和队列

若已知一个栈的入栈序列是1,2,3...,n,其输出序列为p1,p2,p3,...,pn,若p1=n,则pi为 n-i+1 

一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为 (n+r-f)%n

对于非循环队列,尾指针和头指针的差值便是队列的长度;而对于循环队列,差值可能为负数,所以需要将差值加上n,然后与n求余。 

 链式栈结点为(data,link),top指向栈顶,若想删除栈顶结点,并将删除结点的值保存到x中,则应执行操作 x=top->data;top=top->link;

设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1,则栈S的容量至少应该是 3。

画个图就能解决

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

设计一个判别表达式中左、右括号是否配对出现的算法,采用 数据结构最佳。

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

在有头结点的链队列的出队操作中,一般只需修改队头指针,但当原队列中只有一个结点时,该结点既是队头也是队尾,故删去此结点时亦需修改队尾指针,使其指向头结点,且删去此结点后队列变空。 

循环队列存储在数组A[0..m]中,则入队时的操作为 

  • rear=(rear+1)mod(m+1)

最大容量为n的循环队列,队尾指针是rear,队头指针是front,则队空的条件是 

  • rear=front

第四章  串

串是一种特殊的线性表,其特殊性体现在 数据元素是单个字符

串是内容受限的线性表,栈和队列是操作受限的线性表

 串是字符的有限序列;空串是指包括零个字符的串,空串的长度为零;空格串是由一个或多个空格组成的串;模式匹配是串的一种重要运算;串既可以采用顺序存储,也可以采用链式存储。

串“ababaaababaa"的next数组为 011234223456

串”ababaabab"的nextval为 010104101

假设以行序为主序存储二维数组A[1..100.1...100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5] = 818。

前4行总共4*100=400;第5行前4个元素再加上400个元素,总共404个;每个元素占2个单元404*2=808;加上基地址818。 

设有数组A[i,j],数组的每个元素长度为3字节,i的值为1~8,j的值为1~10,数组从内存首地址BA开始顺序存储,当以列序为主序存储时,元素A[5,8]的存储首地址为 BA+180

假设数组的坐标是从(i,j)开始,设定一行的长度为M,一列的长度为N,每个元素占用K个存储单元,
 若以行为主序列,那么a[5,8]的的位置为[(5-i)*M+(8-j)]*K;
 同理,如果是以列为主序列,a[5,8]的的位置为 [(5-i)+(8-j)*N]*K。

 题中,是以列为主存储,那么就应该是[(5-1)+(8-1)*8]*3=180

设有一个10阶的对此矩阵A,采用压缩存储方式,以行序为主序存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为 33

由于是对称矩阵,因此压缩存储可以认为只要存储下三角矩阵。

(1,1)                                                   1

(2,1) (2,2)                                           2

(3,1) (3,2) (3,3)                                  3

(4,1) (4,2) (4,3) (4,4)                          4

(5,1) (5,2) (5,3) (5,4) (5,5)                  5 

(6,1) (6,2) (6,3) (6,4) (6,5) (6,6)          6

(7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7) 7 

(8,1) (8,2) (8,3) (8,4) (8,5) 5

1+2+3+4+5+6+7+5=33

 

B

D

第五章  树与二叉树

单选

把一棵树转换为二叉树后,这棵二叉树的形态 是唯一的。

二叉树的形态是唯一的。

一颗完全二叉树上有1001个结点,其中叶子结点的个数是  501
因为满二叉树的结点数为2 ^ n - 1,所以如果是满的,那么为1023个,但现在是1001,说明最后一层空了22个结点。最后一层有512 - (1023 - 1001) = 490个结点。最后一层空了22个结点,所以倒数第二层有11个叶子结点。490 + 11 = 501。 

一个具有1025个结点的二叉树的高h为 11~1025。

因为完全二叉树有2^{n} 个结点,n为高,此时n为10再加上1个结点为11;另一种极端情况为结点全部在最左或最右。

 深度为h的满m叉树的第k层有 m^{k-1} 个结点(1<=k<=h)。

可以试例子试出答案

利用二叉链表存储树,则根节点的右指针 为空。

二叉链表存储树结构,那么任意节点的左孩子指向该结点的孩子结点,右孩子指针指向该节点的兄弟节点,因为这里是树,不是森林,所以树的根节点没有兄弟结点,则右指针是空。

在一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶结点个数是  82。
除了根节点之外,树的每个节点都有唯一的一个入度,因此计算出共有多少个出度,再加1就是树中总的节点数目。也就是20*4+10*3+1*2+10*1+1=123个
而四叉树里节点就5类,有4个孩子的,有3个孩子的,有2个孩子的,有1个孩子的,没有孩子的,现在前4类的数目知道了,是20+10+1+10=41,那么没有孩子的节点自然就是123-41=82个。

 一颗非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足 只有一个叶子结点

一定满足只有一个 叶子结点;可能满足 所有的结点均无左孩子或 所有的结点均无右孩子。

设哈夫曼树中有199个结点,则该哈夫曼树中有 100 个叶子结点。 

首先需要明白两个知识点:

    1、哈夫曼树中不存在度为1的节点,只有度为0和2的节点

    2、n0=n2+1

其次要会求解:

    设叶子结点的个数为n0,度为2的节点个数为n2,

    则求全部节点数为:n=n0+n2

    已知n0=n2+1,代入上式得:n=n2+1+n2=2*n2+1=199(题中给的数据)

    求得n2=99,由此可得叶子结点n0=100

若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则X的前驱为  X的左子树中最右结点。

引入二叉线索树的目的是 加快查找结点的前驱或后继的速度

设F是森林,B是由F变换而得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有  

根据森林转换为二叉树的“左孩子右兄弟”的表示法,即对于每棵二叉树,每个结点的右指针指向其右邻兄弟。

针对每一个非终端结点,一定会有且仅有一个孩子结点没有右邻兄弟,即右指针领域为空。因此N个非终端结点,就有N个右指针域为空。

看完单棵二叉树,再来看这些二叉树是怎么连接成一棵二叉树的。原理是:将后一棵二叉树的根节点作为前一棵二叉树的右孩子连接起来,所以只有最后一棵二叉树的根结点没有右孩子,即右指针域为空。

因此综上:N个非终端结点,就有(N+1)个结点的右指针域为空。

应用题

第六章 图

具有n个顶点的有向图最多有 n(n-1) 条边。

n个顶点的连通图用邻接矩阵表示时,该矩阵至少有 2(n-1) 个非零元素。 
所谓连通图一定是无向图,有向的叫做强连通图 连通n个顶点,至少只需要n-1条边就可以了,或者说就是生成树 由于无向图的每条边同时关联两个顶点,因此邻接矩阵中每条边被存储了两次(也就是说是对称矩阵),因此至少有2(n-1)个非零元素 

G是一个非连通无向图,共有28条边,则该图至少有 9 个顶点。

完全连通图n*(n-1)/2=28   n=8,题为非连通图,故还要加一个点 也就是9个顶点 

若从无向图的任意一个顶点出发进行一次深度优先搜索可以访问图中所有的顶点,则该图一定是 连通 图。 

普利姆算法 适合构造一个稠密图G的最小生成树。 

Prim算法适合构造一个稠密图G的最小生成树,Kruskal算法适合构造一个稀疏图G的最小生成树 

用邻接表表示图进行广度优先遍历时,通常可借助 队列 来实现算法。 

用邻接表表示图进行深度优先遍历时,通常可借助 栈 来实现算法。 

 图的深度优先遍历类似于二叉树的 先序遍历

深度优先遍历是先序遍历,广度优先遍历是层次遍历 

图的BFS生成树的树高比DFS生成树的树高 小或相等。 

 C

 画图可解

D;D 


拓扑排序 方法可以判断出一个有向图是否有环。

第七章 查找

 对包含n个元素的表进行顺序查找时,若查找每个元素的概率相同,则平均查找长度为(N+1)/2

 第一个数的比较次数为1,第二个数的比较次数为2。。。以此类推第N个数的比较次数为N,所以总的比较次数为1+2+...+N=N(N+1)/2,平均比较次数为(N+1)/2,也即平均查找长度。

 如果要求一个线性表既能较快地查找,又能适应动态变化的要求,最好采用 分块查找

分块查找是折半查找和顺序查找的一种改进方法;折半查找:查询速度快,不适合动态变化。顺序查找:查询速度慢,适合动态变化。 

对22个记录的有序表进行折半查找,当查找失败时,至少需要比较 4 次关键字。

 折半查找与二叉排序树的时间性能 有时不相同
不一定相同。 二叉排序树不一定是平衡树,它是只要求了左右子树与根结点存在大小关系,但是对左右子树之间没有层次差异的约束,因此通过二叉排序树进行查找不一定能够满足logn的,例如一棵只有多层左子树的二叉排序树。 只有是一棵平衡的二叉排序树时,其查找时间性能才和折半查找类似。

 C

二叉排序树的左子树小于根节点;右子树大于根节点。

在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A的左孩子的平衡因子为0,右孩子的平衡因子为1,则应作 RL 型调整以使其平衡。

 关于m阶B-树的说法

根结点至多有m棵子树;所有叶子都在同一层次上;非叶结点至少有m/2(m为偶数)或m/2+1(m为奇数)棵子树;所有结点中的数据都是有序的。

 关于B-和B+树的叙述中,

B-树和B+树都是平衡的多叉树;B-树和B+树都可用于文件的索引结构;B-树支持随机检索不支持顺序检索,B+树都支持;

m阶B-树是一棵 m叉平衡排序树。

A

第八章 排序 

 D

 D

 C

 D

 B

B

 C

 D

2018-2019第一学期

单选

 堆是一种平衡的数据结构。

AVL是一种平衡二叉搜索树。

2021-2022第一学期

2017

单选 

B;根据二叉树的性质可知,度为0的结点个数比度为2结点个数多一个,即n0=n2+1。

C

应用

 

算法

int count(LNode *head){LNode *p;int n=0;p=head;while(p!=NULL){if(p->data==x){n++;p=p->next;}
return(n);
}

int Search(SSTable ST, KeyType key){int i;ST.elem[0].key=key;for(i=ST.length;!EQ(ST.elem[i].key,key);--i){return i;
}

 2018

单选

C

 

 C

B; 小顶堆是根结点小于子结点

应用

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇编语言实验五、子程序和宏

1、编写子程序&#xff0c;传递一个字节无符号数组&#xff0c;返回最大值。要求用堆栈传递入口参数&#xff0c;返回值在al。 .MODEL SMALL,C .STACK 100H .DATA buf db 11h,33h,88h,55h,66h,44h,99h,22h,77h,01h buf_l equ lengthof buf buf_t equ type buf m db ? .CODE m…

零基础入门学用Arduino 第四部分(一)

重要的内容写在前面&#xff1a; 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后&#xff0c;整体感觉是很好的&#xff0c;如果有条件的可以先学习一些相关课程&#xff0c;学起来会更加轻松&#xff0c;相关课程有数字电路…

Playwright-html-report源码解析

执行命令生成html格式报告 Playwright在执行完成测试&#xff0c;支持生成html格式的测试报告&#xff0c;如下图所示&#xff0c;使用"npx playwright test"执行测试&#xff0c;执行完成后&#xff0c;会提示“npx playwright show-report”命令。执行该命令&#…

创维超充车辆交付仪式暨参观座谈会圆满举行

6月14日&#xff0c;创维超充车辆交付仪式暨参观座谈会在南京成功举行。苏舜集团副总经理程璟一行以及近多出行东部大区总经理张显春一行齐聚一堂。创维汽车总裁、联合创始人吴龙八等领导亲临现场&#xff0c;对各位尊贵嘉宾的到来表示热烈欢迎&#xff0c;并与众人共同见证了这…

RK3588/算能/Nvidia智能盒子:[AI智慧油站」,以安全为基,赋能精准经营

2021年9月&#xff0c;山东省应急管理厅印发了关于《全省危险化学品安全生产信息化建设与应用工作方案&#xff08;2021-2022 年&#xff09;》的通知&#xff0c;要求全省范围内加快推进危险化学品安全生产信息化、智能化建设与应用工作&#xff0c;建设完善全省危险化学品安全…

属于PCIe 7.0的那道光来了~

随着数据洪流的持续涌动与计算密集型应用的爆发式增长&#xff0c;传统的电子互连技术在应对高带宽、低延迟、节能等多维度需求时日益显现其局限性。在这个背景下&#xff0c;光学互连技术以其独特的性能优势&#xff0c;逐渐成为业界瞩目的焦点&#xff0c;被视为未来数据中心…

基于Umijs框架的人脸识别系统的服务端口号的更改方法

目录 一、问题描述 二、问题分析 1、umijs介绍 2、Umijs的端口配置 3、umijs的作用 4、尝试启动7000端口 5、再次查看配置文件 三、问题解决 1、更改package.json的start选项中的端口 2、结果验证 &#xff08;1&#xff09;项目启动日志查看 &#xff08;2&#x…

【正则表达式】入门

参考视频&#xff1a;10分钟快速掌握正则表达式_哔哩哔哩_bilibili 这个网站用来测试写的正则表达式效果&#xff1a;regex101: build, test, and debug regex 示例&#xff1a; 限定符 ? 表示前一个字符可有可无 比如这里输入&#xff1a;de? 匹配结果可以得到d和de * 前…

【进阶篇-Day3:JAVA接口新特性、代码块、内部类、Lambda表达式、组件等的介绍】

目录 1、接口新特性1.1 JDK8的新特性1.2 JDK9的新特性 2、代码块2.1 代码块的定义2.2 代码块的分类 3、内部类3.1 内部类的定义3.2 内部类成员访问3.3 学习内部类的原因3.4 内部类的分类3.4.1 成员内部类3.4.2 静态内部类3.4.3 局部内部类3.4.4 匿名内部类&#xff08;1&#x…

优化 Flutter 应用开发:探索 ViewModel 的威力

介绍 1.1 什么是 ViewModel&#xff1f; ViewModel&#xff0c;顾名思义&#xff0c;就是视图的模型。在 Flutter 中&#xff0c;ViewModel 是一种用于管理视图状态和业务逻辑的重要概念。它承载了应用程序的核心功能&#xff0c;像是一个精心设计的控制中心&#xff0c;负责…

智能车联网安全发展形势、挑战

一、技术演进加速车联网安全环境复杂变化 当前&#xff0c;5G、大数据、大算力、大模型等技术正加速在车联网领域实现融合应用。车联网的网络通信能力、感知计算水平以及创新业务应用都在快速发展&#xff0c;与此同时&#xff0c;车联网的网络安全环境也在随之演进变化&#…

刷题——两个链表相加

原题&#xff1a;链表相加(二)_牛客题霸_牛客网 还没有完全掌握&#xff0c;只学会了反转链表 两个链表相加代码如下 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ class Solution { public:/*** 代码中的…

【Go语言精进之路】构建高效Go程序:了解string实现原理并高效使用

&#x1f525; 个人主页&#xff1a;空白诗 &#x1f525; 热门专栏&#xff1a;【Go语言精进之路】 文章目录 引言一、Go语言的字符串类型1.1 字符串的定义1.2 字符串的零值可用1.3 字符串的不可变性1.4 字符串的拼接1.5 字符串的常用方法1.6 实际使用示例 二、字符串的内部表…

软件设计不是CRUD(23):在流式数据处理系统中进行业务抽象落地——详细编码

&#xff08;接上文《软件设计不是CRUD&#xff08;22&#xff09;&#xff1a;在流式数据处理系统中进行业务抽象落地——设计思考》&#xff09; 4、详细设计 项目开发初期&#xff0c;有两种测速雷达和对应的摄像头需要接入&#xff0c;分别是STC500型测速雷达和TTS400型测…

pip导出格式错乱问题

pip导出带有各种路径 pip只导出版本 pip list | tail -n 3 | awk {print $1""$2} > requirements.txt

国际荐酒师香港协会受邀参加2024年美国独立日庆祝活动

国际荐酒师&#xff08;香港&#xff09;协会受邀参加2024年美国独立日庆祝活动促进世界酒中国菜的全球化发展 2024年6月18日&#xff0c;国际荐酒师&#xff08;香港&#xff09;协会大中华区驻广州办事处荣幸地接受了美国驻广州总领事馆 Nicholas Burns大使和Lisa Heller总领…

20240616日志:大模型压缩方法DMS

Location: Beijing 1 大模型剪枝 Fig. 1.1大模型压缩-剪枝 剪枝的理论来源基于彩票假设&#xff08;Lottery Ticket Hypothesis&#xff09;&#xff0c;指在神经网络中存在一种稀疏连接模式&#xff0c;即仅利用网络的一小部分连接&#xff08;彩票&#xff09;就足以实现与整…

零撸项目:撸包看广告小游戏app开发源码

开发一个名为“撸包看广告小游戏”的APP涉及多个方面&#xff0c;包括前端界面设计、后端逻辑处理、广告集成以及小游戏开发等。然而&#xff0c;我不能直接提供特定的源码&#xff0c;因为这涉及到多个因素&#xff0c;如安全性、版权和定制化需求。但我可以为你提供一个大致的…

AntDesign Vue Radio 单选框

案例&#xff1a;基本用法 <script setup> import {ref} from "vue";const value ref(false) </script> <template><div class"p-8 bg-indigo-50 text-center"><a-radiov-model:checked"value"class"w-96&quo…

【C++17 之 .base() 函数实现正向和反向迭代器之间的交换,原理及代码展示】接上一p

在 C17 之前&#xff0c;如果你有一个反向迭代器&#xff08;std::reverse_iterator&#xff09;并希望获取其对应的正向迭代器&#xff0c;你通常需要做一些额外的转换或维护额外的正向迭代器。然而&#xff0c;从 C17 开始&#xff0c;std::reverse_iterator 提供了一个 .bas…