数据结构与算法整理复习(一):数据结构概念与线性表
目录
第一章:绪论
1.1 数据结构的基本概念
1.2 算法与算法评价
第二章:线性表
2.1 线性表的定义和基本操作
2.2 线性表的顺序表示(顺序表)
应用题
2.3 线性表的链式表达(链表)
2.3.1 单链表
2.3.2 双链表
2.3.3 循环链表
2.3.4 静态链表
2.3.5 顺序表与链表的比较
第一章:绪论
1.1 数据结构的基本概念
可以用“抽象数据类型(ADT)”定义一个完整的数据结构
抽象数据类型(ADT)为一个数学模型以及其定义在数学模型上的一组操作。包含(数据对象、数据关系、以及其基本操作集),故为一个完整的数据结构。
数据的逻辑结构独立于存储结构,但数据的存储结构不能独立于其逻辑结构
1.2 算法与算法评价
好算法应该达到的目标:正确性、可读性、健壮性、高效率与低存储要求。
空间复杂度O(1):辅助空间的大小与问题规模n无关
时间复杂度O(n^2):执行时间与n^2成正比。
for(int i=0;i<n;i++){for(int j=0;j<m;j++){printf("111");}
}
上诉代码是时间复杂度为O(nm)。
#include <stdio.h>// 递推方式求解斐波那契数列
long long fibonacci_iterative(int n) {if (n <= 0) return 0;if (n == 1) return 1;long long a = 0, b = 1, c;for (int i = 2; i <= n; i++) {c = a + b;a = b;b = c;}return b;
}// 递归方式求解斐波那契数列
long long fibonacci_recursive(int n) {if (n <= 0) return 0;if (n == 1) return 1;return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2);
}int main() {int n;printf("请输入一个非负整数: ");scanf("%d", &n);printf("斐波那契数列第%d项是: %lld\n", n, fibonacci_iterative(n));printf("斐波那契数列第%d项是: %lld\n", n, fibonacci_recursive(n));return 0;
}
第二章:线性表
2.1 线性表的定义和基本操作
每一个元素有且只有一个前驱和后继。
线性表的特性:
- 表中元素个数有限
- 元素具有逻辑上的顺序性,有先后顺序
- 表中元素都是你数据元素,每个数据元素可以包含多个数据项
- 表中元素的数据类型都相同(每个元素占相同大小的空间)
- 元素具有抽象性
InitList(List &L)//初始化表
Length(List L)//求表长
LocateElem(List L,ElemType e)//按值查找,返回位序
GetElem(List L,int i)//按位查找
ListInsert(List &L,int i, ElemType e)//插入操作,在表L的第i位序插入元素e
ListDelete(List &L,int i,ElemType &e)//删除第i位序的元素,并用e返回删除元素
PrintList(List L)//输出操作
Empty(List L)//判空操作
DestroyList(List &L)//销毁线性表
2.2 线性表的顺序表示(顺序表)
逻辑顺序与其物理顺序相同
顺序表的任意一个数据元素都可以随机存取。
顺序存储结构是一种随机存取的存储结构。
优点:
- 支持随机访问O(1)
- 存储密度高
缺点:
- 元素的插入(平均需要n/2次操作)和删除(平均需要(n-1)/2次操作)需要移动大量元素
- 分配需要一段连续的存储空间,灵活性较差
静态分配顺序表代码如下:
#define MAX_SIZE 100//静态顺序表定义
typedef struct{int data[MAX_SIZE];int length;
}SqList;//线性表初始化
InitList(SqList &L){for(int i=0;i<L.length;i++){L.data[i]=0;}L.length = 0;
}//插入操作
bool ListInsert(SqList &L, int i, int e){if(i<1||i>L.length+1) return false;if(L.length >= MAX_SIZE) return flasefor(int j = L.length;j>=i;j--){L.data[j] = L.data[j-1];}L.data[i-1] = e;L.length++;return true;
}
//静态线性表删除操作
bool ListDelete(SqList &L, int i,int &e){if(i<1||i>L.length) return false;if(L.length<=0) return false;e = L.data[i-1]for(int j=i;j<L.length;j++){L.data[j-1]=L.data[j];}L.length--;return true;
}
//按值查找
int LocateElem(SqList L, int e){for(int i=0;i<L.length;i++){if(L.data[i]==e){return i+1;//返回位序}}return -1;//查找失败
}
动态分配顺序表代码如下:
//动态顺序表定义
typedef struct{int *data;int length;int max_size;
}SqList;//线性表初始化
InitList(SqList &L){L.data = (int *)malloc(sizeof(int)*INIT_SIZE)L.length = 0;L.max_size = INIT_SIZE;
}
//线性表插入
bool ListInsert(SqList &L,int i, int e){if(i<1||i>L.length+1) return false;if(L.length>=L.max_size) return false;for(int j=L.length;j>=i;j--){L.data[j] = L.data[j-1];}L.data[i-1] = e;L.length++;return true;
}
//动态线性表删除操作
bool ListDelete(SqList &L, int i,int &e){if(i<1||i>L.length) return false;if(L.length<=0) return false;e = L.data[i-1]for(int j=i;j<L.length;j++){L.data[j-1]=L.data[j];}L.length--;return true;
}
//按值查找
int LocateElem(SqList L, int e){for(int i=0;i<L.length;i++){if(L.data[i]==e){return i+1;//返回位序}}return -1;//查找失败
}
应用题
1. 原地逆置顺序表
void function(SqList &L){int temp;for(int i=0;i<L.length/2;i++){temp = L.data[i];L.data[i] = L.data[L.length-1-i];L.data[L.length-1-i] = L.data[i];}
}
2.删除所有值为e的元素,要求时间复杂度为O(n),空间复杂度为O(1)
void function(SqList &L, int e){int pos = 0;for(int i=0;i<L.length;i++){if(L.data[i] != e){L.data[pos] = e;pos++;}}L.length = pos;
}
3. 有序顺序表中删除所有值重复的元素
bool function(SqList &L){if(L.length < 1) return false;int i=0;int j=1;for(j;j<L.length;j++){if(L.data[j]==L.data[i]) continue;i++;L.data[i] = L.data[j];}L.length = i+1;return true;
}
4. merge两个有序顺序表,并返回新的表
SqList mergeList(SqList L1, SqList L2, SqList &result){if(L1.length + L2.length > result.maxsize) return false;int i_L1 = 0,i_L2 = 0;int pos = 0;while(i_L1<L1.length && i_L2<L2.length){if(L1.data[i_L1]<=L2.data[i_L2]){result[pos] = L1.data[i_L1];pos++;i_L1++;}result[pos] = L2.data[i_L2];pos++;i_L2++;}while(i_L1<L1.length){result[pos] = L1.data[i_L1];pos++;i_L1++;}while(i_L2<L2.length){result[pos] = L2.data[i_L2];pos++;i_L2++;}result.length = pos;return result;
}
5. 顺序表循环左移p个单位
void reserve(SqList &L, int start, int end){int temp;for(int i = 0;i <= (start-end)/2; i++){temp = L.data[start + i];L.data[start + i] = L.data[end - i];L.data[end - i] = temp;}
}
void function(SqList &L, int p){reserve(L, 0, p-1);reserve(L, p, L.length-1);reserve(L, 0, L.length-1);
}
6. 求两个等长的升序顺序表L1、L2的并集的中位数
void fucntion(SqList L1, SqList L2){int mid_L1 = L1.data[L1.length/2];int mid_L2 = L2.data[L2.length/2];}
2.3 线性表的链式表达(链表)
2.3.1 单链表
定义与初始化
//单链表的定义
typedef struct LNode{ElemType data;LNode *next;
}LNode, *LinkList;//带头节点的初始化(仅需要初始化头节点)
bool InitList(LinkList &L){L = (LNode *)malloc(sizeof(LNode));L->next = NULL;return true;
}//不带头节点的初始化(仅需设定为NULL)
bool InitList(LinkList &L){L = NULL;return true;
}
单链表的相关操作
//获取单链表长度
int Length(LinkList L){int length = 0;LNode *temp = L;while(temp->next != NULL){length++;temp = temp->next;}return length;//带头节点return length+1;//不带头节点
}//按位序号查找节点(带头节点)
LNode* GetElem(LinkList L, int i){if(i<1) return false;int pos = 0;LNode* temp = L;while(pos<i || temp->next!=NULL){pos++;temp = temp->next;}if(pos == i) return temp;return NULL;
}//按值查找节点(带头节点)
LNode* GetElem(LinkList L, ElemType e){LNode* temp = L->next;while(temp->data != e && temp!=NULL){temp = temp->next;}return temp;
}//在第i位序插入元素e
bool ListInsert(LinkList &L, int i, ElemType e){if(i<1) return false;int pos = 0;LNode* p = L;while(pos<i-1 && p!=NULL){pos++;p = p->next;}if(p == NULL) return false;LNode* temp = (LNode *)malloc(sizeof(LNode*));temp->data = e;temp->next = p->next;p->next = temp;
}//删除位序为i的元素并用e返回被删除元素的值
bool ListDelete(LinkList &L, int i, ElemType* e){int pos = 0;LNode* p = L;while(pos < i-1 && p != NULL){pos++;p = p->next;}if(p==NULL || p->next == NULL) return false;e = p->next->data;LNode* temp = p->next;p->next = temp->next;free(temp);return true;
}//头插法建立链表
LinkList ListHeadInsert(LinkList &L){if(L==NULL){L = (LNode*)malloc(sizeof(LNode*));//初始化头节点L->next = NULL;}int x;scanf("%d", &x)while(x!=999){LNode* p = (LNode *)malloc(sizeof(LNode*));p->data = x;p->next = L->next;L->next = p;scanf("%d", &x)}return L;
}//尾插法建立链表
LinkList ListHeadInsert(LinkList &L){if(L==NULL){L = (LNode*)malloc(sizeof(LNode*));//初始化头节点L->next = NULL;}LNode* p = L;int x;scanf("%d", &x)while(x!=999){LNode* temp = (LNode *)malloc(sizeof(LNode*));temp->data = x;p->next = temp;p = temp;scanf("%d", &x)}p->next = NULL;//注意!return L;
}
2.3.2 双链表
定义与初始化
//双链表定义
typedef struct DNode{struct DNode* prior;struct DNode* next;ElemType data;
}DNode, *DLinkList;//双链表初始化
void InitList(DLinkList &L){L = (DNode*)malloc(sizeof(DNode));L->prior = NULL;L->next = NULL;
}
双链表的操作
//双链表的后继插入
bool ListInster_after(DLinkList &L, int i, ElemType e){if(i<1 || L==NULL) return false;DNode *p = L;int pos = 0;while(pos < i-1 && p!=NULL){p = p->next;pos++;}if(p == NULL) return false;DNode* temp = (DNode*)malloc(sizeof(DNode*));temp->data = e;temp->prior = p;temp->next = p->next;if(p->next != NULL){p->next->prior = temp;}p->next = temp;return true;
}//双链表的删除操作
bool ListDelete(DLinkList &L, int i){if(i<1 || L==NULL) return false;DNode *p = L;int pos = 0;while(pos < i && p!=NULL){p = p->next;pos++;}if(p == NULL) return false;p->prior->next = p->next;if(p->next!=NULL) p->next->prior = p->prior;free(p);
}
2.3.3 循环链表
循环链表的定义与初始化
//单循环链表的定义
typedef struct LNode{struct LNode* next;ElemType data;
}LNode, *LinkList;//双循环链表的定义
typedef struct DNode{struct LNode *next, *prior;ElemType data;
}DNode, *DLinklist;//单循环链表的初始化
void InitList(LinkList &L){L = (LNode*)malloc(sizeof(LNode));if(L==NULL) return false;L->next = L;
}//双循环链表的初始化
void InitList(DLinkList &L){L = (DNode*)malloc(sizeof(DNode));if(L==NULL) return false;L->next = L;L->prior = L;
}
循环链表的操作
//判断是否为空
bool Empty(LinkList L){return L->next == L;
}//判断是否为尾节点
bool is_Tail(LinkList L, LNode *p){return p->next == L;
}//插入和删除和之前一样,但是不需要进行边界的判空操作!
2.3.4 静态链表
2.3.5 顺序表与链表的比较
逻辑结构:均为线性结构
存储结构:
顺序表为顺序存储,链表为链式存储
顺序表:
- 优点:支持随机存储、存储密度高;
- 缺点:大片连续空间分配不方便、且改变容量不方便
链表:
- 优点:离散的小空间,分配方便,改变容量方便
- 缺点:不可随机存取,存储密度低
操作方式:
- 按值查找:顺序表无序时,时间复杂度为O(n);顺序表有序时,时间复杂度为O(logn);链表始终为O(n)。
- 按位查找:顺序表为O(1),链表为O(n)。
- 插入和删除:顺序表和链表均为O(n),但是链表比顺序表快得多。(顺序表需要移动大量数据)
评价两种数据结构的方式:
- 存储结构
- 逻辑结构
- 对应的相关运算效率比较
- 得出结论……
注意
- 链表节点内的存储单元地址为连续的
- 建立一个有序单链表的最低时间复杂度为O(nlogn)(数组排序最快为O(nlogn),排序后建立链表为O(n),综上为O(nlogn))
- 需要分配大量空间,且删除和插入无需移动元素的线性表为:静态链表
相关文章:
数据结构与算法整理复习(一):数据结构概念与线性表
目录 第一章:绪论 1.1 数据结构的基本概念 1.2 算法与算法评价 第二章:线性表 2.1 线性表的定义和基本操作 2.2 线性表的顺序表示(顺序表) 应用题 2.3 线性表的链式表达(链表) 2.3.1 单链表 2.3.2…...
虚幻商城 Fab 免费资产自动化入库
文章目录 一、背景二、实现效果展示三、实现自动化入库一、背景 上一次写了个这篇文章 虚幻商城 Quixel 免费资产一键入库,根据这个构想,便决定将范围扩大,使 Fab 商城的所有的免费资产自动化入库,是所有!所有! 上一篇文章是根据下图这部分资产一键入库: 而这篇文章则…...
TCP Window Full是怎么来的
wireshark查看包时,会看到TCP Window Full,总结下它的特点: 1. Sender会显示 TCP Window Full 2. “Sender已发出,但,Receiver尚未ack的字节”,即Sender的 bytes in flights 3. Sender的 bytes in fligh…...
高效建站指南:通过Portainer快速搭建自己的在线网站
文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…...
“UniApp的音频播放——点击视频进入空白+解决视频播放器切换视频时一直加载的问题”——video.js、video-js.css
今天,又解决了一个单子“UniApp的音频播放——点击视频进入空白解决视频播放器切换视频时一直加载的问题” 一、问题描述 在开发一个基于 video.js 的视频播放器时,用户通过上下滑动切换视频时,视频一直处于加载状态,无法正常播放…...
如何让openhands始终输出中文?
在本地创建一个文件./user_prompt.j2 添加一行 Always respond in 中文你可以直接: echo "Always respond in 中文" > ./user_prompt.j2使用官方文档的docker命令启动容器时-v挂载一个文件/app/openhands/agenthub/codeact_agent/prompts/user_promp…...
CSS 溢出问题及解决方案:实用案例与技巧
在网页开发中,CSS 的布局和样式起着至关重要的作用,但经常会遇到一个棘手的问题——溢出问题。溢出是指元素内的内容超出了其设定的容器大小,这不仅会影响页面的美观,还可能干扰用户体验。本文将详细探讨 CSS 溢出问题的案例&…...
vue3使用音频audio标签
文章目录 一、背景二、页面三、标签介绍四、代码五、代码说明场景1:针对加载固定格式的比如MP3文件,可直接使用\<audio>标签场景2:针对播放告警内容,比如中文或者英文词条情况 一、背景 项目使用vue3,需求针对告…...
【useCallback Hook】在多次渲染中缓存组件中的函数,避免重复创建函数
文章目录 什么是 useCallback?基本语法 为什么需要 useCallback?示例1. 避免子组件重复创建函数2. 作为 useEffect 的依赖项 注意事项总结 在 React 开发中,性能优化是一个重要的主题。随着应用规模的增长,组件的重新渲染可能会变…...
Vue2+OpenLayers添加缩放、滑块缩放、拾取坐标、鹰眼、全屏控件(提供Gitee源码)
目录 一、案例截图 二、安装OpenLayers库 三、代码实现 四、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、代码实现 废话不多说,直接给完整代码,替换成自己的KEY即可运行: <template><div><div i…...
feign调用跳过HTTPS的SSL证书校验配置详解
一、问题抛出 如果不配置跳过SSL证书校验,当Feign客户端尝试连接到一个使用自签名证书的服务器时,可能会抛出类似以下的异常: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building faile…...
spring @EnableAspectJAutoProxy @Aspect的使用和源码流程
目录 测试代码EnableAspectJAutoProxyAspectJAutoProxyRegistrarAnnotationAwareAspectJAutoProxyCreatororg.springframework.context.support.AbstractApplicationContext#registerBeanPostProcessors 实例化AnnotationAwareAspectJAutoProxyCreator bean "a"的代理…...
项目实战--网页五子棋(游戏大厅)(3)
我们的游戏大厅界面主要需要包含两个功能,一是显示用户信息,二是匹配游戏按钮 1. 页面实现 hall.html <!DOCTYPE html> <html lang"ch"> <head><meta charset"UTF-8"><meta name"viewport"…...
『 实战项目 』Cloud Backup System - 云备份
文章目录 云备份项目服务端功能服务端功能模块划分客户端功能客户端模块划分 项目条件Jsoncpp第三方库Bundle第三方库httplib第三方库Request类Response类Server类Client类搭建简单服务器搭建简单客户端 服务端工具类实现 - 文件实用工具类服务器配置信息模块实现- 系统配置信息…...
【机器学习实战入门】使用OpenCV和Keras的驾驶员疲劳检测系统
嗜睡驾驶者警报系统 防止司机疲劳驾驶警报系统 中级 Python 项目 - 司机疲劳检测系统 疲劳检测是一种安全技术,能够预防因司机在驾驶过程中入睡而造成的事故。 本中级 Python 项目的目标是建立一个疲劳检测系统,该系统将检测到一个人的眼睛闭合了一段时…...
使用 spring boot 2.5.6 版本时缺少 jvm 配置项
2.5.6我正在使用带有版本和springfox-boot-starter版本的Spring Boot 项目3.0.0。我的项目还包括一个WebSecurityConfig扩展WebSecurityConfigurerAdapter并实现WebMvcConfigurer的类。但是,我面临的问题是指标在端点jvm_memory_usage_after_gc_percent中不可见/act…...
【强化学习】Soft Actor-Critic (SAC) 算法
📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...
2024年博客之星主题创作|Android 开发:前沿技术、跨领域融合与就业技能展望
目录 引言 一、推动 Android 应用创新的核心力量 1.1 人工智能与机器学习的崛起 1.2 增强现实(AR)与虚拟现实(VR)的应用扩展 1.3 5G技术的推动 1.4 跨平台开发技术的成熟 1.4.1 React Native 1.4.2 Flutter 1.4.3 Taro …...
Spring Boot--@PathVariable、@RequestParam、@RequestBody
目录 声明!! 什么是RESTful? RESTful 的基本原则 无状态性(Stateless) 统一接口(Uniform Interface) 分层系统(Layered System) 缓存(Cacheable&#…...
网站HTTP改成HTTPS
您不仅需要知道如何将HTTP转换为HTTPS,还必须在不妨碍您的网站自成立以来建立的任何搜索排名权限的情况下进行切换。 为什么应该从HTTP转换为HTTPS? 与非安全HTTP于不同,安全域使用SSL(安全套接字层)服务器上的加密代…...
Spring Boot + Netty + WebSocket 实现消息推送
1、关于Netty Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。 2、Maven依赖 <dependencies><!-- https://mvnrepository.com/artifact/io.netty/netty-all --><dependency><gr…...
AI之HardWare:英伟达NvidiaGPU性价比排名(消费级/专业级/中高端企业级)以及据传英伟达Nvidia2025年将推出RTX 5090/5080、华为2025年推出910C/910D
AI之HardWare:英伟达NvidiaGPU性价比排名(消费级/专业级/中高端企业级)以及据传英伟达Nvidia2025年将推出RTX 5090/5080、华为2025年推出910C/910D 目录 英伟达NvidiaGPU性能排名(消费级/专业级/中高端企业级) NVIDIA中消费级和专业级 GPU NVIDIA中高端企业GPU …...
ESP32云开发二( http + led + lcd)
文章目录 前言先上效果图platformio.iniwokwi.tomldiagram.json源代码编译编译成功上传云端完结撒花⭐⭐⭐⭐⭐ 前言 阅读此篇前建议先看 此片熟悉下wokwi https://blog.csdn.net/qq_20330595/article/details/144289986 先上效果图 Column 1Column 2 platformio.ini wokwi…...
JavaScript语言的软件工程
JavaScript语言的软件工程 引言 在当今软件开发的浪潮中,JavaScript已不仅仅是一个简单的前端脚本语言。它的位置已经升华为全栈开发的重要语言之一,借助Node.js等技术,JavaScript不仅可以用于浏览器环境,还可以在后端服务器中运…...
【Qt】04-Lambda表达式
前言一、概念引入二、使用方法2.1 基本用法代码示例2.2 捕获外部变量2.3 参数列表 三、完整代码mywidget.cppsecondwidget.cppmywidget.hsecondwidget.h 总结 前言 一、概念引入 Lambda表达式(Lambda Expressions)是C11标准引入的一种匿名函数对象&…...
Golang 生态学习
1. Go 语言基础 在深入 Go 语言的生态之前,首先需要掌握 Go 语言本身的核心特性。 • Go 语言官方文档:https://golang.org/doc/ Go 官方文档是学习语言基础和标准库的首选资源。 • 学习内容: • 基础语法:数据类型、控制流…...
Arcgis Pro安装完成后启动失败的解决办法
场景 之前安装的Arcgis Pro 今天突然不能使用了,之前是可以使用的,自从系统更新了以后就出现了这个问题。 环境描述 Arcgis Pro 3.0 Windows 10 问题描述 打开Arcgis Pro,页面也不弹出来,打开任务管理器可以看到进程创建之后&…...
支持向量机SVM的应用案例
支持向量机(Support Vector Machine,SVM)是一种强大的监督学习算法,广泛应用于分类和回归任务。 基本原理 SVM的主要目标是周到一个最优的超平面,该超平面能够将不同类别的数据点尽可能分开,并且使离该超平面最近的数…...
Linux中的Iptables介绍
文章目录 iptables1. 概述2. **工作原理**3. 数据包处理流程与规则匹配顺序4. 常用的匹配条件5. 动作类型6. 基本命令7. 高级功能 iptables 1. 概述 Iptables 是一个用于配置 Linux 内核防火墙的用户空间工具。它能够对进出服务器的网络数据包进行过滤、修改和转发等操作&…...
14天学习微服务-->第2天:Spring Cloud深入与实践
第2天:Spring Cloud深入与实践 一、Spring Cloud核心组件深入 在微服务架构中,Spring Cloud 提供了一系列核心组件来支持服务的注册与发现、配置管理、负载均衡等功能。今天我们将深入学习其中的三个关键组件:Eureka/Nacos(服务…...
使用 Box2D 库开发愤怒的小鸟游戏
使用 Box2D 库开发愤怒的小鸟游戏 Box2D 是一个开源的 2D 物理引擎,广泛应用于游戏开发中,特别是在模拟物体的运动、碰撞、重力等方面。在本文中,我们将利用 Box2D 库开发一个简化版的 愤怒的小鸟 游戏。我们将一步步展示如何实现物理引擎的…...
C# ComboBox 控件属性
ComboBox 的基本属性 在C#中,ComboBox控件具有多种属性,这些属性可以帮助开发者更好地控制和管理控件的各个方面。以下是一些基本的ComboBox属性及其功能: 公共属性 AccessibilityObject:获取分配给该控件的AccessibleObject。 Ac…...
《keras 3 内卷神经网络》
keras 3 内卷神经网络 作者:Aritra Roy Gosthipaty 创建日期:2021/07/25 最后修改时间:2021/07/25 描述:深入研究特定于位置和通道无关的“内卷”内核。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub …...
Linux:文件描述符fd、系统调用open
目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说,如果在电脑上新建了一个空白文档࿰…...
ToDesk设置临时密码和安全密码都可以当做连接密码使用
ToDesk 在各领域办公都已经是非常常见了 为了安全 ToDesk 设置了连接密码,想连接 需要输入远程码和连接密码 我们刚打开 系统默认给我们用的是临时密码,安全性确实很强 和定时Tokey一样,固定时间切换。 但是 如果我们要经常连接这个电脑&a…...
C#防止重复提交
C#防止重复提交 文章目录 C#防止重复提交前言防止重复提交的思路Web API 防止重复提交代码实现代码讲解使用方法 MVC防止重复提交总结 前言 当用户在前端进行提交数据时,如果网络出现卡顿和前端没有给出响应的话顾客通常都会狂点提交按钮,这样就很容易导…...
递归算法学习v2.2
46. 全排列 class Solution {List<List<Integer>> ret;List<Integer> path;boolean[] check;public List<List<Integer>> permute(int[] nums) {ret new ArrayList<>();path new ArrayList<>();check new boolean[nums.length…...
unity插件Excel转换Proto插件-ExcelToProtobufferTool
unity插件Excel转换Proto插件-ExcelToProtobufferTool **ExcelToProtobufTool 插件文档****1. 插件概述****2. 默认配置类:DefaultIProtoPathConfig****属性说明** **3. 自定义配置类****定义规则****示例代码** **4. 使用方式****4.1 默认路径****4.2 自定义路径**…...
manim(manimgl)安装教学-win11(2024-08)
manim 目前的两种版本:★★ 稍微捋一捋【项目中的 readme.md 十分重要】 manimgl 是 Grant Sanderson(YouTube频道 3Blue1Brown的作者)等人开发。 现在为 manimgl,在维护中。 manimCE 是2020年后的 manim 分支 manim community e…...
【语言处理和机器学习】概述篇(基础小白入门篇)
前言 自学笔记,分享给语言学/语言教育学方向的,但对语言数据处理感兴趣但是尚未入门,却需要在论文中用到的小伙伴,欢迎大佬们补充或绕道。ps:本文不涉及公式讲解(文科生小白友好体质)ÿ…...
脚本工具:PYTHON
Python 是一种高级编程语言,以其简洁清晰的语法和强大的功能被广泛应用于各种领域,包括自动化脚本编写、数据分析、机器学习、Web开发等。以下是一些关于使用 Python 编写脚本工具的基本介绍、常用库以及一些实用技巧总结。 这里写目录标题 基础知识安装…...
一文讲解Redis常见使用方式
1. 单机模式部署 适用场景: • 开发和测试环境,或者对高可用性要求不高的小型项目。 部署步骤: 1. 拉取 Redis 镜像: docker pull redis:latest 2. 运行 Redis 容器: docker run -d --name redis-single -p 637…...
Gin 源码概览 - 路由
本文基于gin 1.1 源码解读 https://github.com/gin-gonic/gin/archive/refs/tags/v1.1.zip 1. 注册路由 我们先来看一段gin代码,来看看最终得到的一颗路由树长啥样 func TestGinDocExp(t *testing.T) {engine : gin.Default()engine.GET("/api/user", f…...
【计算机网络】传输层协议TCP与UDP
传输层 传输层位于OSI七层网络模型的第四层,主要负责端到端通信,可靠性保障(TCP),流量控制(TCP),拥塞控制(TCP),数据分段与分组,多路复用与解复用等,通过TCP与UDP协议实现…...
iOS UIScrollView的一个特性
1如果UIScrollView 的contentSize.height > scrollView.bounds.size.height - scrollView.contentInset.top - scrollView.contentInset.bottom , 则scrollView就可以滚动,否则无法滚动 并且最大的滚动范围就是 contentSize.height - ( s…...
Docker 实现MySQL 主从复制
一、拉取镜像 docker pull mysql:5.7相关命令: 查看镜像:docker images 二、启动镜像 启动mysql01、02容器: docker run -d -p 3310:3306 -v /root/mysql/node-1/config:/etc/mysql/ -v /root/mysql/node-1/data:/var/lib/mysql -e MYS…...
python爬虫入门(实践)
python爬虫入门(实践) 一、对目标网站进行分析 二、博客爬取 获取博客所有h2标题的路由 确定目标,查看源码 代码实现 """ 获取博客所有h2标题的路由 """url "http://www.crazyant.net"import re…...
通过Ukey或者OTP动态口令实现windows安全登录
通过 安当SLA(System Login Agent)实现Windows安全登录认证,是一种基于双因素认证(2FA)的解决方案,旨在提升 Windows 系统的登录安全性。以下是详细的实现方法和步骤: 1. 安当SLA的核心功能 安…...
C 语言雏启:擘画代码乾坤,谛观编程奥宇之初瞰
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。* 这一课主要是让大家初步了解C语言,了解我们的开发环境,main函数,库…...
【Linux系统编程】—— 进程替换及其在操作系统中的应用与实现
文章目录 什么是进程替换?进程替换当中的接口单进程替换多进程的替换详解exec接口execlexeclpexecv 前言: 本篇博客将深入探讨进程替换的概念及其在操作系统中的作用。我们将介绍进程替换的基本原理,探讨操作系统如何通过进程的切换来实现任务…...