【数据结构】励志大厂版·初阶(复习+刷题):线性表(顺序表)
前引:上一篇我们复习了复杂度,今天我们来通过实践回忆我们的线性表知识点,下面将讲解什么是线性表,顺序结构又是什么,知识点简洁精髓,无废话可言,小编会从每个细节讲起,包含头文件的使用,分析每句代码的位置,这篇文章可作为你的绝佳复习资料哦,欢迎在评论区进行点评
目录
知识点速览
代码实现与讲解
定义结构体
静态顺序表
初始化
动态顺序表
初始化
存储元素
头插
尾插
头删
尾删
随机删除
随机插入
练习题一
练习题二
知识点速览
线性表: n 个具有相同特性的数据元素的有限序列。在逻辑上来说是线性结构,也就是说它存起来的数据像一条线一样(物理上并不一定是连续的),通常以数组、链表结构来存储(常见的线性表:顺序表、链表、栈、队列、字符串......)
顺序表:用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般采用数组存储,在数组上完成数据的增删查找(顺序表可以分类为:静态顺序表(定长数组存储)、动态顺序表(动态开辟的数组存储))
代码实现与讲解
上面我们知道顺序表有两种实现方式,一种是定长数组,另一种是动态开辟数组,下面小编将分别作讲解,内容详细,分析到位,不仅是小编的复习整理,也是学习记录!
定义结构体
静态数组来存储数据,咱们需要一个结构体,因为涉及到多个变量,比如当前存储的数据个数、最大空间、存储空间,结构体可以参考下面这样设计:
struct List
{//定长数组int arr[10];//当前数据个数int size;//最大存储量int max;
};
这样我们就定义了一个结构体,它的类型是 struct List ,类比 int 、char 一样属于数据类型。下面我们来创造结构体变量,有以下两种方式:直接创造 类型+名称这样创造。如下参考:
这里我们有几点可以优化 及 注意的地方:
(1)使用typedef 来重新定义变量,例如这个结构体被typedef重新定义之后,它的类型就可以 简写为 List
typedef struct List
{//定长数组int arr[10];//当前数据个数int size;//最大存储量int max;
}List;
(2)同样我们可以用 typedef 来定义变量类型、用宏定义常量,可以方便以后进行代码维护
//定义变量类型
typedef int Plastic;//宏定义常量
#define MAX 10typedef struct List
{//定长数组Plastic arr[MAX];//当前数据个数Plastic size;//最大存储量Plastic max;
}List;
(3)注意下面这两种写法,小编通过画图来进行注释
静态顺序表
我们已经定义完了结构体,下面我们来简单看看静态顺序表,这里因为静态顺序表与动态顺序表除了开辟类型不一样,其它大致相同,我们以动态顺序表为主要的讲述对象
初始化
这里需要注意,我们改变的是结构体的成员,需要取地址,因为实参是形参的一份临时拷贝,取地址的话,函数就拿到的是结构体的地址,否则就是对结构体的一份拷贝,不会真正改变,例如:
//初始化
Preliminary(&Static);
在初始化空间的时候,我们可以采用函数 memset ,这样可以避免使用几条代码的循环
void Preliminary(List* Static)
{//初始化当前数据个数Static->size = 0;//初始化最大存储个数Static->max = MAX;//初始化空间memset(Static->arr, 0, sizeof(Plastic) * MAX);
}
初始化完成之后,再按照数组那样取存储数据就好了,下面我们来重点讲解动态顺序表!
动态顺序表
初始化
跟之前的初始化其实大差不差,只是我们结构体里面存的数组变成了指针,需要初始化时开辟空间
typedef struct List
{//动态空间指针Plastic* arr;//当前数据个数Plastic size;//最大存储量Plastic max;
}List;
下面我们来初始化结构体里面的变量 ,下面我们再通过调试来看初始化的结果
void Preliminary(List* Static)
{//初始化当前数据个数Static->size = 0;//初始化最大存储个数Static->max = MAX;//开辟数组空间Static->arr = (int*)malloc(sizeof(Plastic) * MAX);//判断空间有效性if (Static->arr == NULL){printf("开辟空间失败\n");return;}
}
存储元素
下面我们来将元素存储进动态空间,按照逻辑,我们应该考虑当前是否是满空间,否则就要扩容了,为了以后方便维护,和提高代码的可读性,我们先来实现扩容函数!下面的代码有几点注意!
(1)扩容空间的指针最好不要用原空间指针,因为扩容可能不是在原空间后面开辟
(2)如果扩容成功,需要将原空间指针与新空间指针连接起来
//扩容
void Extend(List* Static)
{int* pc = (int*)realloc(Static->arr, sizeof(Plastic) * (Static->max) * 2);//判断扩容是否成功if (pc == NULL){printf("扩容失败\n");return;}else{//更新空间Static->arr = pc;Static->max *= 2;printf("扩容成功\n");}
}
下面我们来存储数据(注意更新元素个数),并且通过调试来观察存储结果
void Storage(List* Static, int data)
{//如果空间已满,就进行扩容if (Static->size == Static->max){Extend(Static);}//存储元素Static->size++;Static->arr[Static->size - 1] = data;
}
头插
头插前有两个操作需要注意:
(1)注意空间是否存在,否则无法头插
(2)头插需要判断空间是否充裕,通常是判断size+1的元素空间是否越界
然后经过这两个判断之后,进行头插,为了使代码效率高,我们选择从后往前进行挪动之前的数据,然后再进行插入,思维演示如下:
头插之前
头插之后
//头插
void Head(List* Static, int data)
{//如果空间不存在则无法头插if (Static->arr == NULL){printf("空间不存在无法头插\n");return;}//判断空间是否充足if (Static->size + 1 == Static->max){Extend(Static);}int end = Static->size - 1;//移动元素while (end >= 0){Static->arr[end + 1] = Static->arr[end];end--;}//插入元素Static->arr[0] = data;Static->size++;
}
尾插
我们刚才设置的结构体里面有一个成员是记录当前元素个数的,咱们尾插的步骤就是:先找尾、再插入。这里刚好就是size下标的地方(注意判断空间是否充裕),由于过程简单,我们直接上代码
void Tail(List* Static, int data)
{//判断空间是否充裕if (Static->size + 1 == Static->max){Extend(Static);}//插入Static->arr[Static->size] = data;Static->size++;
}
头删
删除第一个元素,我们这里不需要判断空间是否支持删除,只需要判断删除的这个元素空间是否存在就行了(不存在就退出)。判断之后,这里最方便的方式是将元素向前挪动,需要控制下标不能越界
头删之前
头删之后
void Head_Omit(List* Static)
{//判断是否有元素可以删除if (Static->size == 0){printf("删除失败\n");return;}//从第一个元素开始将后面的元素往前挪动int end = 0;while (end < Static->size-1)// 注意控制下标不能越界{Static->arr[end] = Static->arr[end + 1];end++;}//元素个数减一Static->size--;
尾删
尾插就不多说了,先判断空间是否支持删除(size > 0),然后size--即可
尾删之前
尾删之后
void Tail_Omit(List* Static)
{//判断能否删除if (Static->size == 0){printf("删除失败\n");return;}//删除Static->size--;
}
随机删除
随机删除小编就以提供下标为列,将对应下标的元素删除,需要考虑空间元素数量是否支持删除情况。小编提供的思路:先找到那个下标的元素,然后将后面的元素前移
删除之前
删除之后
//随机删除(下标位置删除)
Random_Omit(List* Static, int under)
{//找对应下标的元素int end = 0;while (end < Static->size && Static->arr[end] != Static->arr[under]){end++;}//如果没有找到if (end == Static->size){printf("该元素不存在\n");return;}//将后面的元素向前挪动while (end < Static->size - 1){Static->arr[end] = Static->arr[end + 1];end++;}//元素个数减一Static->size--;
}
随机插入
这里小编还是根据下标来找到插入的位置,先判断该下标是否支持插入,然后该下标原来的元素全部后移,再插入即可
插入之前
插入之后
//随机插入(下标位置插入)
void Random_Insert(List* Static, int under, int data)
{//先判断该下标是否支持插入int end = 0;while (end < Static->size && end != under){end++;}//如果没有找到if (Static->size == end){printf("该位置无法插入\n");return;}//该下标位置及后面的元素后移end = Static->size-1;while (end != under){Static->arr[end] = Static->arr[end-1];end--;}//插入Static->arr[under] = data;Static->size++;
}
练习题一
小编来大概解读一下这个题目:给你一个值,将一个数组中与这个值相等的元素移除,其余元素 按顺序前移
思维方法:
(1)这一种是最简单的一种:就是创建另外一个数组空间,将这些符合规定的值全部存到这个新数组里面,然后返回不等于这个值的元素个数,这是最普通的写法,小编就不演示了啊!
(2)算法解法思想:我们可以采用双指针的方法,通过指针的快慢移动,来处理等于val的值,如果在力扣上不方便调试,大家可以放在自己的编译器上去观察数据变化,重点是学会,不是求速通
例题详解:
首先我们设置2个下标(a,b),a就负责找不同于val的值,找到之后b所在的下标元素就等于a所在下标的值,然后a、b都向前移动一位,就这样循环就行了,注意a不能越界,下面我画图演示
我用数组【0、1、2、2、3、0、4、2】,val=2做例子,大家对着图配上代码梳理一遍思路!
int removeElement(int* nums, int numsSize, int val)
{int a = 0;int b = 0;int k = 0;while (a < numsSize){//a找不同while (a < numsSize && nums[a] == val){a++;}if (a >= numsSize){break;}//填埋、后移nums[b] = nums[a];a++;b++;k++;}return k;
}
练习题二
思维方法:
(1)此题我们还是可以通过双指针的思想来做,两个指针分别指向两个数组的起始位置,通过建立第三个数组空间,来根据双指针元素的大小进行顺序填充即可,但是此方法比较复杂(不推荐)
(2)找较大的元素,从后往前进行填充,这样也可以不用开辟新数组,详细解答过程如下
例题详解:
如果是 n1 先走完:
首先我们定义三个下标,例如num指向nums1的末尾,m1指向nums1初始数据末尾,n1指向nums2初始数据末尾,如下图:
然后我们通过找较大的值来从后向前填充。例如此时nums1【m1】>=nums2【n1】,num的位置就填充nums1【m1】,然后m1--,num--,例如:
接着通过循环来进行上面的操作:找两个数组中较大的值,填入num的位置,直到某个数组当前下标越界为止。【中间循环过程跳过】
此时我们按照上面的循环结束条件,两个数组的情况应该是下面这样的,nums1剩余的元素都是比nums2小的,自然也就不用管,直接达到了排序效果
如果是 m1 先走完:
我们再来看下面这种情况,如果是m1先走完,说明nums2中的剩余元素都是比nums1小的,m1走完也就结束了循环,存在nums2中有元素剩余,如图:
此时我们看到nums2的元素还没有走完,但是已经出循环了,这种情况就需要将nums2剩余的未排完的元素拷贝到nums1中去
if (m1 < 0)
{memcpy(nums1, nums2, sizeof(int) * (n1 + 1));
}
下面是总的代码,此题很有整理的必要,希望小编的讲解大家可以弄清楚!还是408真题哦!
void merge(int* nums1, int m, int* nums2, int n)
{int m1 = m - n - 1;int n1 = n - 1;int num = m - 1;while (n1 >= 0 && m1 >= 0){if (nums2[n1] >= nums1[m1] && n1 >= 0 && m1 >= 0){nums1[num] = nums2[n1];n1--;num--;}if (nums1[m1] >= nums2[n1] && n1 >= 0 && m1 >= 0){nums1[num] = nums1[m1];m1--;num--;}}//如果nums2中有元素剩余,就拷贝到nums1if (m1 < 0){memcpy(nums1, nums2, sizeof(int) * (n1 + 1));}
}
相关文章:
【数据结构】励志大厂版·初阶(复习+刷题):线性表(顺序表)
前引:上一篇我们复习了复杂度,今天我们来通过实践回忆我们的线性表知识点,下面将讲解什么是线性表,顺序结构又是什么,知识点简洁精髓,无废话可言,小编会从每个细节讲起,包含头文件的…...
C 语言结构体中的函数指针与 Kotlin 高阶函数的对比
在学习 C 语言的过程中,很多 Java/Kotlin 背景的开发者都会对结构体中出现的“函数指针”感到陌生。特别是当看到如下代码时: struct Animal {void (*speak)(void); };void dogSpeak() {printf("Woof!\n"); }int main() {struct Animal dog;d…...
MicroK8s和K8s的区别优劣在哪?
运行ubuntu24.04后提示这么一段话: Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8sjust raised the bar for easy, resilient and secure K8s cluster deployment.https://ubuntu.com/engage/secure-kubernetes-at-the-edge 这段话…...
C++指针和引用之区别(The Difference between C++Pointers and References)
面试题:C指针和引用有什么区 C指针和引用有什么区别? 在 C 中,指针和引用都是用来访问其他变量的值的方式,但它们之间存在一些重要的区别。了解这些区别有助于更好地理解和使用这两种工具。 01 指针 指针(Pointer…...
Linux——Shell编程之正则表达式与文本处理器(笔记)
目录 基础正则表达式 1:基础正则表达式示例 (4)查找任意一个字符“.”与重新字符“*” (5)查找连续字符范围“{ }” 文本处理器 一、sed工具 二、awk工具 (1)按行输出文本 (2࿰…...
关于k8s的部署
一、实验目的 1、理解k8s的组件的功能; 2、理解k8s中的资源类型; 3、 熟练掌握k8s部署配置; 二、实验内容: 前置知识点: 写出k8s有哪些组件并简述作用? ①Master 组件: Master 组件提供集…...
营销自动化实战指南:如何用全渠道工作流引爆线索转化率?
在数字化浪潮席卷全球的今天,企业争夺用户注意力的战场已从单一渠道转向全渠道。然而,面对海量线索,许多团队依然深陷效率泥潭:人工处理耗时费力、高价值线索流失、跨渠道数据难以整合……如何破局?营销自动化正成为企…...
利用Global.asax在ASP.NET Web应用中实现功能
Global.asax文件(也称为ASP.NET应用程序文件)是ASP.NET Web应用程序中的一个重要文件,它允许您处理应用程序级别和会话级别的事件。下面介绍如何利用Global.asax来实现各种功能。 Global.asax基本结构 <% Application Language"C#&…...
【Linux 并发与竞争实验】
【Linux 并发与竞争实验】 之前学习了四种常用的处理并发和竞争的机制:原子操作、自旋锁、信号量和互斥体。本章我们就通过四个实验来学习如何在驱动中使用这四种机制。 文章目录 【Linux 并发与竞争实验】1.原子操作实验1.1 实验程序编写1.2 运行测试 2.自旋锁实验…...
数据一致性策略之延迟双删-实现
延迟双删 查询数据之前优先去查Redis的缓存数据,减少数据库压力; 如果没有缓存会去查数据库,通过查询数据库后缓存热点Key Cache-Aside策略 高并发场景时,严重生产bug:数据不一致 业务场景: 事务1&#x…...
在PyTorch中,使用不同模型的参数进行模型预热
在PyTorch中,使用不同模型的参数进行模型预热(Warmstarting)是一种常见的迁移学习和加速训练的策略。以下是结合多个参考资料总结的实现方法和注意事项: 1. 核心机制:load_state_dict()与strict参数 • 部分参数加载&…...
【AI论文】InternVL3:探索开源多模态模型的高级训练和测试时间配方
摘要:我们推出了InternVL3,这是InternVL系列的一项重大进步,具有本地多模态预训练范式。 InternVL3不是将纯文本的大型语言模型(LLM)改编成支持视觉输入的多模态大型语言模型(MLLM),…...
基于Linux的ffmpeg python的关键帧抽取
1.FFmpeg的环境配置 首先强调,ffmpeg-python包与ffmpeg包不一样。 1) 创建一个虚拟环境env conda create -n yourenv python3.x conda activate yourenv2) ffmpeg-python包的安装 pip install ffmpeg-python3) 安装系统级别的 FFmpeg 工具 虽然安装了 ffmpeg-p…...
CNN:卷积到底做了什么?
卷积神经网络(Convolutional Neural Network, CNN) 是一种深度学习模型,专门用于处理具有网格结构的数据(如图像、视频等)。它在计算机视觉领域表现卓越,广泛应用于图像分类、目标检测、图像分割等任务。CN…...
C++ IO流
文章目录 C IO流流是什么C标准IO流C文件IO流c字符串流 C IO流 流是什么 在 C 中,“流(Stream)” 是一种 抽象的数据传输机制,它通过统一的接口实现了程序与各种输入/输出设备(如键盘、屏幕、文件、内存等)…...
解决splice改变原数组的BUG(拷贝数据)
项目场景: 项目中难免遇到需要删除改变数组的方法,去重,删除不要的数据等 问题描述: 但是splice方法会删除掉数据改变原数组,返回的是改变之后的数组,即使你是赋值的还是会影响到原数组的数据 GoodsInfo…...
ARINC818协议(二)
ARINC818对图像数据进行帧分割 1.FC协议定了5层模型结构:FC-4;FC-3;FC-2;FC-1;FC-0; 2.ARINC818协议位于FC-4层; 3.ARINC818协议在FC-4层使用FHCP帧头控制协议进行实现数据传递; 4.协议中有容器,容器头,object0~object…...
【Netty篇】Future Promise 详解
目录 一、 Netty Future 与 Promise —— 异步世界的“信使”与“传话筒”🚀1、 理解 Netty Future2、 理解 Netty Promise 二、 代码案例解读💻例1:同步处理任务成功👍例2:异步处理任务成功📲例3ÿ…...
【LaTeX】Misplaced alignment tab character . ^^I
目录 公式中出现Misplaced alignment tab character &. ^^I& 解决1:采用&& 解决2: 公式中出现Misplaced alignment tab character &. ^^I& \begin{equation}J_r & \dfrac{i\hbar}{2m}\left[\psi_2 \dfrac{\partial \psi^…...
数据中台(大数据平台)之元数据管理
👉元数据管理是数据管理的基础,数据中台产品要能够提供各类元数据采集的适配器,自动化采集技术元数据,并在技术元数据的基础上补充管理属性和业务属性,为后续的数据资源目录、数据安全管控、报表开发提供统一的口径。并…...
基于RRT的优化器:一种基于快速探索随机树算法的新型元启发式算法
受机器人路径规划中常用的快速探索随机树(RRT)算法的搜索机制的启发,我们提出了一种新颖的元启发式算法,称为基于RRT的优化器(RRTO)。这是首次将RRT算法的概念与元启发式算法相结合。RRTO的关键创新是其三种…...
设计模式每日硬核训练 Day 13:桥接模式(Bridge Pattern)完整讲解与实战应用
🔄 回顾 Day 12:装饰器模式小结 在 Day 12 中,我们学习了装饰器模式(Decorator Pattern): 强调在不改变原类结构的前提下,动态为对象增强功能。通过“包装对象”实现运行时组合,支…...
【开发语言】悬空指针问题
悬空指针(Dangling Pointer)是编程中常见的内存管理问题,尤其在C/C这类手动管理内存的语言中。以下是详细解释: 什么是悬空指针? 悬空指针是指向已经被释放(或失效)内存的指针。这段内存可能已…...
深入剖析 WiFi 定位解析功能:原理、技术优势与应用场景
WiFi 定位解析功能的原理 信号强度与距离的关系 WiFi 定位的核心原理基于无线信号传播过程中的一个基本特性:信号强度与信号发射源(即 WiFi 接入点,Access Point,简称 AP)和接收设备之间距离的关联。一般来说&am…...
从标准九九表打印解读单行表达式的书写修炼(Python)
解读单行表达式书写,了解修习单行捷径。 笔记模板由python脚本于2025-04-16 23:24:17创建,本篇笔记适合喜欢单行喜好python的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在于输出思考与经验,而不仅仅是知识的简单复述…...
HTML5好看的水果蔬菜在线商城网站源码系列模板4
文章目录 1.设计来源1.1 主界面1.2 关于我们1.3 商品信息1.4 新闻资讯1.5 联系我们1.5 登录注册 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/147264262 HTML5好看的水果…...
Arkts应用全局UI状态存储和持久化V2(AppStorageV2、PersistenceV2和@Type)
目录 应用全局UI状态存储和持久化V2版本 AppStorageV2 connect remove keys 示例 使用限制 PersistenceV2 connect remove keys save notifyOnError 示例 使用限制 Type 使用限制 应用全局UI状态存储和持久化V2版本 以下实例AppStorageV2、PersistenceV2和装饰…...
【QT】常用控件 【多元素类 | 容器类 | 布局类】
🌈 个人主页:Zfox_ 🔥 系列专栏:Qt 目录 一:🔥 QT 常用控件【多元素类】 🦋 List Widget -- 列表🦋 Table Widget -- 表格🦋 Tree Widget -- 树形 二:&#x…...
uniapp实现图文聊天功能
Uniapp 实现图文聊天功能 下面我将介绍如何在 Uniapp 中实现一个基本的图文聊天功能,包括消息发送、接收和展示。 一、准备工作 创建 Uniapp 项目准备后端接口(可以使用云开发、自己的服务器或第三方服务) 二、实现步骤 1. 页面结构 &l…...
【场景应用9】多语言预训练语音模型进行自动语音识别
一、理论介绍 “多语言预训练语音模型进行自动语音识别”这个模块是近年来语音识别(ASR, Automatic Speech Recognition)领域非常重要的发展方向。下面我来为你系统地讲解这个模块的基础理论与算法流程,尤其聚焦在如 wav2vec 2.0 multilingual、XLSR(cross-lingual speech…...
华为HCIE-openEuler认证:能否成为国产操作系统领域的技术稀缺人才?
HCIE-openEuler是华为面向开源操作系统领域的高级专家认证,聚焦openEuler系统的深度运维、性能调优与生态集成。作为华为鲲鹏计算生态的核心技术栈,该认证要求持证者具备从底层内核优化到上层云原生适配的全栈能力。以下从技术能力、实验设计、行业适配三…...
Uniapp:列表选择提示框
目录 一、出现场景二、效果展示三、具体使用 一、出现场景 在项目的开发过程中,有这样一种场景,就是点击按钮走后续的逻辑之前还需要选择前提条件,就一个条件的情况下如果使用弹出框就显示比较多余,列表选择提示框刚好能够满足我…...
uni-app 开发安卓 您的应用在运行时,向用户索取(定位、相机、存储)等权限,未同步告知权限申请的使用目的,不符合相关法律法规要求
您的应用在运行时,向用户索取(定位、相机、存储)等权限,未同步告知权限申请的使用目的,不符合相关法律法规要求。 测试步骤:1、 工作台 -打卡,申请定位权限;2、工作台-设置-编辑资料-更换头像,申请相机、存 储权限。 修改建议:APP在申请敏感权限时,应同步说明权限申…...
李宏毅NLP-4-语音识别part3-CTC
Connectionist Temporal Classification|CTC 基于连接主义时间分类(CTC)的语音识别架构,具体描述如下: 输入层:底部的 x 1 , x 2 , x 3 , x 4 x^1, x^2, x^3, x^4 x1,x2,x3,x4代表输入的语音信号分帧数据…...
基于.NET后端实现图片搜索图片库 核心是计算上传图片与库中图片的特征向量相似度并排序展示结果
基于.NET 后端实现图片搜索图片库的方案,核心是计算上传图片与库中图片的特征向量相似度并排序展示结果。 整体思路 图像特征提取:使用深度学习模型(如 ResNet)提取图片的特征向量。特征向量存储:将图片的特征向量存…...
数据中台(大数据平台)之数据仓库建设
数据中台作为企业数据管理的核心枢纽,应支持并促进企业级数据仓库的建设,确保数据的有效整合、治理和高效应用。在建设数据仓库的过程中,设计和规划显得尤为重要,需要深入理解业务需求,制定合理的技术架构,…...
设计模式之工厂模式(factory pattern):在商品对象创建系统中的应用
目录 一、设计思路 1. 简单工厂模式 2. 工厂方法模式 3. 抽象工厂模式 二、UML类图(PlantUML格式) 1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 三、实现过程与结果 1. 简单工厂模式 2. 工厂方法模式 3. 抽象工厂模式 四、总结 在面向对…...
在ubuntu20.04+系统部署VUE及Django项目的过程记录——以腾讯云为例
目录 1. 需求2. 项目准备3. VUE CLI项目部署3.1 部署前的准备3.1.1 后端通信路由修改3.1.2 导航修改 3.2 构建项目3.3 配置nginx代理 4. 后端配置4.1 其他依赖项4.2 单次执行测试4.3 创建Systemd 服务文件4.4 配置 Nginx 作为反向代理 5. 其他注意事项 1. 需求 近期做一些简单…...
解决前端vue项目在linux上,npm install,node-sass 安装失败的问题
Unable to save binary /var/lib/jenkins/workspace/xxx/node_modules/node-sass/vendor/linux-x64-72 : Error: EACCES: permission denied, mkdir ‘/var/lib/jenkins/workspace/x/node_modules/node-sass/vendor’ 这个是node-sass安装失败导致的。 #将npm的默认仓库更改为…...
FPGA_YOLO(四)用HLS实现循环展开以及存储模块
Vivado HLS(High-Level Synthesis,高层次综合)是赛灵思(Xilinx)在其 Vivado 设计套件 中提供的一款工具,用于将 高级编程语言(如 C、C、SystemC) 直接转换为 硬件描述语言࿰…...
用户组与用户
用户组管理: 创建用户组: groupadd 用户组名 删除用户组: groupdel 用户组名 用户管理: 创建用户 useradd [-g -d] 用户名 -g:指定用户的组 -d:指定用户的home路径,如果不加上&…...
npm install 报错常见的解决方法
npm install 报错的情况有很多种,每种错误的具体解决方案也有所不同。这里我将汇总一些常见的npm install报错及其解决办法: 1. 下载速度慢/网络问题 解决办法:更换npm包的镜像源至国内镜像,如淘宝npm镜像:npm confi…...
暂存一下等会写
#include<easyx.h> IMAGE SNOW 图形变量 struct MOVE生存结构体 {int x0;int y0; bool livefalse;}; initgraph(800, 800);初始化图形界面 MOVE snowflake[5000];目标数量 loadimage(&SNOW, "snow.png");加载图片 BeginBatchDraw(); 开始批量绘图。…...
C语言 —— 指尖跃迁 刻印永恒 - 文件操作
目录 1. 什么是文件 1.1 程序文件 1.2 数据文件 1.3 文件名 2. 二进制文件和文本文件 3. 文件的打开与关闭 3.1 流和标准流 3.2 文件指针 3.3 文件的打开与关闭 fopen fclose 4. 文件的顺序读写 4.1 fgetc和fputc fgetc fputc 4.2 fgets和fputs fgets fputs…...
第二章 DQL查询语句
第一章:基础查询 一、SELECT 语句 作用 SELECT 语句用于从数据库中选取数据。 结果被存储在一个结果表中,称为结果集。 语法 SELECT column1, column2, … FROM table_name; 与 SELECT * FROM table_name; 参数说明: column1, column2, …...
系统与网络安全------弹性交换网络(1)
资料整理于网络资料、书本资料、AI,仅供个人学习参考。 Trunk原理与配置 Trunk原理概述 Trunk(虚拟局域网中继技术)是指能让连接在不同交换机上的相同VLAN中的主机互通。 VLAN内通信 实现跨交换的同VLAN通信,通过Trunk链路&am…...
有哪些哲学流派适合创业二
好的,让我们更深入地探讨如何将哲学与数学深度融合,构建一套可落地的创业操作系统。以下从认知框架、决策引擎、执行算法三个维度展开,包含具体工具和黑箱拆解: 一、认知框架:用哲学重构商业本质 1. 本体…...
Python(18)Python中JSON的妙用:详解序列化与反序列化原理及实战案例
目录 一、背景:为什么Python需要JSON?二、核心技术解析:序列化与反序列化2.1 核心概念2.2 类型映射对照表 三、Python操作JSON的四大核心方法3.1 基础方法库3.2 方法详解1. json.dumps()2. json.loads()3. json.dump()4. json.load() 四、实战…...
Nautilus 正式发布:为 Sui 带来可验证的链下隐私计算
作为 Sui 安全工具包中的强大新成员,Nautilus 现已上线 Sui 测试网。它专为 Web3 开发者打造,支持保密且可验证的链下计算。Nautilus 应用运行于开发者自主管理的可信执行环境(Trusted Execution Environment,TEE)中&a…...
投资理财_从0到1:如何用1000元开启你的二级市场投资之旅?
投资理财_从0到1:如何用1000元开启你的二级市场投资之旅? 一、前言:投资不是赌博,而是科学与艺术的结合1.1 为什么学习二级市场投资?1.2 本篇博客的目标 二、投资的基本概念:先搞清楚“玩的是什么”2.1 二级…...