当前位置: 首页 > news >正文

数据结构学习之顺序表

        在C语言学习到一定阶段之后,接下来我们就进入到了数据结构的部分内容。

目录

数据结构与线性表

顺序表

        顺序表分类:

        接下来我们要写一段代码实现动态顺序表。

首先我们需要准备三个文件:

1.接下来我们要定义一个数据表

2.当创建号我们的顺序表之后,我们要对他进行初始化

3.而动态内存创建后就必须有销毁

4.接下来我们要对顺序表进行各种操作:增删插改

尾部插入数据

 头部插入数据

尾部删除数据

头部删除数据:

指定位置之前插入数据

指定位置查找数据

完整的代码:


数据结构与线性表

        数据就像草原的一群羊一样,如果你要在草原上找到一个叫做“咩咩”的羊很难,但是如果你要找一头“3号”羊是比较简单的。数据结构就是像羊圈管理羊群一样管理数据。

        因此可以说,数据结构就是计算机存储和组织数据的方式。

        数组就是一种很基础的数据结构,用来存储一群同类型的数据。但是随着我们要对数据进行的操作愈加复杂(访问、修改、插入数据等等等等),频繁的访问数组已经严重影响了计算机运行的效率,因此简单的数组已经无法满足我们的需要了,因此我们需要进入第一个数据结构类型——线性表。

        线性表是n个具有相同特性的数据元素的有限序列,是一种广泛应用的数据结构,常见的线性表有:顺序表、链表、栈、队列、字符串等等。

        但是注意线性表在逻辑上是连续的线性结构,但是物理上不一定是连续的。线性表在物理上储存的时候通常以数组和链式结构的形式储存。

顺序表

        顺序表在底层上是数组。

        那么既然已经有数组了,我们为什么需要顺序表呢?举例说明:

int a[100]={1,2,3,4,...X...};

        对于如上所示的100个元素的数组a。如果我们要修改其中一个数字就找先遍历数组找到对应元素修改,如果要插入和删除数组的话,都需要遍历这个100个元素的数组。这个效率显然是很低的。因此我们需要一个更好用、效率更高的工具:顺序表。

        顺序表是在数组的基础上加上了增删查改等方法的一种储存形式。顺序表的特性是在物理结构上连续,在逻辑结构上也连续。

        这是一个固定长度的数组

int a[10]={0};

        这是动态内存开辟出来的数组,确定大小后再去申请。

int *arr

        顺序表分类:

        静态顺序表:

