【数据结构】复习题(一)

一、选择题
1.组成数据的基本单位是()。
A. 数据项 B.数据类型 C.数据元素 D.数据变量

2.设数据结构A={D,R},其中D={1,2,3,4},R={r},r={<1,2>,<2,3>,< 3,4>,<4,1>},则数据结构A是()。
A.线性结构 B.树型结构 C.图型结构 D.集合

3.数组的逻辑结构不同于下列()的逻辑结构。
A.线性表 B.栈 C.队列 D.树

4.二叉树第i(i≥1)层上的结点最多有()个。
A.2i B. 2 i 2^i 2i C. 2 i − 1 2^{i-1} 2i1 D.2i-1

5.设指针变量p指向单链表结点A,则删除结点A的后继结点B所需的操作为()。
A.p->next=p->next->next
B.p=p->next
C.p=p->next->next
D.p->next=p

6.设栈S和队列Q的初始状态为空,元素E1,E2,E3,E4,E5,E6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素的出列顺序为E2、E4、E3、E6、E5和E1,则栈S的容量至少应该是()。
A.6 B.4 C.3 D.2
见图解:

根据队列的性质,先进先出,所以进入队列Q的顺序也是E2、E4、E3、E6、E5、E1
同时这也是出栈S的顺序。
A.6 B.4 C.3 D.2
由此可知,栈S的容量至少为3.

7.将10阶对称矩阵压缩存储到一维数组中,则数组A的长度最少为()。
A.100 B.40 C.55 D.80
10阶矩阵共有100个元素,其对角线元素共有10个,对角线以上或者一下的元素共有(100-10)/2=45个,加上对角线的元素个数,即数组A的长度最少为55个。

8.设结点A有3个兄弟结点且结点B为结点A的双亲结点,则结点B的度数为()。
A.3 B.4 C.5 D.1

9.根据二叉树的定义可知,二叉树共有()种不同的形态。
A.4 B. 5 C.6 D.7

10.假设有一下四种排序方法,则()的空间复杂度最大。
A.冒泡排序 B.快速排序 C.堆排序 D.希尔排序
冒泡排序、堆排序、希尔排序的空间复杂度都是O(1)。快速排序算法中有递归,递归的深度,为O(logn),即快速排序所需要的辅助空间为O(logn)。

二、填空题
1.设顺序循环队列Q[0:m-1]的队头指针和队尾指针分别为F和R,其中队头指针F指向队头元素的前一个位置,队尾指针指向当前队尾元素所在的位置,则出队列的语句是F=(F+1)%m

2.设线性表中有n个数据元素,则在顺序存储结构上实现顺序查找的平均时间复杂度为_____,在链式存储结构上实现顺序查找的平均时间复杂度为______。
在顺序存储结构上实现顺序查找,最好情况是,比较1次,最坏情况是比较n次,平均比较次数为(n+1)/2,所以平均时间复杂度为O(n)
在链式存储结构上实现顺序查找,最好情况是,比较1次,最坏情况是比较n次,平均比较次数为 (n+1)/2,则平均时间复杂度为O(n)

3.设一颗二叉树有n个结点,则当用二叉链表作为其存储结构时,该二叉树中共有____个指针域,____个空指针域。
二叉树的链式存储方式下,每个结点包含3个域,分别是属性值data域,两个指针域lchild和rchild。

显然,该二叉树中共有2n个指针域。
空指针域=度为1的结点数+2×叶子结点树。
即空指针域 = n 1 + 2 n 0 =n_1+2n_0 n1+2n0
首先 n = n 1 + n 2 + n 0 n=n_1+n_2+n_0 n=n1+n2+n0
n = n 1 + 2 n 2 + 1 n=n_1+2n_2+1 n=n1+2n2+1
联立上面两个式子得到, n 1 + 2 n 0 = n + 1 n_1+2n_0=n+1 n1+2n0=n+1

4.指针变量p指向单链表中结点A,指针变量s指向被插入的结点B,则在结点A的后面插入结点B的操作序列为____。
s->next=p->next;
p->next=s;

