数据结构------C语言经典题目(7)
1.系统栈和数据结构中的栈有什么区别?
1.本质:
系统栈:由程序运行时由操作系统自动分配的一块连续内存区域,用于存储函数调用过程中的临时数据(参数、局部变量、返回地址),是程序运行的底层机制,遵循先进后出原则。
数据结构中的栈:是一种线性数据结构,定义了一组操作(压栈、弹栈、查看栈顶),也遵循 先进后出 原则。
2.功能与用途:
系统栈:
存储函数调用时的 局部变量,保存函数的返回地址。传递函数调用的 参数。支持递归调用。
示例:当函数A调用函数B时,系统会将A的当前状态(局部变量值、返回地址)压入栈,然后为B分配栈帧;B执行完毕后,栈会弹出A的状态,恢复执行A。
数据结构中的栈:
表达式求值、括号匹配、回溯算法等。
3.操作方式:
系统栈:
操作是隐式的,函数调用、返回、局部变量创建/销毁等操作会自动触发栈的压入/弹出。
数据结构中的栈:操作是显式的。需编写实现代码。
// 定义栈的最大容量
#define MAX_STACK_SIZE 100// 用数组实现栈(底层存储结构)
// stack数组存储栈元素,下标0为栈底,下标top为栈顶
int stack[MAX_STACK_SIZE];// top变量表示栈顶元素的索引:
// - 初始值-1表示栈为空(无有效元素)
// - 当压入元素时,top先自增再赋值
// - 当弹出元素时,先返回top位置元素,再自减
int top = -1;// 压栈操作:将元素value添加到栈顶
// 参数:value - 待压入栈的整数值
// 说明:若栈已满(top == MAX_STACK_SIZE - 1),则不执行压栈操作
void push(int value)
{// 检查栈是否未满(栈最大索引为MAX_STACK_SIZE-1)if (top < MAX_STACK_SIZE - 1) {// 先将栈顶指针上移一位,再存储新元素(栈顶索引始终指向最后一个元素)stack[++top] = value;}
}// 弹栈操作:从栈顶取出并返回元素
// 返回值:栈顶元素(int类型),若栈空则返回-1(需根据业务调整错误处理)
// 说明:执行弹栈前需确保栈非空(调用前检查top >= 0)
int pop()
{// 检查栈是否为空(栈空时top == -1)if (top >= 0) {// 先返回栈顶元素,再将栈顶指针下移一位return stack[top--];}// 栈空时返回-1(可根据实际需求定义错误码)return -1;
}
2.如何实现二叉树的深度优先遍历算法和广度优先遍历算法?
数据结构:
使用结构体TreeNode定义二叉树节点,包含数据域和左右子节点指针。
深度优先遍历:
前序遍历:先访问根节点,再递归遍历左子树,最后递归遍历右子树。
中序遍历:左 根 右
后续遍历:左 右 根
广度优先遍历:
使用数组模拟队列实现层序遍历。
根节点入队----》循环取出队首节点并访问----》将其左右子节点依次入队
测试构建的二叉树结构:
1/ \2 3/ \
4 5
示例代码:
// ====================== 数据结构定义 ======================
/*** 二叉树节点结构体定义* 包含:* - data: 节点存储的整数值* - left: 指向左子节点的指针(NULL表示无左子节点)* - right: 指向右子节点的指针(NULL表示无右子节点)*/
typedef struct TreeNode {int data; // 节点数据域struct TreeNode *left; // 左子节点指针struct TreeNode *right; // 右子节点指针
} TreeNode;// ====================== 节点操作函数 ======================
/*** 创建二叉树节点* @param data 节点存储的整数值* @return 新创建的节点指针(动态分配内存)*/
TreeNode* createNode(int data)
{// 分配节点内存空间TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));if (newNode == NULL) // 内存分配失败处理(实际项目中需增强错误处理){ exit(EXIT_FAILURE);}newNode->data = data; // 初始化数据域newNode->left = NULL; // 初始化左子节点指针为NULLnewNode->right = NULL; // 初始化右子节点指针为NULLreturn newNode; // 返回新节点指针
}// ====================== 内存释放函数 ======================
/*** 递归释放二叉树所有节点内存* 遵循后序遍历顺序:先释放左子树 → 释放右子树 → 释放当前节点* @param root 待释放的二叉树树根节点(NULL时直接返回)*/
void freeTree(TreeNode* root)
{if (root == NULL) return; // 终止条件:空节点freeTree(root->left); // 递归释放左子树freeTree(root->right); // 递归释放右子树free(root); // 释放当前节点内存root = NULL; // 防止野指针(虽然此处即将离开作用域)
}// ====================== 深度优先遍历(递归实现) ======================
/*** 前序遍历(根左右)* 访问顺序:根节点 → 左子树 → 右子树* @param root 当前遍历的子树树根节点(NULL表示空树)*/
void preOrderTraversal(TreeNode* root)
{if (root == NULL) // 递归终止条件:遇到空节点{return;}printf("%d ", root->data); // 先访问根节点preOrderTraversal(root->left); // 递归遍历左子树preOrderTraversal(root->right); // 递归遍历右子树
}/*** 中序遍历(左根右)* 访问顺序:左子树 → 根节点 → 右子树* @param root 当前遍历的子树树根节点(NULL表示空树)*/
void inOrderTraversal(TreeNode* root)
{if (root == NULL) // 递归终止条件{ return;}inOrderTraversal(root->left); // 先递归遍历左子树printf("%d ", root->data); // 再访问根节点inOrderTraversal(root->right); // 最后递归遍历右子树
}/*** 后序遍历(左右根)* 访问顺序:左子树 → 右子树 → 根节点* @param root 当前遍历的子树树根节点(NULL表示空树)*/
void postOrderTraversal(TreeNode* root)
{if (root == NULL) // 递归终止条件{return;}postOrderTraversal(root->left); // 先递归遍历左子树postOrderTraversal(root->right); // 再递归遍历右子树printf("%d ", root->data); // 最后访问根节点
}// ====================== 广度优先遍历(队列实现) ======================
/*** 层序遍历(广度优先遍历)* 访问顺序:按层次从左到右依次访问节点(第1层→第2层→...)* @param root 二叉树的根节点(NULL表示空树)*/
void levelOrderTraversal(TreeNode* root)
{if (root == NULL) // 空树处理{return;}// 使用数组模拟队列(固定大小,适用于小规模树,大规模建议用链表实现)TreeNode* queue[100]; // 队列存储节点指针int front = 0; // 队头指针(指向当前出队节点位置)int rear = 0; // 队尾指针(指向当前入队位置的下一个位置)queue[rear++] = root; // 根节点入队(初始队列包含根节点)while (front < rear) // 队列不为空时循环{ TreeNode* current = queue[front++]; // 取出队首节点(先取值,再front自增)printf("%d ", current->data); // 访问当前节点// 左子节点非空则入队(保证层次顺序)if (current->left != NULL) { queue[rear++] = current->left;}// 右子节点非空则入队(保证同层节点左到右顺序)if (current->right != NULL) {queue[rear++] = current->right;}}
}// ====================== 测试用例 ======================
int main()
{TreeNode* root = createNode(1); // 根节点(值1)root->left = createNode(2); // 根节点左子节点(值2)root->right = createNode(3); // 根节点右子节点(值3)root->left->left = createNode(4); // 左子节点的左子节点(值4)root->left->right = createNode(5); // 左子节点的右子节点(值5)printf("前序遍历(根左右)结果:");preOrderTraversal(root); // 输出:1 2 4 5 3printf("\n");printf("中序遍历(左根右)结果:");inOrderTraversal(root); // 输出:4 2 5 1 3printf("\n");printf("后序遍历(左右根)结果:");postOrderTraversal(root); // 输出:4 5 2 3 1printf("\n");printf("层序遍历(广度优先)结果:");levelOrderTraversal(root); // 输出:1 2 3 4 5printf("\n");printf("正在释放二叉树内存...\n");freeTree(root); // 调用释放函数,递归释放所有节点root = NULL; // 清空根指针,确保不再访问已释放内存return 0;
}
3.满二叉树第K层有多少个节点?总共有多少个节点?
满二叉树的每一层节点数都达到最大值。第K层的节点数为个。
将满二叉树的高度设为H(即共有H层),则总节点数为个。
4.冒泡排序、插入排序、选择排序、快速排序如何实现?
冒泡排序:
/*** 冒泡排序函数* @param arr 待排序的整数数组* @param n 数组元素个数* 算法思想:重复走访数组,比较相邻元素,将较大的元素逐步后移* 时间复杂度:O(n²),稳定排序算法*/void bubble_sort(int arr[], int n)
{int i = 0; //外层循环计数器(控制排序轮数),int j = 0; //内层循环计数器(控制每轮比较次数)//int temp = 0; //临时变量用于交换元素// 外层循环:执行n-1轮排序(每轮确定一个最大元素到末尾)for (i = 0; i < n-1; i++) {// 内层循环:每轮比较相邻元素,将最大元素逐步后移// 每轮结束后,第n-i-1个位置是当前未排序部分的最大元素for (j = 0; j < n-i-1; j++) {// 如果当前元素大于下一个元素,则交换位置if (arr[j] > arr[j+1]) {temp = arr[j]; // 保存当前元素值arr[j] = arr[j+1]; // 下一个元素移到当前位置arr[j+1] = temp; // 当前元素移到下一个位置}}}
}
插入排序:
/*** 插入排序函数* @param arr 待排序的整数数组* @param n 数组元素个数* 算法思想:将未排序元素插入到已排序部分的合适位置,使已排序部分始终有序* 时间复杂度:O(n²),稳定排序算法*/
void insertion_sort(int arr[], int n)
{int i = 0; //未排序部分起始索引 int key = 0; //待插入的当前元素int j = 0; //已排序部分反向遍历索引// 外层循环:从第二个元素开始(假设第一个元素已排序)for (i = 1; i < n; i++) {key = arr[i]; // 保存当前待插入的元素j = i - 1; // 已排序部分的最后一个元素索引// 内层循环:将已排序部分中大于key的元素后移,为key腾出位置// 当j>=0且当前元素大于key时,继续后移while (j >= 0 && arr[j] > key) {arr[j+1] = arr[j]; // 元素后移一位j--; // 向前移动一位继续比较}arr[j+1] = key; // 将key插入到正确位置(j+1是因为循环结束时arr[j] <= key)}
}
选择排序:
/*** 选择排序函数* @param arr 待排序的整数数组* @param n 数组元素个数* 算法思想:每轮找到未排序部分的最小元素,与当前位置元素交换* 时间复杂度:O(n²),不稳定排序算法*/
void selection_sort(int arr[], int n)
{int i = 0; //已排序部分末尾索引 int j = 0; //未排序部分遍历索引int min_idx = 0; //最小元素索引int temp = 0; //临时变量用于交换// 外层循环:控制已排序部分的末尾位置(从0到n-2)for (i = 0; i < n-1; i++) {min_idx = i; // 初始化最小元素索引为当前位置// 内层循环:在未排序部分(i+1到n-1)寻找最小元素索引for (j = i+1; j < n; j++) {if (arr[j] < arr[min_idx]) // 如果找到更小的元素,更新最小索引{ min_idx = j;}}// 交换最小元素与当前位置元素(将最小元素放到已排序部分末尾)temp = arr[min_idx];arr[min_idx] = arr[i];arr[i] = temp;}
}
快速排序:
/*** 快速排序辅助函数:分区操作* @param arr 待分区的整数数组* @param low 分区起始索引* @param high 分区结束索引* @return 分区点索引(基准元素的最终位置)* 算法思想:选择基准元素,将数组分为两部分,左边<=基准,右边>=基准*/
int partition(int arr[], int low, int high)
{int pivot = arr[high]; // 选择最后一个元素作为基准值int i = (low - 1); // 初始化最小元素索引为low-1(表示已处理部分的末尾)// 遍历low到high-1的元素,将小于等于基准的元素移到左边for (int j = low; j <= high - 1; j++) {// 如果当前元素小于等于基准值if (arr[j] <= pivot) { i++; // 最小元素索引递增(指向当前处理的左边区域的下一个位置)// 交换arr[i]和arr[j],将较小元素移到左边int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}// 将基准元素放到正确的位置(左边区域的末尾+1),完成分区int temp = arr[i+1];arr[i+1] = arr[high];arr[high] = temp;return (i + 1); // 返回基准元素的最终位置
}/*** 快速排序主函数* @param arr 待排序的整数数组* @param low 排序起始索引* @param high 排序结束索引* 算法思想:分治策略,通过分区将数组分为两部分,递归排序子数组* 平均时间复杂度:O(n log n),最坏O(n²),不稳定排序算法*/
void quick_sort(int arr[], int low, int high)
{if (low < high) // 终止条件:当子数组长度>=2时继续处理{// 获取分区点,将数组分为左右两部分int pi = partition(arr, low, high);// 递归排序左子数组(low到pi-1)和右子数组(pi到high)quick_sort(arr, low, pi - 1);quick_sort(arr, pi, high);}
}
主函数:
/*** 打印数组函数* @param arr 待打印的整数数组* @param size 数组元素个数*/
void print_array(int arr[], int size)
{int i = 0;for (i = 0; i < size; i++) {printf("%d ", arr[i]); // 逐个打印数组元素}printf("\n"); // 换行
}int main()
{int arr[] = {64, 34, 25, 12, 22, 11, 90}; // 测试用数组int n = sizeof(arr) / sizeof(arr[0]); // 计算数组元素个数printf("原始数组: ");print_array(arr, n); // 打印排序前的数组// 选择要测试的排序算法(取消注释对应函数调用)// bubble_sort(arr, n); // 冒泡排序// selection_sort(arr, n); // 选择排序// insertion_sort(arr, n); // 插入排序quick_sort(arr, 0, n-1); // 快速排序(注意快速排序需要传入low=0和high=n-1)printf("排序后的数组: ");print_array(arr, n); // 打印排序后的数组return 0;
}
5.什么是时间复杂度,常见的时间复杂度有哪些?
时间复杂度是衡量算法执行时间随输入数据规模增长而变化的趋势的指标。它关注的是算法执行时间的“增长率”,而不是具体的执行时间,用于评估算法的效率和优化。
常用的时间复杂度:
O(1)常数时间:
算法的执行时间与输入规模无关,始终是一个固定值。
比如数组元素的直接访问、简单的算术运算。
O(log n)对数时间:
算法每执行一次操作,输入规模以固定倍数(通常是2)减少,常见于二分法相关操作。
O(n)线性时间:
算法的执行时间与输入规模成正比,需要遍历数据一次。
数组求和、查找最大值/最小值。
O(n log n)线性对数时间:
常见于分治算法,归并排序、快速排序。
O(
)平方时间:
算法需要两层嵌套循环,执行时间与输入规模的平方成正比。
冒泡排序、选择排序、双重循环遍历。
6.冒泡排序、选择排序、插入排序、快速排序的时间复杂度分别是什么?是否稳定?
冒泡排序:
最好情况:当数组已有序时,只需遍历一次,时间复杂度为O(n)。
最坏情况:当数组逆序时,需要进行 n - 1轮比较,每轮比较n - i次,时间复杂度为O()
稳定的。
选择排序:
无论数组是否有序,均需进行n - 1轮选择和交换。时间复杂度为O()
不稳定。例如,数组 [5,5,3]排序时,第一个5可能与后面的3交换,导致两个5的相对顺序发生改变。
插入排序:
最好情况:数组已有序时,每轮插入只需比较一次,时间复杂度为O(n)。
最坏情况:数组逆序时,每次插入需移动 i 个元素,时间复杂度为O()。
稳定。
快速排序:
通过分治策略,每次分区平衡,时间复杂度为O(n log n)。
不稳定。
7.二分查找的前提条件是什么?时间复杂度?
前提条件:
1.数据有序:
待查找的数组必须是有序的(升序或降序)。二分查找通过不断比较中间元素与目标值,将搜索范围减半,因此无序数据无法使用该算法。
2.顺序存储:
数据需存储在顺序存储结构(如数组)中。支持随机访问(通过下标直接访问中间元素)。链表等链式存储结构由于无法快速定位中间元素,不适合直接使用二分查找。
时间复杂度为O(log n):
每次查找将搜索范围缩小一半,最多需要 次比较操作(n为数组元素个数)。
二分查找法的核心优势是高效,但严格依赖数据的有序性和顺序存储特性。使用前需确保数组已排序,否则需先排序(通过快速排序等算法)再进行查找。
相关文章:
数据结构------C语言经典题目(7)
1.系统栈和数据结构中的栈有什么区别? 1.本质: 系统栈:由程序运行时由操作系统自动分配的一块连续内存区域,用于存储函数调用过程中的临时数据(参数、局部变量、返回地址),是程序运行的底层机制…...
Python教程(一)——Python速览
目录 1. 引言2. Python用作计算器2.1 数字2.2 文本2.3 列表 3. 走向编程的第一步参考 1. 引言 本系列的目的主要是重新回顾Python的语法,以供阅读由Python编写的源码。 在安装完Python后,在命令行中输入python就可以进入交互模式。下文代码段中以>…...
跟我学C++中级篇——处理对象的复制
一、对象的传递 在应用程序中,经常会遇到不同线程或不同模块间需要进行对象的传递,本来传递不是什么多大的事。但问题是,如果对象的值大到一定的程度后,传递不是问题可对象值的处理反而成了问题了。举一个现实世界的例子…...
基于PyQt5实现仿QQ-第二章-用户登录
基于PyQt5实现仿QQ-第二章-用户登录 Author: Daydreamer 项目简介 本项目基于PyQt5仿照目前流行的即时通信软件QQ,实现了新用户注册、用户登录、自动登录、记住多用户账号、用户搜索、添加好友、好友间聊天(消息持久化、同步化)等功能。 …...
[OS_8] 终端和 UNIX Shell | 会话和进程组 | sigaction | dash
我们已经知道如何用 “文件描述符” 相关的系统调用访问操作系统中的对象:open, read, write, lseek, close。操作系统也提供了 mount, pipe, mkfifo 这些系统调用能 “创建” 操作系统中的对象。 当然,我们也知道操作系统中的对象远不止于此࿰…...
IP查询专业版:支持IPv4/IPv6自动识别并切换解析的API接口使用指南
以下是根据您提供的网页内容编辑的符合CSDN内容发布要求的Markdown格式文本: 一、API概述 在开发过程中,我们常常需要对IP地址进行查询,以获取其详细信息,如地理位置、运营商等。万维易源的“IP查询专业版”API接口能够提供丰富…...
ESG跨境电商如何为国内的跨境电商企业打开国外的市场
现在不管是国内还是国外,做电商的企业都非常的多,那么既然有这么多大电商公司,就要有为这些电商公司提供服务的公司,这就是ESG,它是专门为跨境电商服务的公司,那么这家公司的主要业务是什么呢?它…...
建筑节能成发展焦点,楼宇自控应用范围持续扩大
在全球能源危机日益严峻、环保意识不断增强的大环境下,建筑节能已成为建筑行业发展的核心议题。从大型商业综合体到普通住宅,从公共建筑到工业厂房,节能需求贯穿建筑全生命周期。而楼宇自控系统凭借其对建筑设备的智能化管理和精准调控能力&a…...
中国矿业大学iGMAS分析中心介绍
一、关于GNSS和iGMAS 在浩瀚的太空中,全球卫星导航系统(GNSS)构建起精准定位的时空基准。IGMAS——国际GNSS监测评估系统,是由中国倡导并主导建设的全球GNSS监测网络,旨在提供高精度、高可靠的导航、定位与授时服务。 …...
python如何取消word中的缩进
在python-docx中,取消缩进可以通过将相应的缩进属性设置为None或0来实现。以下是取消不同类型缩进的方法: 取消左缩进 from docx import Documentdoc Document(existing_document.docx)for paragraph in doc.paragraphs:# 取消左缩进paragraph.paragr…...
Lesar: 面向 Lustre/Scade 语言的形式化模型检测工具
在《同步反应式系统》的第一课中,介绍了同步数据流语言 Lustre 生态中的形式化模型检查器 Lesar 的用法。Lesar 可对 lustre v4 语言以及 Scade 语言中部分数据流核心特性进行模型检查。 Lesar 介绍 Lesar 是 Verimag 研发维护的形式化方法模型检查工具。该工具的理…...
YOLOv12 改进有效系列目录 - 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制 - 针对多尺度、小目标、遮挡、复杂环境、噪声等问题!
🔥 在 YOLO 系列一路狂飙之后,YOLOv12 带来了令人耳目一新的范式转变——它不再以 CNN 为绝对核心,而是首次 围绕注意力机制构建 YOLO 框架,在保证实时性的前提下,将检测精度再次推向新高度! 为了进一步探…...
STM32 I2C总线通信协议
引言 在嵌入式系统开发领域,I2C(Inter-Integrated Circuit)总线作为经典的双线制串行通信协议,凭借其简洁的物理层设计和灵活的通信机制,在传感器互联、存储设备控制、显示模块驱动等场景中占据重要地位。本文将深入剖…...
多物理场耦合低温等离子体装置求解器PASSKEy2
文章目录 PASSKEy2简介PASSKEY2计算流程PASSKEy2 中求解的物理方程电路模型等离子体模型燃烧模型 PASSKEy2的使用 PASSKEy2简介 PASSKEy2 是在 PASSKEy1 的基础上重新编写的等离子体数值模拟程序。 相较于 PASSKEy1, PASSKEy2 在具备解决低温等离子体模拟问题的能力…...
【Harmony_Bug】forEach + asyncawait 的异步陷阱
一、问题描述 今天在做一个RDB的小项目时,遇到一个问题,因为没报错其实也是不算是BUG,以下描述时我就直接说关键点,其他代码忽略。 我的数据模型初始化有六条数据如图 在持久化层,通过initUserData这个方法执行插入。…...
智慧医院建设的三大关键领域
智慧医院建设是医疗行业数字化转型的核心载体,其本质是通过新一代信息技术重构医疗服务模式、优化管理流程、提升患者体验。在当前医疗资源供需矛盾突出的背景下,智慧医院建设已从单纯的设备智能化向系统性变革演进,主要集中在以下三大关键领…...
雷电模拟器怎么更改IP地址
游戏搬砖会使用雷电模拟器多开窗口,若模拟器窗口开多了,IP地址是一样的就怕有限制,很容易被游戏后台检测到。在雷电模拟器中更改IP地址可以通过以下方法实现: 方法一:通过模拟器内设置代理 1. 打开雷电模拟器 启动雷…...
软件编程命名规范
编程命名规范是保证代码可读性、可维护性和团队协作效率的重要基础。以下是涵盖主流编程语言的通用命名规范,结合行业最佳实践和常见规范(如Google、Microsoft、Airbnb等风格指南): 一、通用命名原则 清晰优先:名称应…...
#什么是爬虫?——从技术原理到现实应用的全面解析 VI
什么是爬虫?——从技术原理到现实应用的全面解析 V 二十六、异构数据采集技术突破 26.1 PDF文本与表格提取 import pdfplumber import pandas as pddef extract_pdf_data(pdf_path):"""从PDF中提取文本和表格数据:param pdf_path: PDF文件路径:return: 包含…...
芯岭技术XL32F003单片机 32位Cortex M0+ MCU简单介绍 性能优异
XL32F003单片机是深圳市芯岭技术有限公司的一款基于 32 位 ARM Cortex-M0 内核的高性能微控制器,提供SOP8/SOP14/SOP16/TSSOP20/SSOP24/QFN20/QFN32多种封装可选,可满足不同设计需求。XL32F003可用于工业控制、手持设备、PC 外设、传感器节点等应用场景&…...
使用浏览器的Clipboard API实现前端复制copy功能
在前端开发中,复制文本到剪贴板的功能通常使用浏览器的 Clipboard API 实现。比如 navigator.clipboard.writeText 方法。以下是一个简单的案例,展示如何使用 Clipboard API 实现复制文本的功能。 基本用法 首先,你需要创建一个按钮&#x…...
Struts2框架学习
文章目录 基础实战配置文件NameSpaces 基础 实战 配置文件 文件1: <?xml version"1.0" encoding"UTF-8"?> // 声明这是一个 XML 文件,且使用 UTF - 8 编码 <!DOCTYPE struts PUBLIC"-//Apache Software Foundat…...
React 实现爱心花园动画
主页: import React, { useEffect, useRef, useState } from react; import /assets/css/Love.less; import { Garden } from /utils/GardenClasses;// 组件属性接口 interface LoveAnimationProps {startDate?: Date; // 可选的开始日期messages?: { // 可…...
CAPL编程_03
1_文件操作的相关函数: 读文本文件内容 读取文本文件操作的三部曲 1)打开文件 —— openFileRead ( ) 2)逐行读取 —— fileGetString ( ) 、fileGetStringSZ ( ) 3)关闭文件 —— fileClose ( ) char content[100];…...
网络准入控制系统:2025年网络安全的坚固防线
在当今数字化时代,网络安全已成为至关重要的议题。阳途网络准入控制系统作为保障网络安全的关键机制,发挥着不可替代的作用。 阳途网络准入控制系统核心目的在于确保只有合法、合规的设备与用户能够接入网络。从本质上讲,它通过一系列技术手段…...
【音视频】⾳频处理基本概念及⾳频重采样
一、重采样 1.1 什么是重采样 所谓的重采样,就是改变⾳频的采样率、sample format、声道数等参数,使之按照我们期望的参数输出。 1.2 为什么要重采样 为什么要重采样? 当然是原有的⾳频参数不满⾜我们的需求,⽐如在FFmpeg解码⾳频的时候…...
自然语言处理将如何颠覆未来教育?个性化学习新纪元
教育领域正经历着自印刷术发明以来最深刻的变革。自然语言处理(NLP)技术突破传统教育框架的桎梏,正在重塑人类知识传递的基本范式。这场变革的实质不在于教学工具的数字化升级,而在于重新定义了"教"与"学"的本…...
4月25日星期五今日早报简报微语报早读
4月25日星期五,农历三月廿八,早报#微语早读。 1、祝贺!神舟二十号载人飞船发射取得圆满成功; 2、文旅部:今年一季度国内出游人次17.94亿,同比增长26.4%; 3、2025五一档新片预售票房破1000万&…...
秒级到毫秒:BFD的速度革命
一、BFD技术概述 双向转发检测(BFD)是一种轻量级的网络协议,专门用于快速检测、监控网络链路或IP路由的连通性状态。作为网络领域的"心跳检测器",BFD通过毫秒级(默认1000ms)的快速探测机…...
systemctl 命令详解与常见问题解决
在 Linux 系统中,service 命令和 chkconfig 命令一直用于管理服务,但随着 systemd 的引入,systemctl 命令逐渐成为主流。systemctl 命令不仅功能强大,而且使用简单。本文将详细介绍 systemctl 命令的作用以及常见问题的解决方法。…...
5.6 Microsoft Semantic Kernel:专注于将LLM集成到现有应用中的框架
5.6.1 Semantic Kernel概述 Microsoft Semantic Kernel(以下简称SK)是一个开源的软件开发工具包(SDK),旨在帮助开发者将大型语言模型(LLM)无缝集成到现有的应用程序中。它支持C#、Python和Java…...
vite+vue构建的网站项目localhost:5173打不开
原因:关掉了cmd命令提示符,那个端口就没有被配置上,打开就是这样的。 解决方法:重新在工作目录下打开cmd,输入npm run dev重新启动项目。 重新出现这样的界面说明已经成功启动项目,再次在浏览器中刷新并输入…...
电脑屏幕录制软件Captura源码编译(Win10,VS2022)
屏幕录像的意义: 教育教学方面 制作教学资源:教师可以通过录制屏幕来制作教学视频,演示软件操作、讲解复杂的知识点等。学生可以随时观看这些视频,便于复习和巩固知识,尤其对于一些抽象的概念或难以在课堂上一次性掌握…...
【版本控制】SVN + TortoiseSVN版本管理实用教程(附安装+开发常用操作)
摘要: 本文将带你从零开始掌握 SVN 版本控制系统,结合 TortoiseSVN 图形客户端工具,深入学习包括安装、检出、提交、更新、回滚、冲突解决等常用开发操作,快速上手团队协作! 🧩 什么是 SVN? SV…...
常见网络安全攻击类型深度剖析(二):SQL注入攻击——原理、漏洞利用演示与代码加固方法
常见网络安全攻击类型深度剖析(二):SQL注入攻击——原理、漏洞利用演示与代码加固方法 在Web应用安全领域,SQL注入(SQL Injection)是历史最悠久、危害最广泛的攻击类型之一。据OWASP(开放式Web应用安全项目)统计,SQL注入连续多年稳居“OWASP Top 10”漏洞榜单前列,每…...
DeepSeek智能时空数据分析(三):专业级地理数据可视化赏析-《杭州市国土空间总体规划(2021-2035年)》
序言:时空数据分析很有用,但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要,然而,三大挑战仍制约其发展:技术门槛高,需融合GIS理论、SQL开发与时空数据库等多领域知识;空…...
day49—双指针+贪心—验证回文串(LeetCode-680)
题目描述 给你一个字符串 s,最多 可以从中删除一个字符。 请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。 示例 1: 输入:s "aba" 输出:true…...
AI电视里的达摩
2025年,所有电视都搭载了AI功能,所有电视厂商都在宣传AI能力。但问题是,消费者依旧没有对AI电视做出什么积极的回应。“AI电视是鸡肋”“AI只是电视的又一轮泡沫”等观点层出不穷。 为什么明明AI技术能够解决电视的很多问题,但AI电…...
算力网络(CFN)在跨校联合科研中的应用:安全性挑战与联邦调度实践
引言:科研协作的算力困境 上海交通大学与麻省理工学院联合开展的高能物理模拟实验,因算力资源分配不均导致部分节点连续72小时处于空转状态。这个典型案例揭示了当前跨机构科研协作的痛点:算力资源无法实现安全可信的细粒度共享。算力网…...
面向对象编程核心:封装、继承、多态与 static 关键字深度解析
面向对象编程核心:封装、继承、多态与 static 关键字深度解析 一、封装:数据安全与接口规范 1. 封装的本质与作用 核心定义:将数据(属性)与操作数据的方法(行为)绑定在类中,隐藏内…...
c++进阶——类与继承
文章目录 继承继承的基本概念继承的基本定义继承方式继承的一些注意事项 继承类模板 基类和派生类之间的转换继承中的作用域派生类的默认成员函数默认构造函数拷贝构造赋值重载析构函数默认成员函数总结 不能被继承的类继承和友元继承与静态成员多继承及其菱形继承问题继承模型…...
【CODEMATE】进制转换(transform) 粤港澳青少年信息学创新大赛 C/C++/Python 解题思路
目录 问题描述做题思路,解决过程思路:踩过的坑:核心代码C 语言 / C 切片:C 语言 / C 判断 ‘A’ 数量:Python 切片:Python 判断 ‘A’ 数量: 完整代码C 语言 完整代码C 完整代码Python 完整代码…...
window和ubuntu自签证书
window下 以管理员身份 运行 Windows PowerShell # CN192.168.0.100 (换成自己的IP或者域名) # O(组织) OU(组织单位) # Cert:\LocalMachine\My:证书存储位置 # test_10:自定义证书名称 .AddYears(10): 证书过期时间 10 年 $cert New-SelfSi…...
ES历史版本下载
下载地址 Past Releases of Elastic Stack Software | Elastic 安装步骤参考 windows 安装 Elasticsearch_windows安装elasticsearch-CSDN博客...
技术面试一面标准流程
0. 自我介绍 ...... 1. 拷打项目 项目干了啥? 难点是啥? 问项目中用到的东西? 扩展? ...... 2. 基础知识 数据结构、C基础、设计模式 数据结构: 堆? unordered_map 和 布隆过滤器 都是用于查找…...
第14篇:Linux设备驱动程序入门<一>
Q:如何简单的理解DE1-SoC-UP Linux系统的设备驱动程序? A:设备驱动程序(Device Driver),简称驱动程序(Driver)。DE1-SoC-UP Linux系统中的设备驱动程序允许系统软件与DE1-SoC开发板…...
软件设计模式与体系结构:基于Java实现管道-过滤器架构
软件设计模式与体系结构:基于Java实现管道-过滤器架构 前言 在软件架构中,数据流风格是一种常见的架构模式,特别适用于需要对数据进行一系列处理的场景。管道-过滤器(Pipe and Filter)*架构是数据流风格的典型代表&a…...
Node.js 包管理工具介绍
Node.js 包管理工具介绍 Node.js 是一个基于 Chrome V8 JavaScript 引擎的服务器端运行环境,它允许开发者使用 JavaScript 进行后端开发。为了方便管理和维护项目中使用的第三方库和模块,Node.js 提供了多种包管理工具。本文将详细介绍几种常用的 Node.…...
Node.js 应用场景
Node.js 应用场景 引言 Node.js 是一个基于 Chrome V8 JavaScript 引擎的开源、跨平台 JavaScript 运行环境。它主要用于服务器端开发,通过非阻塞 I/O 模型实现了高并发处理能力。本文将详细介绍 Node.js 的应用场景,帮助你了解其在实际项目中的应用。…...
C/C++线程详解
一、C语言线程创建(POSIX线程) 1. 基本创建方法 POSIX线程(pthread)是C语言中创建线程的标准API: #include <pthread.h> #include <stdio.h>void* thread_func(void* arg) {printf("Thread runnin…...