​
​
Stack SeqList
{int arr[100];//定长数组int size;//顺序表当前有效的数据个数}​​

        动态顺序表:

​
Stack Seqlist
{int *arr;//int size//有效数字个数int capacity;//空间大小
};​

相较于静态顺序表,动态顺序表可以动态增容。

        接下来我们要写一段代码实现动态顺序表。

首先我们需要准备三个文件:

Seqlist.c——实现顺序表的方法
Seqlist.h——顺序表结构,顺序表声明,方法

test.c——测试代码

1.接下来我们要定义一个数据表

2.当创建号我们的顺序表之后,我们要对他进行初始化

这里我们用传值返回就会报错,原因:传值返回是值拷贝,但是这里s1没有值。
所以这里要用传址返回。

3.而动态内存创建后就必须有销毁

4.接下来我们要对顺序表进行各种操作:增删插改

声明:

尾部插入数据

原理展示:

要申请多大的空间?

 增容一般是2到3倍(2倍更常见)。因为一次性给太多空间就会像静态顺序表那样浪费大量空间而得不偿失,而过少就会导致需要频繁地扩容而导致程序运行效率过低

 尾部插入数据函数一:

尾部插入数据函数二:

因此这部分的代码为:

但是这个结构是比较脆弱的,如果用户输入了这么一个东西,它就会报错:读取访问权限冲突。

	SLPushback(NULL, 5);

 所以我们要对这个函数进行改造。

温柔的方式

//温柔的解决方式
if (ps->arr == NULL)
{return;
}
if (ps->size == ps->capacity)//空间不够了
{
//code
}

暴力的方式

//暴力判断
assert(ps->arr!= NULL);
//等价于assert(ps)

尾部插入的代码:

//尾部插入数据
void SLPushback(SL* ps, STDatatype x)
{//暴力判断assert(ps->arr!= NULL);//等价于assert(ps)if (ps->size == ps->capacity)//空间不够了{//申请空间//要增容只能用realloc函数,不能用malloc和callocint newcapacity = ps->capacity == 0 ? 4:2*ps->capacity;STDatatype*tmp = realloc(ps->arr, newcapacity * 2 * sizeof(STDatatype));//tmp指的是结构体当中的数组arrif (tmp==NULL )//realloc可能申请失败所以要判断{perror("realloc error");return 1;//程序推出}//申请成功ps->arr = tmp;ps->capacity = newcapacity;}ps->arr[ps->size++] = x;
}
 头部插入数据

 原理图:

如图所示,如果要申请空间挪动数据的话从最后一位开始

 代码为:

尾部删除数据

原理图:

        

代码: 

  

头部删除数据:

原理图:

代码:  

指定位置之前插入数据

原理:

代码; 指定位置删除数据

原理图:

        代码:

指定位置查找数据

查找数据相对来说比较简单,这里受限于篇幅,只讲解暴力查找的算法,即循环遍历数组

完整的代码:

Seqlist.h

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include<assert.h>
//定义顺序表的结构//#define N 100
//静态顺序表
//struct SeqList
//{
//	int arr[N];
//	int size;//有效数据个数
//};
typedef int STDatatype;
//这里是为了将来方便替换数组存储数据的类型
// 如果将来需要替换数据类型为char,只需要将int改为char即可//动态顺序表
typedef struct SeqList
{STDatatype* arr; int size;//有效数据个数int capacity;//顺序表空间大小
}SL;//这是为了将来为了方便调用结构体//顺序表初始化
void SLInit(SL* ps);//顺序表的销毁
void SLDestory(SL* ps);
//校验顺序表空间够不够
void SLCheckCapacity(SL* ps);
//顺序表的打印
void SLPrint(SL s);
//顺序表头部/尾部插入数据
void SLPushback(SL*ps, STDatatype x);//尾部插入数据
void SLPushfront(SL*ps, STDatatype x);//头部插入数据void SLPopback(SL*ps);	//尾部删除数据
void SLPopfront(SL*ps);//头部删除数据
//指定位置之前插入数据/删除数据/查找数据
void SLInsert(SL* ps, int pos,STDatatype x);//插入数据
//ps表示在ps所在的数组里插入数据
//pos在指定顺序表里下标的位置
//x为插入的数据
void SLDelete(SL* ps,int pos);//删除数据
int SLFind(SL* ps, STDatatype x);//查找数据

Seqlist.c

#define _CRT_SECURE_NO_WARNINGS
#include"Seqlist.h"
//Seqlist.c——实现顺序表的方法
//Seqlist.h——顺序表结构,顺序表声明,方法
//顺序表的初始化
void SLInit(SL *ps)
{ps->arr = NULL;//需要包含头文件<stdlib.h>ps->size=ps->capacity=0;}
//顺序表的销毁
void SLDestory(SL*ps)
{if (ps->arr)//判断数据表的数组不为空{free(ps->arr);}ps->arr = NULL;ps->size = ps->capacity = 0;
}
//校验顺序表空间够不够
void SLCheckCapacity(SL* ps)
{if (ps->size == ps->capacity)//空间不够了{//申请空间//要增容只能用realloc函数,不能用malloc和callocint newcapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;STDatatype* tmp = realloc(ps->arr, newcapacity * 2 * sizeof(STDatatype));//tmp指的是结构体当中的数组arrif (tmp == NULL)//realloc可能申请失败所以要判断{perror("realloc error");return 1;//程序推出}ps->arr = tmp;ps->capacity = newcapacity;}
}
//顺序表的打印
void SLPrint(SL s)
{for (int i = 0;i < s.size;i++){printf("%d ", s.arr[i]);}printf("\n");
}
//尾部插入数据
void SLPushback(SL* ps, STDatatype x)
{//温柔的方式// if(ps == NULL)// {//	return;// }//暴力判断assert(ps);//等价于assert(ps->arr!= NULL);//校验空间够不够SLCheckCapacity(ps);ps->arr[ps->size++] = x;
}
//头部插入数据
void SLPushfront(SL* ps, STDatatype x)
{assert(ps);SLCheckCapacity(ps);//先让顺序表中整体的数据向后移动一位。for (int i = ps->size - 1;i >=0;i--){ps->arr[i+1]=ps->arr[i];//最后为arr[1]=arr[0]}ps->arr[0] = x;ps->size++;
}//尾部删除数据
void SLPopback(SL* ps, STDatatype x)
{assert(ps);assert(ps->size != 0);//顺序表不为空//这段代码是否存在无所谓:ps->arr[ps->size - 1] = -1;--ps->size;
}
//头部删除数据
void SLPopfront(SL* ps)
{assert(ps);assert(ps->size != 0);//数据表整体向前移动一位for (int i = 0;i <= ps->size - 1;i++){ps->arr[i] = ps->arr[i+1];}ps->size--;
}
//指定位置之前插入数据
void SLInsert(SL* ps, int pos, STDatatype x)
{assert(ps);//pos必须>=0且<=sizeassert(pos>=0&&pos<=ps->size);SLCheckCapacity(ps);//校验空间够不够//让pos位置及之后的数据集体向后一位for (int i = ps->size-1;i >= pos;i--){ps->arr[i+1] = ps->arr[i];//最后为arr[pos+1]=arr[pos]}//pos位置空出来了ps->arr[pos] = x;ps->size++;
}
//指定位置删除数据
void SLDelete(SL* ps, int pos)
{assert(ps);assert(pos >= 0 && pos <ps->size);for (int i=pos;i<ps->size-1;i++){ps->arr[i] = ps->arr[i+1];//最后为arr[size-2]=arr[size-1]}ps->size--;}
//指定位置查找数据
int SLFind(SL* ps, STDatatype x)
{assert(ps);//遍历数组查找for (int i = 0;i <= ps->size - 1;i++){if (x == ps->arr[i]){//找到了return i;}else {continue;}}return -1;//无效的下标表示没找到
}

test.c

 

#define _CRT_SECURE_NO_WARNINGS
#include"Seqlist.h"
void SLtest1()
{SL s1;SLInit(&s1);//这里我们不能用传值返回//传值返回是值拷贝,但是这里s1没有值//所以这里要用传址返回//增删查改操作。//顺序表的插入//测试尾插SLPushback(&s1,1);SLPushback(&s1,2);SLPushback(&s1,3);SLPushback(&s1,4);//测试头插SLPushfront(&s1, 5);SLPushfront(&s1, 6);SLPrint(s1);// 测试头删SLPopfront(&s1);SLPopfront(&s1);SLPrint(s1);// 测试尾删SLPopback(&s1);SLPopback(&s1);SLPrint(s1);//顺序表的销毁SLDestory(&s1);
}
void SLtest2()
{SL s1;//初始化SLInit(&s1);//尾部插入数据SLPushback(&s1, 1);SLPushback(&s1, 2);SLPushback(&s1, 3);SLPushback(&s1, 4);//在指定位置之前插入数据SLInsert(&s1, 0, 99);SLInsert(&s1, s1.size, 88);SLPrint(s1);//99 1 2 3 4 88//删除指定位置的数据SLDelete(&s1, 2);SLPrint(s1);//查找指定数据int F=SLFind(&s1, 3);if (F >= 0){printf("找到了,位置是%d\n",F);}else{printf("没找到\n");}销毁SLDestory(&s1);
}
int main()
{SLtest1();SLtest2();return 0;
}

        顺序表的内容并没有结束,但是受限于篇幅原因我只能先到这里了,感谢各位读者朋友的阅读,求一个赞,谢谢。

相关文章:

数据结构学习之顺序表

在C语言学习到一定阶段之后&#xff0c;接下来我们就进入到了数据结构的部分内容。 目录 数据结构与线性表 顺序表 顺序表分类&#xff1a; 接下来我们要写一段代码实现动态顺序表。 首先我们需要准备三个文件&#xff1a; 1.接下来我们要定义一个数据表 2.当创建号我们的…...

AWS CloudFront全球加速利器:解析出海业务的核心优势与最佳实践

对于寻求全球化发展的企业而言&#xff0c;AWS CloudFront凭借其强大的全球基础设施和边缘计算能力&#xff0c;成为加速出海业务的关键工具。本文将深入剖析CloudFront的核心优势&#xff0c;并探讨其如何助力企业突破跨境业务瓶颈&#xff0c;同时符合SEO优化策略&#xff0c…...

Flowable7.x学习笔记(十六)分页查询我的待办

前言 我的待办具体区分为3种情况&#xff0c;第一个就是办理人指定就是我&#xff0c;我可以直接审批&#xff1b;第二种就是我是候选人&#xff0c;我需要先拾取任务然后再办理&#xff1b;第三种是我是候选组&#xff0c;我需要切换到指定的角色去拾取任务再办理。如果任务已…...

Annotate better with CVAT

WIN10 配置标注环境 WSL + Docker Desktop 安装手册 https://docs.cvat.ai/docs/administration/basics/installation/ hebing@hello:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE cvat/ui …...

QML Image 组件详解

目录 引言相关阅读QML Image元素基础知识 项目结构示例解析1. 本地资源图像加载2. 网络图像加载3. 图像填充模式 应用主结构 总结下载链接 引言 本文将介绍QML中Image元素的基本用法和关键特性&#xff0c;包括加载本地资源图像、处理网络图像、以及调整图像的填充模式。通过一…...

BOFZ 緩衝區溢出shell脚本檢測工具

地址:https://github.com/MartinxMax/bofz BOFZ BOFZ 是一款簡單的緩衝區溢出掃描器&#xff0c;旨在檢測指定可執行文件中的緩衝區溢出漏洞。 此工具可用於快速測試應用程序或二進制文件中是否存在常見的安全缺陷&#xff0c;特別是那些由於對用戶輸入處理時邊界檢查不當而引…...

【Dify系列教程重置精品版】第五章:Dify配置Ollama

上一章我们在Dify上尝试配置了“月之暗面”。这一章我们在Dify上配置另一个模型“Ollama”。 什么是ollama呢?简单来说:它允许用户在个人计算机或服务器上快速部署和管理多种开源大语言模型,如 Llama3、Phi3、Gemma2 等,而无需依赖昂贵的云服务或专业的技术背景。 反正就是…...

RISC-V AIA SPEC学习(四)

第五章 Interrupts for Machine andSupervisor Levels 核心内容​​ 1.主要中断类型与默认优先级:​​ 定义了机器级别(M-level)和监管者级别(S-level)的标准中断类型(如MEI、SEI、MTI等)。默认优先级规则:本地中断(如软件/定时器)优先级高于外部中断,RAS事件(如低/高…...

Leetcode刷题报告2——双指针法

文章目录 前言[15. 三数之和](https://leetcode.cn/problems/3sum/)题干题解知识点总结 [42. 接雨水](https://leetcode.cn/problems/trapping-rain-water/)题干题解 前言 这部分总共是4道题&#xff0c;我就挑两道比较典型的题写一下博客吧。 双指针法的核心思路是通过合理的…...

线段树原理和代码详解

目录 线段树维护的信息类型 线段树的结构 线段树的初始化 线段树的功能&#xff1a; 单点修改&#xff0c;区间查询 区间修改&#xff0c;区间查询 以下内容均为个人见解&#xff0c;如有不足还请指出&#xff0c;作者会及时修改&#xff01; 期待大家的点赞、收藏、评论&…...

xray-poc编写示例

禁止未授权扫描和测试行为&#xff01;&#xff01;&#xff01; 1. SQL 时间盲注检测 (Time-Based Blind SQLi) name: generic/time-based-sqli rules:- method: GETpath: "/product?id1 AND (SELECT 1 FROM (SELECT SLEEP(5))a)--"expression: |response.status…...

[2-01-01].前端开发工具

前端学习大纲 一、VsCode: 1.1、下载地址 https://code.visualstudio.com/ 1.2.插件安装 为方便后续开发&#xff0c;建议安装如下插件 1.3.创建项目 先创建一个空的文件夹&#xff0c;如project_xxxx。然后打开vscode&#xff0c;再在vscode里面选择 File -> Open Fol…...

自动化实现web端Google SignUp——selenium

案例&#xff1a;自动化获取Google注册页面——selenium 前言 提示&#xff1a;通过案例掌握selenium语法 涉及技术&#xff1a;Python Selenium 在本文中&#xff0c;我们将通过一个实际案例来学习如何使用Selenium自动化工具模拟Google账号注册流程。这个案例涵盖了Selen…...

如何阅读GitHub上的深度学习项目

一、前期准备&#xff1a;构建知识基础 1. 必备工具与环境 开发工具&#xff1a; IDE&#xff1a;VS Code&#xff08;推荐&#xff0c;轻量化插件丰富&#xff0c;如 Python、PyTorch 插件&#xff09;、PyCharm&#xff08;适合大型项目&#xff09;。版本控制&#xff1a;…...

【LeetCode 热题 100】3.无重复字符的最长子串:详解滑动窗口解法

&#x1f4cc; 原题链接&#xff1a;Longest Substring Without Repeating Characters &#x1f4d6; 一、题目描述 给定一个字符串 s&#xff0c;请你找出其中不含有重复字符的最长子串的长度。 示例&#xff1a; 输入: s "abcabcbb" 输出: 3 解释: 最长不重复子…...

Android12 Rom定制设置默认语言为中文

Android12 Rom定制设置默认语言为中文 1.前言&#xff1a; 最近在做客制化定制时需要默认语言为中文&#xff0c;而且可以切换输入法&#xff0c;之前讲解过在ROM中如何设置默认输入法&#xff0c;这里就不展开了&#xff0c;其实这个需求很简单&#xff0c;就是调试的时候发现…...

【设计模式】GoF设计模式之备忘录模式(Memento Pattern)

设计模式之备忘录模式 Memento Pattern V1.0核心概念角色代码示例程序运行结果代码讲解 适用场景 V1.0 核心概念 备忘录模式的核心是定义一个备忘录类&#xff08;Memento&#xff09;&#xff0c;这个类的实例能够表示发起人类&#xff08;Originator&#xff09;的一种状态…...

springboot分层打包,减少重复构建和传输的开销

在 Spring Boot 中&#xff0c;分层打包&#xff08;Layered Packaging&#xff09; 是一种优化策略&#xff0c;特别针对 容器化部署&#xff08;如 Docker&#xff09; 的场景设计。它的核心思想是将应用的不同部分&#xff08;依赖、资源、代码等&#xff09;划分为独立的层…...

Linux——虚拟地址空间

1.虚拟地址空间 进程地址空间又叫虚拟地址空间 我们大家知道程序在运行时使用的空间被划分为多个不同的区域&#xff0c;每个区域都有不同的作用 正文代码&#xff1a;存放程序的可执行代码 通常都是只读的初始化数据&#xff1a;未初始化数据堆区&#xff1a;用于动态分配内存…...

GPU虚拟化实现(七)

GPU虚拟化实现(七) 章节回顾进程管理资源限制和环境变量利用率监控线程信号处理退出处理代码具体运作流程怎么限制SM的总结章节回顾 在上一章,分析了项目的主要代码模块功能:共享内存和初始化、GPU 内存管理、GPU 利用率管理以及锁机制,在这一章将继续分析其他的代码模块…...

【QNX+Android虚拟化方案】137 - msm-5.4 Kernel U盘 插入中断、枚举、匹配完整流程详解

【QNX+Android虚拟化方案】137 - msm-5.4 Kernel U盘 插入中断、枚举、匹配完整流程详解 1. HUB提交中断URB给HCD控制器,URB完成回调函数为 hub_irq()2. U盘插入后,触发运行 hub_irq() 中断回调函数2.1 高通 DWC3 Host HCD 初始化流程2.2 urb->complete(urb) 中断回调流程…...

分布式锁的几种实现

前几天看一个面试视频&#xff0c;提到了分布式锁一直想写写&#xff0c;但奈何考试太多&#xff0c;直到今天才有时间。好啦&#xff0c;开始今天的文章吧。 一.定义 分布式锁&#xff1a;当多个进程不在同一个系统中(比如分布式系统中控制共享资源访问)&#xff0c;用分布式…...

Android 解绑服务问题:java.lang.IllegalArgumentException: Service not registered

问题与处理策略 问题描述 在 Android 项目中&#xff0c;解绑&#xff08;unbindService()&#xff09;一个服务&#xff08;Service&#xff09;时&#xff0c;报如下错误 java.lang.IllegalArgumentException: Service not registered问题原因 错误表明在解绑服务时&…...

注册登录页面项目

关系型数据库地址&#xff1a;C:\Users\ASUS\AppData\Local\Temp\HuaweiDevEcoStudioDatabases\rdb #注册页面register.ets import dataRdb from ohos.data.rdbconst STORE_CONFIG {name: weather4.db } const TABLE_NAME weather_info const SQL_CREATE_TABLE CREATE TAB…...

从 Python 基础到 Django 实战 —— 数据类型驱动的 Web 开发之旅

主题简介&#xff1a; 本主题以 Python 基础数据类型为核心&#xff0c;结合 Django 框架的开发流程&#xff0c;系统讲解如何通过掌握数字、字符串、列表、元组、字典等基础类型&#xff0c;快速构建功能完善的 Web 应用。通过理论与实践结合&#xff0c;帮助学员从零基础 Py…...

数字智慧方案5971丨智慧农业大数据平台解决方案(59页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读&#xff1a;智慧农业大数据平台解决方案 在现代农业发展进程中&#xff0c;智慧农业大数据平台解决方案正成为推动农业变革的关键力量。这一方案从项目简介到大数据展示&#xff0c;各个环节紧密相连&#xff0c;致力于为农业发展…...

MOOS-ivp使用(一)——水下机器人系统的入门与使用

MOOS-ivp使用&#xff08;一&#xff09;——水下机器人系统的入门与使用 MOOS-ivp&#xff08;Marine Operational Oceanographic System for Intelligent Vehicle Planning&#xff09;是专为水下机器人&#xff08;如AUV&#xff09;设计的开源框架。类似于ROS&#xff0c;…...

【网络服务器】——回声服务器(echo)

作用 实现回声服务器的客户端/服务器程序&#xff0c;客户端通过网络连接到服务器&#xff0c;并发送任意一串英文信息&#xff0c;服务器端接收信息后&#xff0c;执行数据处理函数&#xff1a;将每个字符转换为大写并回送给客户端显示。 客户端&#xff1a;发送字符信息 服…...

IDEA在项目中添加模块出现Error adding module to project: null(向项目添加模块时出错: null)的解决方法

解决方法 &#xff08;1&#xff09;打开当前项目的结构...

(34)VTK C++开发示例 ---将图片映射到平面

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;VTK开发 &#x1f448; 1. 概述 演示如何将图片作为纹理贴图到一个平面上。 这段代码的功能是使用 VTK&#xff08;Visualization Toolkit&#xff0…...

微软与Meta大幅增加人工智能基础设施投入

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

华为云服务器VoceChat在线聊天室部署

目录 1. 项目介绍2. 准备条件3. Docker环境部署3.1 安装Docker&#xff08;CentOS 7&#xff09;3.2 安装Docker Compose3.3 Docker常用命令 4. 创建配置文件4.1 创建工作目录4.2 创建docker-compose.yml文件4.3 保存配置文件 5. 部署运行5.1 启动服务5.2 检查服务状态5.3 防火…...

ERP系统(技术面)知识积累

本文为本人在准备某公司信息技术类岗位的面试时所作的笔记&#xff0c;该公司有技术面&#xff0c;此岗位入职后负责的是ERP系统的运行和维护&#xff0c;所以可能会问ERP系统相关的问题。故我写此文以做准备。 ERP简介 ERP&#xff0c;全称Enterprise Resource Planning&…...

Python学习笔记(第三部分)

接续 Python.md 文件的第三部分 类 类的创建的基本使用 创建一个类 class Dog(): 文档字符串&#xff1a;这是一次模拟小狗的简单尝试 def __init__(self,name,age):self.name nameself.age agedef sit(self):print(self.name.title() " is now sitting.")def ro…...

【浅尝Java】Java简介第一个Java程序(含JDK、JRE与JVM关系、javcdoc的使用)

&#x1f35e;自我激励&#xff1a;每天努力一点点&#xff0c;技术变化看得见 文章目录 Java语言概述Java是什么Java语言的重要性Java语言发展简史Java语言特性 第一个Java程序main方法示例运行Java程序JDK、JRE、JVM之间的关系注释基本规则注释规范 标识符关键字 Java语言概述…...

【FreeRTOS-列表和列表项】

参照正点原子以及以下gitee笔记整理本博客&#xff0c;并将实验结果附在文末。 https://gitee.com/xrbin/FreeRTOS_learning/tree/master 一、列表和列表项的简介(熟悉) 1、什么是列表 答&#xff1a;列表是FreeRTOS中的一个数据结构&#xff0c;概念上和链表有点类似&#…...

22.2Linux的I2C驱动实验(编程)_csdn

我尽量讲的更详细&#xff0c;为了关注我的粉丝&#xff01;&#xff01;&#xff01; 这里我们用到的是stm32mp157的板子&#xff0c;所以我们看一下I2C用到的引脚。 1、硬件原理图分析 可以看到在这块板子上面用的SDA和SCL总线是PA11,PA12。所以要修改设备树和镜像文件&…...

socket-IO复用技术

五个I/O模型 1、阻塞I/O 2、非阻塞I/O 3、I/O复用&#xff08;select和poll&#xff09; 4、信号驱动I/O 5、异步I/O I/O复用 是一种在单线程或单进程环境下&#xff0c;同时监听多个 I/O 事件的技术。它允许程序高效地处理多个输入输出流&#xff08;如网络套接字、文件描…...

上位机知识篇---二进制操作

文章目录 前言接收数据示例:0xAA 0x12 0x34 0x55合并高/低字节数据RGB565颜色值:0xF800(红色)Python中负数右移接收帧:01 03 02 12 34 CRC前言 本文简单对单片机、上位机中的映射(Mapping)和位移操作符(Bit Shifting)等相关知识进行了简单介绍. 一、单片机与上位机中…...

openEuler 22.03 安装 Mysql 5.7,TAR离线安装

目录 一、检查系统是否安装其他版本Mariadb数据库二、环境检查2.1 必要环境检查2.2 在线安装&#xff08;有网络&#xff09;2.3 离线安装&#xff08;无网络&#xff09; 二、下载Mysql2.1 在线下载2.2 离线下载 三、安装Mysql四、配置Mysql五、开放防火墙端口六、数据备份七、…...

《排序算法总结》

引言&#xff1a; 编程学到现在&#xff0c;我们已经接触了很多种排序算法&#xff0c;这篇文章我就对常见的几种排序算法进行一个小结。 一&#xff1a; 排序算法分类&#xff1a; 二&#xff1a; 插入排序&#xff1a; 直接插入排序&#xff1a; 1. 概念&#xff1a; 直…...

【Java学习笔记】递归

递归&#xff08;recursion&#xff09; 思想&#xff1a;把一个复杂的问题拆分成一个简单问题和子问题&#xff0c;子问题又是更小规模的复杂问题&#xff0c;循环往复 本质&#xff1a;栈的使用 递归的注意事项 &#xff08;1&#xff09;需要有递归出口&#xff0c;否者就…...

体系学习1:C语言与指针1——预定义、进制打印、传参为数组

1、不对一段代码进行编译 #if 0 statement #endif2、输出地址 int d[3]{1,2,3}; printf("%p",(void*)d);//p期待的是void*类型的数据3、不同进制的打印 int data 1200; char hed[9];//为\0预留位置&#xff01;&#xff01;&#xff01; sprintf(hed,"%08X&…...

使用Java正则表达式进行分组与匹配文本提取

在Java开发中&#xff0c;正则表达式&#xff08;Regex&#xff09;是处理字符串的强大工具&#xff0c;广泛应用于数据验证、文本解析和格式转换等场景。通过正则表达式的分组功能&#xff0c;开发者可以精确地提取匹配模式的子部分&#xff0c;而不仅仅是整个匹配内容。Java的…...

RAGFlow上传3M是excel表格到知识库,提示上传的文件总大小过大

环境&#xff1a; Ragflowv0.17.2 问题描述&#xff1a; RAGFlow上传3M是excel表格到知识库&#xff0c;提示上传的文件总大小过大 解决方案&#xff1a; 定位问题&#xff1a; 1.查询Nginx 日志 Nginx 日志 检查 Nginx 配置中日志路径是否正确&#xff0c;确保日志文件有…...

2025年4月文章一览

2025年4月编程人总共更新了30篇文章&#xff1a; 1.2025年3月文章一览 2.《Operating System Concepts》阅读笔记&#xff1a;p528-p544 3.《Operating System Concepts》阅读笔记&#xff1a;p545-p551 4.《Operating System Concepts》阅读笔记&#xff1a;p552-p579 5.…...

2025大模型微调视频课程全套(附下载)

2025大模型微调视频课程全套&#xff0c;共10课。主要内容如下&#xff1a; 1、大模型的发展 2、Transformer & LLMs 3、大模型微调预览&Lora微调&Alpaca模型微调 4、Alpaca&AdaLoRA&QLoRA模型微调 5、Efficient Fine-tuning&Efficient Inference&…...

【Python Web开发】04-Cookie和Session

文章目录 1. Cookie1.1 定义1.2 工作原理1.3 用途1.4 优缺点 2. Session2.1 定义2.2 工作原理2.3 用途2.4 优缺点 3. Cookie 与 Session 的关系4. 安全性考量5. Python 中使用 Cookie 和 Session 在 HTTP 协议里&#xff0c;Cookie 和 Session 是用于管理客户端与服务器之间会话…...

从股指到期指,哪些因素影响基差?

当我们谈论股指期货&#xff08;简称“期指”&#xff09;与股票现货指数&#xff08;简称“股指”&#xff09;的基差时&#xff0c;其实是在探讨期货价格与现货价格之间的“差价”。这个差价受多种因素影响&#xff0c;时而扩大&#xff0c;时而缩小&#xff0c;甚至可能“翻…...

n8n 中文系列教程_15. 【工具篇】n8n中文版与汉化指南:从原理到实践

n8n 作为一款强大的开源自动化工具&#xff0c;目前尚未推出官方中文版&#xff0c;但社区提供了汉化方案。不过&#xff0c;对于技术用户&#xff0c;我们更推荐使用英文原版&#xff0c;以便更好地查阅文档和解决问题。如果你仍希望尝试汉化&#xff0c;本文将详细介绍如何通…...