6.设无向图G中有n个顶点和e条边,则其对应的邻接表中有_____个表头结点和___个表结点。
无论是有向图还是无向图,图中有几个顶点,就对应邻接表有几个表头结点。所以对应的邻接表有n个表头结点。
对于表结点,一般是对应图中的顶点与顶点之间的关系,对于有向图,表头结点的个数是图中的边数,对于无向图,需要×2。
故,n ,2e
6.设无向图G中有n个顶点e条边,所有顶点的度数之和为m,则e和m有___关系。
这道题,同上面的题思路一样,可以得知m=2e

7.设一颗二叉树的前序遍历和中序遍历序列均为ABC,则该二叉树的后序遍历序列为______。
首先根据二叉树的前序和中序遍历,可以画出这颗二叉树,从而写出后序遍历。

8.设一颗完全二叉树中有21个结点,如果按照从上到下,从左到右的顺序从1开始顺序编号,则编号为8的双亲结点的编号为_____,编号为8的左孩子结点的编号为____。

因为题目说编号为8,还行,不是很大,所以直接无脑画出来,然后就知道了。
4,16.

9.下列程序段的功能实现子串t在主串s中位置的算法,要求在下划线处填上正确语句。

int index(char s[],char t[])//函数参数主串s和子串tint i=j=0;
    while(i<strlen(s) && j<strlen(t) )
    {
        if (s[i]=t[j])
        {
            i=i+1;//主串指针移动
            j=j+1;//子串指针移动
        }
        else//填空
           //继续循环匹配
           i=i-j+1;//主串从原来开始匹配的那个元素的下一个元素继续
           j=0;//子串仍然从第一个位置开始比较}
    if (j==strlen(t)) //t的值只能为0-t 当j=t时说明匹配成功
    {
        return (i-strlen(t));//返回位置
    }
    else 
        return -1;
}

10.设一个连通图G中有呢个顶点e条边,则其最小生成树上有____条边。
生成树的定义是一个包含连通图中所有顶点的树,并且只包含连通图中的边。
因为一个连通图中的生成树只需要包含所有结点,所以生成树的边数比顶点少1。即当一个连通图具有n个顶点时,它的生成树将有n-1条边。

三、应用题
1.设一颗完全二叉树的顺序存储结构中存储数据ABCDE,要求给出该二叉树的链式存储结构,并给出该二叉树的前序、中序和后序遍历序列。

2.设给定一个权值集合 W={3,5,7,9},要求根据跟定的权值集合构造一颗哈夫曼树,并计算哈夫曼树的带权路径WPL。

3.设一组初始记录关键字序列为(19,21,16,5,18,23),要求给出以19为基准的一趟快速排序结果以及第2趟直接排序后的结果。

【快速排序】的基本步骤:
先将第一个记录(设排序码为x)缓存,这样就空出了一个位置,改位置应该存放排序码不大于x的记录,将它放在第一个位置,这样,后面又空出一个位置,它应该放排序码大于x的记录,反过来又从第二个记录开始向右找一个排序码大于x的记录,将它放在后面空出的位置,重复这种两边向中间逼近的过程,可以将所有排序码不大于x的记录放在前面,而所有排序码大于x的记录放在后面,最后当两边逼近于同一位置时,便将暂存的x放于该位置,即达到了划分的目的。
【直接选择排序】
直接选择排序是一种简单的排序方法,首先从所有n个待排记录中选择排序码最小的记录,将该记录与第一个记录交换,再从剩下的n-1个记录中选出排序码最小的记录与第二个记录交换。重复这样的操作直到剩下两个记录时,再从中选取排序码最小的记录和第in-1个记录交换。剩下的那一个记录肯定是排序码最大的记录,这样排序即完成。


4.设置=一组初始记录关键字集合为(25,10,8,27,32,68),散列表的长度为8,散列函数为H(k)=k mod 7,要求分别用线性探测和链地址法作为解决冲突的方法设计哈希表。
先求出每个关键词所对应的函数值。

用线性探测法解决:

(这里我第一遍做错了,原因是,线性表的长度为8)

用链地址法解决:

5.设无向图G,给出该图的深度优先和广度优先遍历的序列,并给出该图的最小生成树。

这里的深度优先和广度优先遍历答案不唯一。
给出其中的一种:
深度优先遍历:
125364
广度优先遍历:
123456
分别用Kruskal算法和Prim算法来生成最小生成树。
在这里插入图片描述

四、
1.设计算法判断单链表中结点是否关于中心对称算法。
思路:我们可以利用栈结构来解这道题。
关于链表对称,一是可以认为找到单链表的中心点,单链表左边和链表右边关于中心点对称。
二是可以认为,将单链表倒置,和原来的一样。
关于算法的设计,采用二思路可以更简洁地完成。

