复试专业课问题
- 1、数据结构:详细描述归并排序的过程
归并排序是用分治思想,分治模式在每一层递归上有三个步骤:
- 分解(Divide):将n个元素分成个含n/2个元素的子序列。
- 解决(Conquer):用合并排序法对两个子序列递归的排序。
- 合并(Combine):合并两个已排序的子序列已得到排序结果。
- 2、操作系统:什么是动态重定位,
- 在程序运行过程中要访问数据时再进行逻辑地址与物理地址的变换(即在逐条指令执行时完成地址映射)
3、计算机网络:什么是子网掩码,请简述其原理及其应用。
子网掩码 (subnet mask) 又叫网络掩码、地址掩码、子网络遮罩,是一个应用于 TCP/IP 网络的 32 位二进制值。它可以屏蔽掉 IP 地址中的一部分,从而分离出 IP 地址中的网络部分与主机部分,基于子网掩码,管理员可以将网络进一步划分为若干子网。它必须结合 IP 地址一起使用。
在使用 TCP/IP 协议的两台计算机之间进行通信时,我们通过将本机的子网掩码与接受方主机的 IP 地址进行 ' 与 '运算,即可得到目标主机所在的网络号,又由于每台主机在配置 TCP/IP 协议时都设置了一个本机 IP 地址与子网掩码,所以可以知道本机所在的网络号。
通过比较这两个网络号,就可以知道接受方主机是否在本网络上。如果网络号相同,表明接受方在本网络上,那么可以通过相关的协议把数据包直接发送到目标主机;如果网络号不同,表明目标主机在远程网络上,那么数据包将会发送给本网络上的路由器,由路由器将数据包发送到其他网络,直至到达目的地。
4、
①从键盘上输入数字1-7,输出对应的日期。
#include <stdio.h>int main()
{int a;printf("Please input a single numeral(1-7): ");scanf("%d",&a);if (a==1)printf("Sunday\n");else if (a==2)printf("Monday\n");else if (a==3)printf("Tuesday\n");else if (a==4)printf("Wednesday\n");else if (a==5)printf("Thursday\n");else if (a==6)printf("Friday\n");else if (a==7)printf("Saturday\n");elseprintf("Invalid - please input a single numeral(1-7).\n");return 0;
}
②计算从100-500的所有素数个数以及其中所有素数之和。
#include<stdio.h>
int prime(int n) //定义函数判断素数
{
int i,flag=1;
for(i=2;i<n/2;i++)
if(n%i==0)flag=0;
if(flag==0)return 0;
else return 1;
}
void main() //主函数
{
int i,sum=0;
for(i=100;i<=500;i++)
if(prime(i)==1)sum+=i;
printf(">> sum=%d\n",sum);
}
③输出5*5矩阵中的最大值和最小值,以及其下标。
#include <stdio.h>void fun(int *p,int n)
{int *pmax,*pmin,*m;int t;pmax = pmin = m = p; //四个指针均指向一维空间的起始单元//找最大数和最小数for(m=m+1;m<p+n;m++){if(*m > *pmax){pmax = m;}if(*m < *pmin){pmin = m;}}//把最大数放到中心位置 t = *(p+2*5+2);*(p+12) = *pmax;*pmax = t;//把最小值放到左上角t = *p;*p = *pmin;*pmin = t;//找次小数pmin = p+1;m = p + 2;for(; m<p+n;m++){if(*m < *pmin){pmin = m;}}//把次小数置换到右上角t = *(p+4);*(p+4) = *pmin;*pmin = t;//找次次小数pmin = p+1;m = p+2;for(; m<p+n;m++){if( (*m<*pmin)&&(m!=(p+4)) ){pmin = m;}}//把次次小数置换到左下角 [4][0]——>4*5+0t = *(p+20);*(p+20) = *pmin;*pmin = t;//找出此次次次小数pmin = p+1;m = p+2;for(; m<p+n;m++){if( (*m<*pmin)&&(m!=(p+4))&&(m!=(p+20)) ){pmin = m;}}//把次次次小数置换到右下角 [4][4]——>24t = *(p+24);*(p+24) = *pmin;*pmin = t;
} int main()
{int a[5][5],i,j;for(i=0;i<5;i++){for(j=0;j<5;j++){scanf("%d",&a[i][j]);}}fun(*a,25);for(i=0;i<5;i++){for(j=0;j<4;j++){printf("%d ",a[i][j]);}printf("%d",a[i][j]);printf("\n");} return 0;
}
④从输入的字符串中找出数字,并将其删除后输出。
#include<stdio.h>int dele(char x[]){int i = 0; int j = 0;while (x[i] != '\0'){ if (x[i] >= '0'&&x[i] <= '9') //用ASCII判断x[]数组内容是否为数字i++; //只加i变量,相当于剔除当字符串某一字符为数字剔除下标else{x[j] = x[i]; i++; j++;}}x[j] = '\0'; //末尾的下标是没\0的,需要加进去return x[j];
}int main()
{char str[100]; //char型数组存字符;int型数组存整形printf("Please input a sentence\n");//scanf("%s", str); //遇到空格\t \n停止gets(str); //遇到回车停止dele(str);printf("The new string is:%s\n", str);return 0;
}
⑤定义结构体 typedef struct { int sno; char name [10]; } 从键盘上输入学生信息,并将其写入文件“student.dat”中,输入学号为0时即停止输入。
#include <stdio.h>
#include <string.h>typedef struct {int sno;char name[10];
} Student;int main() {Student student;printf("请输入学生的学号和姓名(学号和姓名之间用空格隔开):");scanf("%d %9s", &student.sno, student.name); // 使用%9s限制字符串长度为9,避免溢出printf("学号: %d, 姓名: %s\n", student.sno, student.name);return 0;
}
⑥递归方法写出直接插入排序。
public static void sort(int []arr,int k) {if(k==0) { //递归的出口return; //第一个元素不用去排序}sort(arr,k-1); //对从0到倒数第二个元素排序int x=arr[k]; int index=k-1; //设置指针while(index>-1&& x<arr[index]) { //对最后一个元素进行插入arr[index+1]=arr[index]; //交换index--;}arr[index+1]=x; //指针的边界}
5、
(1)关于链表的大题
①初始化带头结点的链表A
void initList(LinkList &L) {// 1、要给头指针分配一个存储空间,注意:一个单链表哪怕他是空的,他都必须有个头指针L = (LNode *)malloc(sizeof(LNode));// 2、此处是初始化带头结点的单链表,所以头指针L是指向头结点,而L->next的意思是头指针指向头结点的指针域,而头结点的指针域存储着下一节点的地址,所以给L->next赋值为null就表示头结点后面没有结点,单链表是空的L->next=NULL;
}
②构造有N个节点的非递减链表
//有序单链表
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Node
{int data;struct Node *next;
};
//顺序插入
void Insert(Node *p,int n)
{//利用两个指针Node *p1=p;//指向头 ,因为这是有序单链表 所以每次插入前都得先从头来 Node *p2=p->next; //指向头节点之后 之后也用它来判断是否位只含有头节点的空链表 Node *s=(Node *)malloc(sizeof(Node));s->data=n;//写入数据while(p2&&p2->data>n){p1=p2;p2=p2->next;//这样同时往后移的话 插入的时候好插入 }s->next=p2;p1->next=s;//插入节点
} //遍历列表void traversal(Node *p){Node *p3=p->next;//不能从p开始遍历因为p是头节点没存东西while(p3){printf("%d\n",p3->data);p3=p3->next;}}
int main()
{Node *p;int i,j,k;p=(Node *)malloc(sizeof(Node));p->next=NULL;//创建头节点 for(i=0;i<3;i++){printf("Please input the number you want to insert");scanf("%d",&k);Insert(p,k);}traversal(p);return 0;
}
③将链表A中不重复的数字复制到链表B中
#include <stdio.h>
#include <stdlib.h>typedef struct Node {int data;struct Node* next;
} Node, *LinkedList;// 创建一个新节点
Node* createNode(int data) {Node* newNode = (Node*)malloc(sizeof(Node));if (newNode == NULL) {printf("内存分配失败\n");exit(0);}newNode->data = data;newNode->next = NULL;return newNode;
}// 向链表中插入数据
void insertData(LinkedList* head, int data) {Node* newNode = createNode(data);if (*head == NULL) {*head = newNode;} else {Node* temp = *head;while (temp->next != NULL) {temp = temp->next;}temp->next = newNode;}
}// 打印链表
void printList(LinkedList head) {while (head != NULL) {printf("%d ", head->data);head = head->next;}printf("\n");
}// 将链表a中的不重复元素复制到链表b中
void copyUniqueToLinkedList(LinkedList a, LinkedList* b) {Node* currentA = a;Node* currentB = *b;while (currentA != NULL) {int isUnique = 1; // 假设是唯一的Node* tempA = a;while (tempA != currentA) {if (tempA->data == currentA->data) {isUnique = 0; // 发现重复break;}tempA = tempA->next;}if (isUnique) {Node* newNode = createNode(currentA->data);if (*b == NULL) {*b = newNode;} else {currentB->next = newNode;}currentB = newNode;}currentA = currentA->next;}
}int main() {LinkedList headA = NULL;LinkedList headB = NULL;// 示例数据insertData(&headA, 1);insertData(&headA, 2);insertData(&headA, 3);insertData(&headA, 2);insertData(&headA, 4);insertData(&headA, 1);printf("链表A: ");printList(headA);copyUniqueToLinkedList(headA, &headB);printf("链表B(不重复元素): ");printList(headB);return 0;
}
(2)关于双端队列的大题
①初始化队列
void Init(QUEUE *Q)
{(*Q).front = (struct celltype *)malloc(sizeof(struct celltype));(*Q).front->next=NULL; //创建一个空节点,并将其作为队列的头(*Q).rear = (*Q).front; //将尾指针指向头指针
}
②关于从队头队尾插入元素的问题
typedef struct Node {int data;struct Node* next;
} Node;
typedef struct LinkedList {Node* head;Node* tail;
} LinkedList;
void insert_to_head(LinkedList* list, int value) {Node* new_node = (Node*)malloc(sizeof(Node));new_node->data = value;new_node->next = list->head;list->head = new_node;if (list->tail == NULL) {list->tail = new_node;}
}void insert_to_tail(LinkedList* list, int value) {Node* new_node = (Node*)malloc(sizeof(Node));new_node->data = value;new_node->next = NULL;if (list->tail == NULL) {list->head = list->tail = new_node;} else {list->tail->next = new_node;list->tail = new_node;}
}
void print_list(LinkedList* list) {Node* current = list->head;while (current != NULL) {printf("%d ", current->data);current = current->next;}printf("\n");
}
int main() {LinkedList list;list.head = list.tail = NULL;insert_to_head(&list, 1);insert_to_tail(&list, 2);insert_to_head(&list, 3);insert_to_tail(&list, 4);print_list(&list); // 输出: 3 1 2 4return 0;
}
③关于从队头队尾删除元素的问题
#include <stdio.h>
#include <stdlib.h>typedef struct Node {int data;struct Node *next;
} Node;typedef struct Queue {Node *front;Node *rear;
} Queue;// 初始化队列
void init(Queue *q) {q->front = NULL;q->rear = NULL;
}// 在队尾插入元素
void enqueue(Queue *q, int data) {Node *newNode = (Node *)malloc(sizeof(Node));newNode->data = data;newNode->next = NULL;if (q->rear == NULL) {q->front = q->rear = newNode;} else {q->rear->next = newNode;q->rear = newNode;}
}// 从队头删除元素
void dequeueFromFront(Queue *q) {if (q->front == NULL) {printf("Queue is empty\n");return;}Node *temp = q->front;q->front = q->front->next;free(temp);if (q->front == NULL) {q->rear = NULL;}
}// 从队尾删除元素
void dequeueFromRear(Queue *q) {if (q->front == NULL) {printf("Queue is empty\n");return;}Node *current = q->front;if (current->next == NULL) {free(current);q->front = q->rear = NULL;} else {while (current->next != q->rear) {current = current->next;}free(q->rear);q->rear = current;q->rear->next = NULL;}
}int main() {Queue q;init(&q);// 添加元素enqueue(&q, 10);enqueue(&q, 20);enqueue(&q, 30);// 从队头删除元素dequeueFromFront(&q);// 从队尾删除元素dequeueFromRear(&q);return 0;
}
相关文章:
复试专业课问题
1、数据结构:详细描述归并排序的过程 归并排序是用分治思想,分治模式在每一层递归上有三个步骤: 分解(Divide):将n个元素分成个含n/2个元素的子序列。解决(Conquer):用…...
比特币革命:刚刚开始
作者:Marius Farashi Tasooji 编译:秦晋 要充分理解比特币及其含义,首先必须理解什么是价值,什么是货币。以及是什么赋予资产价值? 这个问题看似愚蠢,但实际上非常有趣。我们的生活是由我们消费或出售的物品…...
淘宝店商家电话提取软件操作经验
淘宝爬虫工具是一种用于自动化获取淘宝网站数据的程序。以下是一个简单的淘宝爬虫工具的代码示例: import requests from bs4 import BeautifulSoupdef get_taobao_data(keyword):url fhttps://s.taobao.com/search?q{keyword}headers {User-Agent: Mozilla/5.0…...
【进阶六】Python实现SDVRPTW常见求解算法——遗传算法(GA)
基于python语言,采用经典蚁群算法(ACO)对 带硬时间窗的需求拆分车辆路径规划问题(SDVRPTW) 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4. 代码片段…...
【Android】App通信基础架构相关类源码解析
应用通信基础架构相关类源码解析 这里主要对Android App开发时,常用到的一些通信基础类进行一下源码的简单分析,包括: Handler:处理器,与某个Looper(一个线程对应一个Looper)进行关联。用于接…...
06-kafka配置
生产者配置 NAMEDESCRIPTIONTYPEDEFAULTVALID VALUESIMPORTANCEbootstrap.servershost/port列表,用于初始化建立和Kafka集群的连接。列表格式为host1:port1,host2:port2,…,无需添加所有的集群地址,kafka会根据提供的地址发现其他的地址&…...
Git、TortoiseGit、SVN、TortoiseSVN 的关系和区别
Git、TortoiseGit、SVN、TortoiseSVN 的关系和区别 (一)Git(分布式版本控制系统):(二)SVN(集中式版本控制系统)(三)TortoiseGit一、下载安装 git二、安装过程…...
4月5日排序算法总结(1)
冒泡排序 利用每趟都确定出一个最大值或者最小值 如果需要排一个从小到大的数组,那么我们每一趟都要确定一个最大值放在最后,一共有n个数,我们最多需要排列n-1趟就可以了,我们可以改进自己的代码,利用一个flag标记&a…...
Pandas追加写入文件的时候写入到了第一行
# 原代码 def find_money(file_path, account, b_account, money, type_word, time):file pd.read_excel(file_path)with open(money.csv, a, newline, encodingutf-8) as f:for i in file.index:省略中间的代码if 省略中间的代码:file.loc[[i]].to_csv(f,indexFalse)find_sam…...
04---webpack编写可维护的构建配置
01 构建配置抽离成npm包; 意义:通用性: 业务开发者无需关注构建配置 统一团队构建脚本可维护性:构建配置合理的拆分 质量:冒烟测试 单元测试 持续集成构建配置管理的可选方案:1 通过多个配置文件管理不同…...
【云计算】云数据中心网络(一):VPC
云数据中心网络(一):VPC 1.什么是 VPC2.VPC 的组成2.1 虚拟交换机2.2 虚拟路由器 3.VPC 网络规划3.1 VPC 数量规划3.2 交换机数量规划3.3 地址空间规划3.4 不同规模企业地址空间规划实践 4.VPC 网络高可靠设计4.1 单地域单可用区部署4.2 单地…...
自动驾驶中的多目标跟踪_第一篇
自动驾驶中的多目标跟踪:第一篇 多目标跟踪(multi-object/multi-target tracking)的任务包括估计场景中目标的数目、位置(状态)或其他属性,最关键的是需要在一段时间内持续地进行估计。 附赠自动驾驶学习资料和量产经验:链接 应…...
AI爆款文案 巧用AI大模型让文案变现插上翅膀
💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…...
Python入门的60个基础练习(一)
01-Hello World python的语法逻辑完全靠缩进,建议缩进4个空格。如果是顶级代码,那么必须顶格书写,哪怕只有一个空格也会有语法错误。下面示例中,满足if条件要输出两行内容,这两行内容必须都缩进,而且具有相…...
微软云学习环境
微软公有云 - Microsoft Azure 本文介绍通过微软学习中心Microsoft Learn来免费试用Azure上的服务,也不需要绑定信用卡。不过每天只有几个小时的时间。 官网 https://docs.microsoft.com/zh-cn/learn/ 实践 比如创建虚拟机,看到自己的账号下多了Learn的…...
大厂面试:找出数组中第k大的数的最佳算法
一.前置条件 假如数组为a,大小为n,要找到数组a中第k大的数。 二.解决方案 1.使用任意一种排序算法(例如快速排序)将数组a进行从大到小的排序,则第n-k个数即为答案。 2.构造一个长度为k的数组,将前k个数复制过来并降序…...
爬取高校专业信息的Python爬虫简介与实践
1. 介绍 在当前高校专业信息繁多的情况下,选择适合自己的专业成为了许多学生面临的挑战。为了帮助学生更好地了解各高校专业情况,我们开发了一个Python爬虫程序,用于爬取高校专业信息并保存到Excel文件中。本文将详细介绍该爬虫的实现过程以…...
redis 集群模式(redis cluster)介绍
目录 一 redis cluster 相关定义 1, redis cluster 是什么 2,redis 集群的组成 3,集群的作用 4,集群架构图 二 Redis集群的数据分片 1,哈希槽是什么 2,哈希槽如何排布 3,Redis集…...
python实现网络爬虫
网络爬虫是一个自动从互联网上抓取数据的程序。Python有很多库可以帮助我们实现网络爬虫,其中最常用的是requests(用于发送HTTP请求)和BeautifulSoup(用于解析HTML或XML文档)。 以下是一个简单的Python网络爬虫示例&a…...
LeetCode 836. 矩形重叠
解题思路 相关代码 class Solution {public boolean isRectangleOverlap(int[] rec1, int[] rec2) {int x1 rec1[0];int y1 rec1[1];int x2 rec1[2];int y2 rec1[3];int a1 rec2[0];int b1 rec2[1];int a2 rec2[2];int b2 rec2[3];return Math.min(y2,b2)>Math.max…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
问题:IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案:将编译的堆内存增加一点 位置:设置setting-》构建菜单build-》编译器Complier...
python基础语法Ⅰ
python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器,来进行一些算术…...
数据挖掘是什么?数据挖掘技术有哪些?
目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...
