2023数据结构期中测验-2023秋-计算机+未来网络专业

数据结构期中测验

  • 选择题
  • 函数题
    • 6-1 求链式表的表长
    • 6-2 逆序数据建立链表
    • 6-3 删除单链表偶数节点
    • 6-4 求二叉树高度
    • 6-5 先序输出叶结点

为了防止不自觉的朝答案看去,特意用了浅色字体

选择题

2-1
下述程序段的时间复杂度为( )

for(i=0; i<n-1; i++for(j=0; j<n-1-i; j++)t=a[j], a[j]=a[j+1], a[j+1]=t;

A.O(1)
B.O(n)
C.O(n2)
D.O(n3 )、

答案:C。
显然,循环执行的次数是(n-1) +(n-2) + ··· +1, O(n2)

2-2
下列对顺序存储的有序表(长度为 n)实现给定操作的算法中,平均时间复杂度为 O(1) 的是:
A.查找包含指定值元素的算法
B.插入包含指定值元素的算法
C.删除第 i(1≤i≤n)个元素的算法
D.获取第 i(1≤i≤n)个元素的算法

答案:D
顺序表获可以通过访问下标取第 i个元素,时间复杂度 O(1)

2-3
将线性表La和Lb头尾连接,要求时间复杂度为O(1),且占用辅助空间尽量小。应该使用哪种结构?
A.单链表
B.单循环链表
C.带尾指针的单循环链表
D.带头结点的双循环链表
答案:C
线性表La和Lb头尾连接,要先找La的尾和Lb的头。对于带尾指针的单循环链表,尾结点的next即为头结点;而带头结点的双循环链表虽然也可以通过头结点的prev找到尾结点,题目要求占用辅助空间尽量小,选C

2-4
已知头指针 h 指向一个带头结点的非空单循环链表,结点结构为 data | next,其中 next 是指向直接后继结点的指针,p 是尾指针,q 是临时指针。现要删除该链表的第一个元素,正确的语句序列是:

A.h->next=h->next->next; q=h->next; free(q);
B.q=h->next; h->next=h->next->next; free(q);
C.q=h->next; h->next=q->next; if (p!=q) p=h; free(q);
D.q=h->next; h->next=q->next; if (p==q) p=h; free(q);

答案:D

2-5
假设有5个整数以1、2、3、4、5的顺序被压入堆栈,且出栈顺序为3、5、4、2、1,那么为了获得这样的输出,堆栈大小至少为:
A.2
B.3
C.4
D.5

答案:C

2-6
有六个元素以6、5、4、3、2、1的顺序进栈,问哪个不是合法的出栈序列?
A.2 3 4 1 5 6
B.3 4 6 5 2 1
C.5 4 3 6 1 2
D.4 5 3 1 2 6
答案:B

2-7
若栈采用顺序存储方式存储,现两栈共享空间V[m]:top[i]代表第i(i=1或2)个栈的栈顶;栈1的底在V[0],栈2的底在V[m-1],则栈满的条件是:
A.|top[2]-top[1]|==0
B.top[1]+top[2]==m

C.top[1] == top[2]
D.top[1]+1==top[2]
答案:D
栈满的条件是两个栈的栈顶指针相遇。因为在顺序存储结构中,当两个栈的栈顶指针相邻时,表示两个栈的空间已经满

2-8
循环队列的队满条件为 ( )
A.(sq.rear+1) % maxsize ==(sq.front+1) % maxsize
B.(sq.front+1) % maxsize ==sq.rear
C.(sq.rear+1) % maxsize ==sq.front
D.sq.rear ==sq.front

答案:C

2-9
表达式a*(b+c)-d的后缀表达式是:
A.a b c + * d -
B. a b c d * + -
C.a b c * + d -
D.- + * a b c d

答案:A
根据选项的后缀表达式还原即可,A是a(b+c)-d;B是a-(b+cd);C是a+bc-d;D纯扯淡,一眼顶真是前缀*

2-10
数组A[1…5,1…6]每个元素占5个单元,将其按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[5,5]的地址为:
A.1120
B.1125
C.1140
D.1145
答案:C
如图,自己算
在这里插入图片描述

2-11
二叉树中第5层(根的层号为1)上的结点个数最多为:
A.8
B.15
C.16
D.32
答案:C
二叉树中第n层结点数最多为2n-1

2-12
一棵二叉树中,双分支结点数为15,单分支结点数为30,则叶子结点数为()个。
A.15
B.16
C.17
D.47
答案:B
对于n个结点的二叉树,n = n0+n1+n2; n0 = n2 + 1,带入求解即可

2-13
以二叉链表作为二叉树的存储结构,在具有 n 个结点的二叉链表中(n>0),空链域的个数为 __
A.n+1
B.n
C.n−1
D.无法确定
答案:A
有n个结点,说明有2n个指针域,又因为n个结点的二叉树有n-1条边,那么空指针域就有2n-(n-1)=n+1

2-14
如果二叉树的后序遍历结果是FDEBGCA,中序遍历结果是FDBEACG,那么该二叉树的前序遍历结果是什么?
A.ABCDEFG
B.ABDFEGC
C.ABDFECG
D.ABDEFCG
答案:C

2-15
设每个d叉树的结点有d个指针指向子树,有n个结点的d叉树有多少空链域?
A.nd
B.n(d−1)
C.n(d−1)+1
D.以上都不是
答案:C
跟2-13一模一样

2-16
已知一棵二叉树的树形如下图所示,其后序序列为{ e, a, c, b, d, g, f }。树中与结点a同层的结点是:
在这里插入图片描述

A.c
B.d
C.f
D.g

答案:B
在这里插入图片描述

2-17
下列线索二叉树中(用虚线表示线索),符合后序线索树定义的是:

A. 在这里插入图片描述

B. 在这里插入图片描述

C. 在这里插入图片描述

D. 在这里插入图片描述
答案:B
因为是后序线索树,选项中树的后序遍历为dbca,因此d的前驱为NULL,排除CD;后继为b,排除A

2-18
具有65个结点的完全二叉树其深度为(根的深度为1):
A.8
B.7
C.6
D.5
答案:B
具有n个结点的完全二叉树的深度 = ⌊ log2n ⌋ +1

2-19
设一段文本中包含字符{a, b, c, d, e},其出现频率相应为{3, 2, 5, 1, 1}。则经过哈夫曼编码后,文本所占字节数为:
A.40
B.36
C.25
D.12
答案:C
在这里插入图片描述

2-20
由分别带权为9、2、5、7的四个叶子结点构成一棵哈夫曼树,该树的带权路径长度为:
A.23
B.37
C.44
D.46
答案:C
同上

函数题

6-1 求链式表的表长

本题要求实现一个函数,求链式表的表长。

函数接口定义:

cint Length( List L );

其中List结构定义如下:

typedef struct LNode *PtrToLNode;
struct LNode {ElementType Data;PtrToLNode Next;
};
typedef PtrToLNode List;

L是给定单链表,函数Length要返回链式表的长度。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>typedef int ElementType;
typedef struct LNode *PtrToLNode;
struct LNode {ElementType Data;PtrToLNode Next;
};
typedef PtrToLNode List;List Read(); /* 细节在此不表 */int Length( List L );int main()
{List L = Read();printf("%d\n", Length(L));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:
1 3 4 5 2 -1
输出样例:
5

解:

int Length( List L )
{int ret = 0;while(L){ret++;L = L->Next;}return ret;
}

6-2 逆序数据建立链表

本题要求实现一个函数,按输入数据的逆序建立一个链表。

函数接口定义:

cstruct ListNode *createlist();

函数createlist利用scanf从输入中获取一系列正整数,当读到−1时表示输入结束。按输入数据的逆序建立一个链表,并返回链表头指针。链表节点结构定义如下:

struct ListNode {int data;struct ListNode *next;
};

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>struct ListNode {int data;struct ListNode *next;
};struct ListNode *createlist();int main()
{struct ListNode *p, *head = NULL;head = createlist();for ( p = head; p != NULL; p = p->next )printf("%d ", p->data);printf("\n");return 0;
}/* 你的代码将被嵌在这里 */

输入样例:
1 2 3 4 5 6 7 -1
输出样例:
7 6 5 4 3 2 1
解:

struct ListNode* createlist()
{struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* cur = head;cur->next = NULL;int tmp = 0;scanf("%d",&tmp);while(tmp != -1){cur->data = tmp;scanf("%d",&tmp);struct ListNode* tmp = (struct ListNode*)malloc(sizeof(struct ListNode));tmp->next = cur;cur = tmp;}return cur->next;}

6-3 删除单链表偶数节点

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下:

struct ListNode {int data;struct ListNode *next;
};

函数接口定义:

struct ListNode *createlist();
struct ListNode *deleteeven( struct ListNode *head );

函数createlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

函数deleteeven将单链表head中偶数值的结点删除,返回结果链表的头指针。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>struct ListNode {int data;struct ListNode *next;
};struct ListNode *createlist();
struct ListNode *deleteeven( struct ListNode *head );
void printlist( struct ListNode *head )
{struct ListNode *p = head;while (p) {printf("%d ", p->data);p = p->next;}printf("\n");
}int main()
{struct ListNode *head;head = createlist();head = deleteeven(head);printlist(head);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:
1 2 2 3 4 5 6 7 -1
输出样例:
1 3 5 7
解:

struct ListNode *createlist()
{struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* cur = head;cur->data = -1;cur->next = NULL;int tmp = 0;while ( tmp != -1){scanf("%d", &tmp);if(tmp != -1){struct ListNode* ts = (struct ListNode*)malloc(sizeof(struct ListNode));cur->next = ts;ts->data = tmp;ts->next = NULL;cur = ts;}}return head->next;
}struct ListNode *deleteeven( struct ListNode *head )
{if(head->next == NULL){if(head->data%2 == 0)return NULL;elsereturn head;}struct ListNode *ret = head;while(ret->data%2 == 0){struct ListNode* del = ret;ret = ret->next;free(del);if(ret->next == NULL){if(ret->data%2 == 0)return NULL;elsereturn ret;}}struct ListNode * cur = ret;while(cur->next){if(cur->next->data%2 == 0){struct ListNode* del = cur->next;cur->next = cur->next->next;free(del);}elsecur = cur->next;}return ret;
}

6-4 求二叉树高度

本题要求给定二叉树的高度。

函数接口定义:

int GetHeight( BinTree BT );

其中BinTree结构定义如下:

typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{ElementType Data;BinTree Left;BinTree Right;
};

要求函数返回给定二叉树BT的高度值。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{ElementType Data;BinTree Left;BinTree Right;
};BinTree CreatBinTree(); /* 实现细节忽略 */
int GetHeight( BinTree BT );int main()
{BinTree BT = CreatBinTree();printf("%d\n", GetHeight(BT));return 0;
}
/* 你的代码将被嵌在这里 */

输出样例(对于图中给出的树):
在这里插入图片描述
4
解:

int max(int a,int b)
{return a>b?a:b;
}
int GetHeight( BinTree BT )
{if(BT == NULL)return 0;return max(GetHeight(BT->Left),GetHeight(BT->Right))+1;
}

6-5 先序输出叶结点

本题要求按照先序遍历的顺序输出给定二叉树的叶结点。

函数接口定义:

void PreorderPrintLeaves( BinTree BT );

其中BinTree结构定义如下:

typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{ElementType Data;BinTree Left;BinTree Right;
};

函数PreorderPrintLeaves应按照先序遍历的顺序输出给定二叉树BT的叶结点,格式为一个空格跟着一个字符。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{ElementType Data;BinTree Left;BinTree Right;
};BinTree CreatBinTree(); /* 实现细节忽略 */
void PreorderPrintLeaves( BinTree BT );int main()
{BinTree BT = CreatBinTree();printf("Leaf nodes are:");PreorderPrintLeaves(BT);printf("\n");return 0;
}
/* 你的代码将被嵌在这里 */

输出样例(对于图中给出的树):

在这里插入图片描述
Leaf nodes are: D E H I
解:

void PreorderPrintLeaves( BinTree BT )
{if(BT == NULL)return;if(BT->Left == NULL && BT->Right == NULL){printf(" %c",BT->Data);return;}PreorderPrintLeaves(BT->Left);PreorderPrintLeaves(BT->Right);
}

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

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

相关文章

Edge最新版本,关闭侧边栏,不需命令,更改设置就可

边栏展示 说明&#xff1a;Edge自动更新版本后&#xff08;版本 119.0.2151.58&#xff09;&#xff0c;出现了侧边栏&#xff0c;看着很不舒服&#xff0c;效果如上图 修改&#xff1a; 1、在设置找到侧栏 2、点击Copilot后&#xff0c;展示的页面中会有始终显示边栏这一开…

《洛谷深入浅出进阶篇》P3397 地毯————二维差分

上链接&#xff1a;P3397 地毯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P3397 上题干&#xff1a; 题目描述 在 nn 的格子上有 m 个地毯。 给出这些地毯的信息&#xff0c;问每个点被多少个地毯覆盖。 输入格式 第一行&#xff0c;两个…

高通SDX12:ASoC 音频框架浅析

一、简介 ASoC–ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。 本文基于高通SDX12平台,对ASoC框架做一个分析。 二、整体框架 1. 硬件层面 嵌入式Linux设备的Audio subsystem可以划分为Machine(板…

业务连续性:确保稳健运营的关键战略

在今天的快节奏商业环境中&#xff0c;保障业务连续性是企业成功的重要保障。业务连续性不仅仅是关于应对自然灾害或技术故障&#xff0c;更是一项战略&#xff0c;涉及组织的整体准备、规划和应对能力&#xff0c;以确保在各种情况下业务的稳健运营。 一、业务连续性的定义 业…

Docker - 企业项目

Docker - 企业项目 因为环境原因&#xff0c;本章本人没有实际操作&#xff0c;以理论为主 容器单独没有什么意义&#xff0c;有意义的是容器的编排 Docker 4台&#xff1a;1核2G的ECS K8s 9台&#xff1a;2核4G的ECS Docker Compose Docker Swarm # manager节点初始化sw…

【C++11】线程库

文章目录 thread 线程库mutex 锁atomic 原子性操作condition_variable 条件变量实现两个线程交替打印1-100 thread 线程库 在C11之前&#xff0c;涉及到多线程问题&#xff0c;都是和平台相关的&#xff0c;比如Windows和Linux下各有自己的接口&#xff0c;这使得代码的可移植…

(Matalb时序预测)GWO-BP灰狼算法优化BP神经网络的多维时序回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分代码展示&#xff1a; 四、完整代码数据说明手册下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于M…

01:2440----点灯大师

目录 一:点亮一个LED 1:原理图 2:寄存器 3:2440的框架和启动过程 A:框架 B:启动过程 4:代码 5:ARM知识补充 6:c语言和汇编的应用 A:代码 B:分析汇编语言 C:内存空间 7:内部机制 二:点亮2个灯 三:流水灯 四:按键控制LED 1:原理图 2:寄存器配置 3:代码 一:点…

DNS服务器典型配置

文章目录 安装主程序bind和安全插件bind-root修改主配置文件/etc/named.conf正向解析 安装主程序bind和安全插件bind-root yum install bind-chroot修改主配置文件/etc/named.conf vim /etc/named.conf将listen-on和allow-query的ip或域名换成any 表示为服务器所有的IP地址启…

利用Nextcloud搭建企业私有云盘系统

利用Nextcloud搭建企业私有云盘系统 1. 场景介绍2. 环境准备3. 安装NextCloud4. 系统功能验证 1. 场景介绍 Nextcloud是一款免费开源的私有云存储系统&#xff0c;采用PHPMySQL开发&#xff0c;提供了多个同步客户端支持多种设备访问&#xff0c;使用Nextcloud可以快速便捷地搭…

调用一个RPC服务的三重境界

开篇词 毫无疑问微服务架构是目前最主流的大型互联网应用系统架构方式&#xff0c;因为一个大型系统被拆分为若干个子应用&#xff0c;故子应用之间相互调用进行数据读写这件事情变得像呼吸一样普遍。每个一个程序员都能够写代码实现一个RPC服务的调用&#xff0c;但不同的实现…

天软特色因子看板 (2023.11 第10期)

该因子看板跟踪天软特色因子A05006(近一月单笔流入流出金额之比(%)该因子为近一个月单笔流入流出金额之比(%)均值因子&#xff0c;用以刻画 市场日内分时成交中流入、流出成交金额的差异性特点&#xff0c;发掘市场主力资金的作用机制。 今日为该因子跟踪第10期&#xff0c;跟踪…

HarmonyOS 学习记录

时光荏苒,岁月如梭,韶华不负,未来可期。转眼间已经30岁了&#xff0c;学习的重要性不言而喻&#xff0c;在接下来的日子里记录下自己学习HarmonyOS的过程。增加一下知识储备&#xff0c;防患于未然嘛 不得不说华为的开发文档写的不错&#xff0c;开发工具直接安装后自动配置环境…

【Ubuntu】Windows访问Ubuntu时“需要认证”界面卡住

情况描述 基本情况 本地电脑&#xff1a;Microsoft Windows [版本 10.0.19045.3570] 远程电脑&#xff1a;Ubuntu 20.04.6 LTS 远程电脑安装辅助远程工具&#xff1a;xrdp 0.9.12 问题描述&#xff1a;认证页面输入密码&#xff0c;点击认证以后认证按钮不可点击&#xff0c;无…

Vue修饰符(Vue事件修饰符、Vue按键修饰符)

目录 前言 Vue事件修饰符 列举较常用的事件修饰符 .stop .prevent .capture .once Vue按键修饰符 四个特殊键 获取某个键的按键修饰符 前言 本文介绍Vue修饰符&#xff0c;包括Vue事件修饰符以及按键修饰符 Vue事件修饰符 列举较常用的事件修饰符 .stop: …

半平面求交 - 洛谷 - P3194 [HNOI2008] 水平可见直线

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 往期相关背景点击前往 题目大意 题目链接 https://www.luogu.com.cn/problem/P3194 在直角坐标系中给定一些直线&#xff0c;然后从Y轴无穷大处往0处看&#xff0c;…

EDA实验------数控分频器设计(QuartusII)

目录 一、实验目的 二、实验原理 三、实验内容 四、实验步骤 五、注意事项 六、思考题 七、实验过程 分频器的基本原理 什么是分频器&#xff1f; 如何去分频&#xff1f; 1.创建新项目 2.创建Verilog文件&#xff0c;写入代码 3.连接电路 ​编辑 锁相环的创建 4…

ubuntu18.04安装google浏览器

下载google安装包 wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 安装google浏览器 sudo dpkg -i google-chrome-stable_current_amd64.deb 执行安装 sudo apt-get -f install 启动浏览器 在应用程序中找到google图标点击运行

物联网AI MicroPython学习之语法 GPIO输入输出模块

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; GPIO 介绍 模块功能: GPIO通用输入输出。 接口说明 GPIO - 构建GPIO对象 函数原型&#xff1a;Pin(port, dir , pull)参数说明&#xff1a; 参数类型必选参数&#xff1f;说明portintY对应开发板的引脚号…