首先,创建栈机构。

typedef struct{
    int s[100];
    int top;
}sqstack;

然后创建函数。

int 1Klistsymmetry(1klist *head)
{
    //创建栈并初始化栈结构
    sqstack stack;
    stack.top=-1;
    1klist *p;
    
    //元素入栈
    for (p=head;p!=0;p=p->next)
    {
        stack.top++;
        stack.s[stack.top]=p->data;
    }
    //匹配
    for (p=head;p!=0;p=p->next)
    {
        //如果相等 出栈
        if (p->data==stack.s[stack.top])
            stack.top=stack.top--;
        else
            //不相等直接返回
            return 0;
    }
    return 1;

}

2.设计在链式存储结构上建立一颗二叉树的算法。

利用递归的思想来建立二叉树。
定义结点。

typedef char datatype;
typedef struct node
{
    datatype data;
    struct *lchild;
    struct *rchild;
}bitree;
void createbitree (bitree t)
{
    char ch;
    scanf("%c",&ch);
    if(ch=='#')
    {
        t=NULL;
        return;
    }
    else
    {
        t=(bitree*)malloc(sizeof(bitree));
        t->data=ch;
        //创建左子树
        createbitree(t->lchild);
        //创建右子树
        createbitree(t->rchild);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络网络层(期末、考研)

计算机网络总复习链接&#x1f517; 目录 路由算法静态路由与动态路由距离-向量算法链路状态路由算法层次路由 IPv4&#xff08;这个必考&#xff09;IPv4分组IPv4地址与NAT子网划分与子网掩码、CIDRARP、DHCP与ICMP地址解析协议ARP动态主机配置协议DHCP IPv6IPv6特点 路由协议…

山西电力市场日前价格预测【2023-12-16】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-12-16&#xff09;山西电力市场全天平均日前电价为259.00元/MWh。其中&#xff0c;最高日前电价为333.74元/MWh&#xff0c;预计出现在18:00。最低日前电价为0.00元/MWh&#xff0c;预计出…

alibaba druid连接池

alibaba druid连接池 如果是SpringBoot 3.x&#xff0c;使用以下依赖 com.alibaba druid-spring-boot-3-starter ${druid-spring-boot-starter.version} application.yml配置 登录页面配置 切面监控springboot类 对 Web 请求的监控 配置filter&#xff0c;收集统计信息&#x…

深度剖析JavaScript中冒泡和捕获机制、事件代理

JS事件传播的两种机制包括冒泡和捕获&#xff0c;下面将具体剖析它们之间本质的区别。 事件冒泡: 先触发子元素的事件&#xff0c;再触发父元素的事件。 创建一个 ul label 和 li label, 分别绑定一个父id 和 子 id, 再通过创建 script&#xff0c;去绑定各自的点击事件。 <…

【C++】封装:练习案例-设计立方体类

练习案例&#xff1a;设计立方体类 设计立方体类(Cube) 求出立方体的面积和体积 分别用全局函数和成员函数判断两个立方体是否相等。 思路&#xff1a; 1&#xff09;创建立方体类 2&#xff09;设计属性 长&#xff0c;高&#xff0c;宽 3&#xff09;设计行为 获取立方…

配置 vim 默认显示行号 行数 :set number

vi ~/.vimrc 最后添加一行 :set number保存退出&#xff0c;再次 vim 打开文件&#xff0c;默认就会显示行号了

SpringBoot - application.yml 多环境切换解决方案

问题描述 这个问题玩过 SpringCloud 的小伙伴估计会想到用 bootstrap.yml 来解决这个问题。但是如果说为了解决这个问题引入了一堆的 SpringCloud Jar&#xff0c;就感觉杀鸡用牛刀。 于是今天我们想只有 application.yml 自己就可以解决这个问题&#xff0c;如何搞定&#x…

vue中2种取值的方式

1.url是这种方式的&#xff1a;http://localhost:3000/user/1 取得参数的方式为&#xff1a;this.$route.params.id 2.url为get方式用&#xff1f;拼接参数的&#xff1a;http://localhost:3000/user?phone131121123&companyId2ahttp://localhost:3000/ 取得参数值的方式…

linux脚本中 #!/bin/sh、#!/bin/bash

我们通常看到的脚本文件总是有以下这样的开头&#xff1a; #!/bin/bash本文解释一下这是什么&#xff0c;以及为什么要写它。 首先解释一下 #! &#xff0c;因为 #!有个专有的名词&#xff0c;叫 shebang 发音类似中文的 “蛇棒” 。为什么叫 shebang 呢&#xff1f; 首先 #…

连锁管理系统是什么?有哪些功能?

连锁管理系统帮助门店实现POS收银管理、门店管理、采购订货管理、线上商城搭建、供应链管理一体化管理系统&#xff0c;快速提高门店管理效率&#xff0c;无论你的门店有多少&#xff0c;连锁总部都能通过系统随时洞察监管门店的所有运营数据。 连锁管理系统由&#xff1a;1个…

Web安全漏洞分析—文件包含

在当今数字化时代&#xff0c;随着Web应用程序的广泛应用&#xff0c;网络安全问题愈加凸显。其中&#xff0c;文件包含漏洞作为一种常见但危险的安全隐患&#xff0c;为恶意攻击者提供了可乘之机。在这篇博客中&#xff0c;我们将深入探讨文件包含漏洞的本质、攻击手法以及应对…

visio打出根号,下标,并调整符号的大小

插入公式对象 打出根号和带下标的字母 调整符号大小 把做好的公式符号弄到visio中的图中 ctrla 复制符号 进入visio中粘贴 并 调整大小 调整大小直接拖动边框上的圆点即可。

【数据结构】八大排序之希尔排序算法

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 一.优化直接插入排序算法 我们在之前对直接插入排序算法的优化部分通过对直接插入排序的分析可以得到一个结论,即: 进行直接插入排序的数组,如果越接近局部有序,则后续进行直…

软件设计师——计算机组成原理(三)

&#x1f4d1;前言 本文主要是【计算机组成原理】——软件设计师——计算机组成原理的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

计算机网络:运输层

0 本节主要内容 问题描述 解决思路 1 问题描述 1.1 知识回顾 利用如下拓扑对前面的知识进行回顾。 图1 拓扑图 问题&#xff1a;源主机 H 1 \textrm{H}_1 H1​要和目的主机 H 2 \textrm{H}_2 H2​进行通信&#xff0c;源主机 H 1 \textrm{H}_1 H1​要构建数据包封装来自应…

SQL进阶理论篇(九):为什么不存在完美的索引

文章目录 简介索引片和过滤因子如何通过宽表避免回表什么是过滤因子理想索引设计&#xff1a;三星索引为什么很难存在理想的索引设计&#xff1f;参考文献 简介 本节将主要介绍以下部分&#xff1a; 什么是索引片&#xff0c;什么是过滤因子&#xff1f;设计索引的时候&#…

1847_MOSFET预驱以及作用

Grey 全部学习内容汇总&#xff1a;GitHub - GreyZhang/g_hardware_basic: You should learn some hardware design knowledge in case hardware engineer would ask you to prove your software is right when their hardware design is wrong! 1847_MOSFET预驱以及作用 MO…

5分钟部署你的第一个K8S应用

查看k8s集群信息 kubectl cluster-info查看节点信息 kubectl get node查看内部组件 kubectl get pod -A部署第一个K8S应用-Nginx&#xff0c;并通过公网ip访问 创建deployment&#xff08;Pod控制器的一种, 直接删除pod后&#xff0c;会自动创建新的&#xff0c;需要删除de…

黑马头条--day02.文章列表查看

目录 一.分表 1.导入数据库sql脚本 2.导入实体类 3.分表规则 二.文章列表接口 (1)思路 2)接口定义 3)功能实现 1.1)&#xff1a;导入heima-leadnews-article微服务&#xff0c;资料在当天的文件夹中 1.2)&#xff1a;定义接口 1.3)&#xff1a;编写mapper文件 1.4)&…

Support Vector Machine(SVM)——支持向量机

1.从逻辑回归到SVM 回顾一下逻辑回归的模型 然后经过sigmoid函数得到预测y1的概率&#xff0c;sigmoid函数如下图 对于单个样本来说损失函数如下 当一个输入的真实标签为1时&#xff0c;损失函数就只剩&#xff0c;如左图所示,我们想要让&#xff0c;来使损失函数尽可能的小 对…