斗罗世界中的C语言与数据结构:第二章

215 阅读4分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

斗罗世界中的C语言与数据结构:第二章

上一章我们讲到了夕羽颜参加了史莱克学院工程师系的入学考试,他成功的解决了第一关的四个问题进入第二关,下面第二关就是考验他们的动手能力。

下面来看题目...

image-20220326170720229

这是第一题,似乎没有什么难度。夕羽颜开启武魂,武魂自动帮他把完成了这道题目。

 #include <stdio.h>
 ​
 int fac(int n){
     if(n<0){
         printf("error!");
     }
     else if(n==1||n==0){
         return 1;
     }
     return n * fac(n-1);
 }
 ​
 int main(){
     int n;
     scanf("%d",&n);
     printf("%d", fac(n));
 }

然后就是第二题:

image-20220326170739398

这一题有点麻烦,但是夕羽颜乃是计算机武魂,只见他不断敲打着计算机武魂的键盘...

终于他解决了这个问题:

 #include <stdio.h>
 #include <stdlib.h>
 ​
 int main(){
     char filename[20];
     printf("请输入要使用的文件名:");
     scanf("%s",filename);
     FILE *fp =(fopen(filename,"w"));
     if(fp==NULL){
         printf("不能打开文件\n");
         exit(0);
     }
     char ch = fgetc(stdin);
     while(ch!='#'){
         fputc(ch,fp);
         putchar(ch);
         ch = fgetc(stdin);
     }
     fclose(fp);
     return 0;
 }

image-20220326170759897

image-20220326170822424

我们可以看到,多读入了一个回车符,因此我们可以在第一个fget()之前加入一个getchar()就可以了。

image-20220326170850087

夕羽颜轻松通过第三关考核,接下来便是第四关,考核数据结构的能力。

下面是第一题:

image-20220326171007154

数据的存储结构有:顺序存储,链式存储,索引存储,散列存储

其中哈希表是散列存储,而线索树和双向链表是链式存储。

而逻辑结构是存在与人脑逻辑中是假定数据关系的结构,而栈就是逻辑结构,既可以使用顺序存储也可用链式存储。

下面是第二题:

若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是( )。

很多人第一想法就是i-j+1,确实,如果按照正常思维来说确实是这样,但是我们考虑的是i大于j的情况,如果i<j,那么j还没入栈,第j个就不知道是哪个了,栈随时可以入栈和出栈。如果全部入栈了,那么第一个出栈的是n,第j个即n-j+1了。

下面是第三题:

image-20220326171022497

这个题目貌似有点难度,但是其实只要我们记忆了一个公式即可,对任何非空的二叉树,如果叶结点也就是度为0的结点个数为n,度为2的结点个数为m,那么有关系:n = m + 1.

所以这里有10个度为2的结点,所以有11个度为0的结点。

第4题:

image-20220326171040785

二叉排序树又称二叉搜索树、二叉查找树,其左节点比根节点关键字小,而右节点比根节点关键字大。哈夫曼树只有叶子节点有关键字,我们需要知道的是,哈夫曼树的总节点值为两倍叶子节点数-1.而平衡二叉树是带有平衡功能会旋转的二叉排序树。上面三种皆不是,而堆的子节点总比根节点大或小,所以任一节点到根的路径都是有序的,要么是升序,要么是降序。

第5题:

image-20220326171056828

这一题夕羽颜看着有点不知所措,毕竟他只是小孩子,阅读能力还不够强,但是他没有放弃,驱动精神力仔细阅读...可是这题目上面好像施加了什么古老的魂导法阵,让他的精神力如同泥牛入海一般,这时,精神之海中的丘山子突然说话了。

“这题选C,A选项求关键路径是以拓扑排序为基础的,是正确的,我们一个工程内的各事件是有先后次序的,而求关键路径是需要按照这个先后次序排列的,所以是基于拓扑排序的。B选项也是正确的,我们以下图为例,例如事件v2的最早发生时间是6,而以该事件为尾的活动a4的最早发生时间就是v2的最早发生时间6,因为事件v2完成了,活动a4才能开始。D选项也是正确的,关键路径上的活动都称为关键活动。至于错误选项C,我们看下图,v7的最迟开始时间为最大路径长度-a10。而活动a10的最迟开始时间为v9-a10。我们能够很轻松的知道这两个值是相等的,所以选项C应该改为一个事件的最迟开始时间为以该事件为头的弧的活动最迟开始时间与该活动的持续时间的和。“

img

夕羽颜强忍着痛苦选择了C选项,考核也随之结束,他是第一个通过第三关考核的人...