数据结构——顺序表
顺序表的简单介绍
顺序表的概念:顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。
特点:顺序表的特点是可以通过元素的索引快速访问数据,其访问时间复杂度为O(1)。
分类:它分为静态顺序表和动态顺序表
静态顺序表:使用定长数组存储元素。
劣势:它若是开少了不够用,开多又浪费,是不是很不方便。
因此,这里主要引用了动态的顺序表。(其实这个跟之前写过的通讯录非常像,同时那里静态的通讯录也写过了,这里就不过多介绍了)
至此,正文开始:
我们先去创建三个文件:分别为SeqList.c,SeqList.h,test.c 这里的取名方式都是按照它的英文缩写形式,也是为了好区分,未来回顾时更好看懂。
一:首先我们在头文件边写上一个结构体(为了可以多个文件都可以使用)
这是静态形式的:
//typedef int SLDataType; 这里为啥要自定义呢?也是为了后面更加方便的看出来这个结构类型到了后面就能充分体会到这句话了
//#define N 100000
//struct SeqList
//{
// SLDataType a[N];
// int size;
//};
动态形式的:
typedef int SLDataType;
#define INIT_CAPACITY 4// 动态顺序表 -- 按需申请
typedef struct SeqList
{SLDataType* a;int size; // 有效数据个数int capacity; // 空间容量
}SL;
其实眨眼一看,这跟通讯录无不一样,对吧。
二:初始化
我们已经创建了结构体变量了,对此我们是不是得先把它初始化?
void SLInit(SL* ps)
{assert(ps);ps->a = (SLDataType*)malloc(sizeof(SLDataType)* INIT_CAPACITY);这里就使用到了上面说的自定义,是不是可以更加清晰的看懂它扩容的对象?if (ps->a == NULL){perror("malloc fail");return;}ps->size = 0;ps->capacity = INIT_CAPACITY;
}
注意的是:我们一般扩容时,扩它原来的两倍或四倍。
这里可能有人会问:为什么不用柔性数组?
答案:柔性数组是让这个数组的其他成员跟这个数组在同一块空间上面,不符合顺序表
三:销毁的函数
上面扩容了,使用完后是不是得释放,所以创建销毁的函数。
void SLDestroy(SL* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = ps->size = 0;
}
四:打印
我们先写完基本的需求。我们得打印出来,验证正确性。
void SLPrint(SL* ps)
{assert(ps);for (int i = 0; i < ps->size; ++i){printf("%d ", ps->a[i]);}printf("\n");
}
由于后面都用到检查,增加容量部分,我们先统一把它弄成一个函数
void SLCheckCapacity(SL* ps)
{assert(ps);
这里以每次增加2个空间容量if (ps->size == ps->capacity){SLDataType* tmp = (SLDataType*)realloc(ps->a, sizeof(SLDataType) * ps->capacity * 2);if (tmp == NULL){perror("realloc fail");return;}ps->a = tmp;ps->capacity *= 2;}
}
五:尾插
void SLPushBack(SL* ps, SLDataType x)
{assert(ps);//检查是否满了if (ps->size == ps->capacity){SLDataType* tmp = (SLDataType*)realloc(ps->a, sizeof(SLDataType) * ps->capacity * 2);if (tmp == NULL){perror("realloc fail");return;}ps->a = tmp;ps->capacity *= 2;} ps->a[ps->size] = x;ps->size++;当然也可以写成这样,都是一样的//ps->a[ps->size++] = x;}
现在我们来分析它:
假如就是上面那个要尾插。
有效数据个数int size
首先我们知道6这个位置的下标 是不是size-1;那下一个是不是下标是size。想要尾插,我们已经开辟了一个空间了。所以直接去寻找它的下标,就可以了。
即:ps->a[ps->size] = x;
ps->size++;
六:尾删
void SLPopBack(SL* ps)
{assert(ps);// 暴力检查//assert(ps->size > 0);// 温柔的检查//if (ps->size == 0)//return;ps->a[ps->size - 1] = 0;ps->size--;}
这里有两种检查空指针的方法:暴力,温柔都可以
这里的尾删的原理也是很简单:
就是把最后的下标size-1的数赋值成0,然后再减1,即把原来倒数第二的位置,变成新的倒数第一位置,就完成了尾删的过程了。
七:头插
void SLPushFront(SL* ps, SLDataType x)
{assert(ps);SLCheckCapacity(ps);int end = ps->size - 1;while (end >= 0){ps->a[end + 1] = ps->a[end];--end;}ps->a[0] = x;ps->size++;
原理:就是开辟后,把整体的挪右边。
八:头删
void SLPopFront(SL* ps)
{assert(ps);assert(ps->size > 0);int begin = 1;while (begin < ps->size){ps->a[begin - 1] = ps->a[begin];++begin;}ps->size--;}
原理:差不多是覆盖法,就是将原本下标为1的数赋值给下标为0的数,然后下标2的数赋值给下标1,依次赋值,最终就完成了覆盖。
九:其中位置插入
void SLInsert(SL* ps, int pos, SLDataType x)
{assert(ps);assert(pos >= 0 && pos <= ps->size);SLCheckCapacity(ps);int end = ps->size - 1;while (end >= pos){ps->a[end + 1] = ps->a[end];--end;}ps->a[pos] = x;ps->size++;
}
原理:找到你要插入的数字前一个位置后,将其后面的数字整体后移。依次移
十:指定某一位置删
void SLErase(SL* ps, int pos)
{assert(ps);assert(pos >= 0 && pos < ps->size);int begin = pos + 1;while (begin < ps->size){ps->a[begin - 1] = ps->a[begin];++begin;}ps->size--;
}
原理:如图,将begin后面的数,整体向左移一位,来覆盖住begin这个数,来达到删除目的
十一:查找部分
int SLFind(SL* ps, SLDataType x)
{assert(ps);for(int i = 0; i < ps->size; ++i){if (ps->a[i] == x) 如果等于你要查找的数字{return i;}}return -1;
}
十二. 疑问和易错
至此,就完成了顺序表的代码了。下面给出写顺序表是容易出现的疑问和错误:
1.有人可能会问,为什么扩容,使用完后不用是否释放空间呢?
现在我们来分析分析:
扩容:原地扩容,异地扩容
释放空间,是把使用权给操作系统
因此,尽量只扩不缩
好处:避免当你要使用时,被别的变量占用,那么我只能异地扩容了
只有当你确定不用时才释放
相当于,你家有个车位,当你家车开走,不使用车位时,你会把你家车位给别人使用吗?那你家车回来时放哪呢?厕所也一样,当你不使用时,你会把你家厕所会释放成公共厕所吗?为什么,应该你也想得明白吧。
2.
free发生错误时,有两中原因:
1.一个指针是个野指针。或者说,申请了一个空间,你从中间为啥开始释放,而不是说从返回起始位置开始释放
怎么判断:
我们通过它的指针,我们改变了它指向的内容2.数组指向的空间上面可能有越界。
3.错误
无法解析的外部符号
就是有声明,无定义
4.pf->指向的内容
pf.a 指向它的地址
5.
形参是实参的拷贝,形参的改变,不影响实参
改的是地址的变量,所以实参那里也会变
6.
![]()
十三.好了,最后给上完整代码:
Seqlist.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "Seqlist.h"void SLInit(SL* ps)
{assert(ps);ps->a=(SqDataType*)malloc(sizeof(SqDataType )* Iint_Capacity);if (ps->a == NULL){perror("malloc fail");return ;}ps->sz= 0;ps->capacity = Iint_Capacity;
}//ͷ
void SLDestory(SL* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = ps->sz = 0;
}//ӡ
void SLPrint(SL* ps)
{assert(ps);for (int i = 0; i < ps->sz; i++){printf("%d ", ps->a[i]);}printf("\n");
}
//Ƿ
void Check_Capacity(SL*ps)
{if (ps->sz == ps->capacity){SqDataType* temp = (SqDataType*)realloc(ps->a, sizeof(SqDataType) * ps->capacity * 2);if (NULL == temp){perror("realloc");return;}ps->a = temp;ps->capacity *= 2;}
}
//β~~
void SLPushBack(SL* ps,SqDataType x)
{assert(ps);//ǷCheck_Capacity(ps);ps->a[ps->sz] = x;ps->sz++;
}
//ͷ
void SLPushFront(SL* ps, SqDataType x)
{assert(ps);Check_Capacity(ps);int end = ps->sz - 1;while (end >= 0){ps->a[end + 1] = ps->a[end];end--;}ps->a[0] = x;ps->sz++;
}//βɾ
void SLPopback(SL* ps)
{assert(ps);ps->a[ps->sz - 1] = 0;ps->sz--;
}//ͷɾ
void SLPopFront(SL*ps)
{assert(ps);int frist = 1;while (frist < ps->sz){ps->a[frist-1] = ps->a[frist];frist++;}ps->sz--;
}//ڲ
void Insert(SL* ps, SqDataType pos, SqDataType x)
{assert(ps);Check_Capacity(ps);int end = ps->sz-1;while (end >= pos){ps->a[end+1] = ps->a[end];end--;}ps->a[pos] = x;ps->sz++;
}//ɾ
void SLErase(SL* ps, SqDataType Pos)
{assert(ps);int begin = Pos + 1;while (begin < ps->sz){ps->a[begin-1] = ps->a[begin];begin++;}ps->sz--;}//
int SLFind(SL* ps,SqDataType x)
{assert(ps);for (int i = 0; i < ps->sz; i++){if (ps->a[i] == x){return i;}}}
Seqlist.h
#pragma once
#include<assert.h>
#include<stdlib.h>
#include<stdio.h>
//typedef int SqDataType;
//#define x 100
̬˳
//struct SeqList
//{
// SqDataType a[x];
// int sz;
//};//̬˳
typedef int SqDataType;
#define Iint_Capacity 2typedef struct SqList
{SqDataType* a;int sz;int capacity;
}SL;void SLInit(SL * ps);
void SLDestory(SL* ps);
void SLPrint(SL* ps);
void SLPushBack(SL* ps, SqDataType x);
void SLPushFront(SL* s, SqDataType x);
void SLPopback(SL* s);
void SLPopFront(SL* ps);
void Insert(SL* ps, SqDataType pos, SqDataType x);
void SLErase(SL* s, SqDataType Pos);
int SLFind(SL* s, SqDataType x);
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"Seqlist.h"
Test1()
{SL s;SLInit(&s);SLPushBack(&s, 1);SLPrint(&s);SLPushBack(&s, 2);SLPrint(&s);SLPushBack(&s, 4);SLPrint(&s);SLPushBack(&s, 5);SLPrint(&s);//SLPopFront(&s);//SLPrint(&s);Insert(&s, 1, 6);SLPrint(&s);SLErase(&s, 2);SLPrint(&s);int ret=SLFind(&s, 5);printf("%d", ret);}
int main()
{Test1();return 0;
}
今次鸡汤(最重要!!!!):
每个黎明之前都必须经历一个漫长而令人窒息的夜晚;
在任何辉煌到来之前,一定有太多不愉快的时刻和被人瞧不起的日子;
每一次掌声之前,一定有太多的哀叹,有太多冷漠的目光;每座山的山顶上总有贝壳;
所以每次你要放弃的时候,别忘了对自己说:来吧,坚持住,少年们!
相关文章:
数据结构——顺序表
顺序表的简单介绍 顺序表的概念:顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 特点:顺序表的特点是可以通过元素的索引快速访问数据,其访问时间复杂度…...
C语言中互斥锁、信号量和条件变量的所有相关函数、参数、返回值和说明
1. 互斥锁(Mutex)的使用 互斥锁用于保护共享数据,防止多个线程同时修改它。 #include <pthread.h> #include <stdio.h> #include <stdlib.h> // 定义一个全局共享变量 int shared_counter 0; // 定义一个互斥锁 pthrea…...
(前序 简单)leetcode 226翻转二叉树
代码随想录说用前序遍历和后序遍历方便,而中序遍历比较绕。 活用自定义函数使程序结构更为清晰 这里用的是前序遍历,根结点root指向left和root,交换root的左右指向 执行过程: 也就是交换下例的 2 ,7 使得交换后&…...
搭建springmvc项目
什么是springmvc MVC它是一种设计理念。把程序按照指定的结构来划分: Model模型 View视图 Controller控制层 springmvc框架是spring框架的一个分支。它是按照mvc架构思想设计的一款框架。 springmvc的主要作用: 接收浏览器的请求数据,对数据进行处理,…...
解惑(一) ----- super(XXX, self).__init__()到底是代表什么含义
转载:self参数 - __ init__ ()方法 super(Net, self).__init__()是什么_super(net, self).init()-CSDN博客 相信大家在很多场合特别是写神经网络的代码的时候都看到过下面的这种代码: import torch import torch.nn as nn import torch.nn.functional …...
23种设计模式之责任链模式
目录 1. 简介2. 代码2.1 AbstractLogger(抽象处理者)2.2 InfoLogger (具体处理者)2.3 DebugLogger (具体处理者)2.4 ErrorLogger (具体处理者)2.5 Test (测试)…...
电感2222
1 电感 1电感是什么 2 电感的电流不能突变:电容是两端电压不能突变 3 电感只是限制电流变化速度...
车牌识别OCR授权:助力国产化升级,全面提升道路监控效率
政策背景:国产化升级,推动道路监控产业转型 随着国家对信息安全的重视,国内各大公安、政企机构已进入全面升级国产化平台的实施阶段。根据最新的政策要求,公安和政府部门必须在未来三年内完成平台的国产化替换工作。这一举措不仅…...
【人工智能-中级】卷积神经网络(CNN)的中阶应用:从图像分类到目标检测
文章目录 卷积神经网络(CNN)的中阶应用:从图像分类到目标检测1. 图像分类:CNN的基础应用CNN结构概述经典网络架构2. 目标检测:从分类到定位基于区域的目标检测方法单阶段目标检测方法边界框回归与NMS(Non-Maximum Suppression)3. 深度学习中的目标检测挑战与解决方案4. …...
从资产流动分析WIF市场潜力X.game深究其他未知因素
近日,两则关于WIF最新消息引起了投资者们的注意。据报道,11月28日Vintermute在过去13小时内累计从Binance交易所提取了价值533万美元的WIF,此举不仅彰显了其强大的资金实力,更在某种程度上推动了WIF币价的反弹;另一方面…...
【工具变量】上市公司企业经营困境指数数据(Zscore、Oscore、RLPM、Merton DD)2000-2021年
一、资料范围:包括Zscore、Oscore、RLPM、Merton DD,经营困境说明如下:(1)Zscore:以2.67和1.81作为临界值计算样本得分所处的范围。Zscore>2.67 为财务状况良好,发生破产的可能性较小。Zscor…...
freeswitch(监听、旁听)
亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch使用场景: 比如A和B在通话,C想监听他们通话内容,其他设备是不知道有人在监听的使用方法: 进入dialplan/default.xml 在配置表添加 <…...
php基础:命名空间
1.PHP 命名空间可以解决以下两类问题: 1.用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。 2.为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,以提高源代码的可读…...
SAP FICO物料分类账实操
物料分类账所涉及到的差异从采购入库的时候就可能已经产生,接下来从创建物料主数据开始对可能产生差异地方进行分析。其中有些操作步骤在标准价格估算这一篇博文中已经有过演示,可以先做了解。 其中的某些创建在有直接可用的情况下是非必须的࿰…...
【信息系统项目管理师】高分论文:论信息系统项目的整合管理(移动警务通系统)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 正文1、制定项目章程2、制定项目管理计划3、指导与管理项目工作4、管理项目知识5、监控项目工作6、实施整体变更控制7、结束项目或阶段正文 2022年2月,我有幸作为项目经理参加了“某市公安移动警务通系统”项…...
学习笔记069——Java集合框架
文章目录 集合1、List 接口2、Set 接口3、Map3.1、Map 常用实现类 集合 需要创建多个对象,但是数量和类型不确定。 集合是 Java 提供的一种类型,功能和数组类似,但是长度和数据类型都是动态。 集合框架(包括很多类和接口&#…...
JIS-CTF: VulnUpload靶场渗透
JIS-CTF: VulnUpload来自 <https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 靶机IP地址192.168.23.162,攻击机IP地址192.168.23.140…...
2024年食堂采购系统源码技术趋势:如何开发智能的供应链管理APP
本篇文章,小编将与大家一同探讨2024年食堂采购系统的技术趋势,并提供开发更智能的供应链管理APP的策略。 一、2024年食堂采购系统的技术趋势 1.人工智能与机器学习的深度应用 在2024年,AI和机器学习在食堂采购系统中的应用将更加普遍。这些…...
Flink CDC实时同步mysql数据
官方参考资料: https://nightlies.apache.org/flink/flink-cdc-docs-master/zh/docs/connectors/flink-sources/mysql-cdc/ Apache Flink 的 Change Data Capture (CDC) 是一种用于捕获数据库变化(如插入、更新和删除操作)的技术。Flink CDC…...
解决MAC装win系统投屏失败问题(AMD显卡)
一、问题描述 电脑接上HDMI线后,电脑上能显示有外部显示器接入,但是外接显示器无投屏画面 二、已测试的方法 1 更改电脑分辨,结果无效 2 删除BootCamp,结果无效 3更新电脑系统,结果无效 4 在设备管理器中&#…...
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由…...
【NumPy进阶】:内存视图、性能优化与高级线性代数
目录 1. 深入理解 NumPy 的内存视图与拷贝1.1 内存视图(View)1.1.1 创建视图1.1.2 视图的特点 1.2 数组拷贝(Copy)1.2.1 创建拷贝1.2.2 拷贝的特点 1.3 视图与拷贝的选择 2. NumPy 的优化与性能提升技巧2.1 向量化操作示例&#x…...
[C++]多态
1. 什么是多态性? 1.定义 多态性是指同一个函数或操作在不同对象上表现出不同的行为。 2.分类 C 中的多态性主要分为两种: 1.编译时多态性(静态多态性): 编译时决定调用哪个函数。通过 函数重载 和 运算符重载 实…...
文本编辑器与正则表达式
1. VIM 编辑器 1.1 VIM 基本概念 VIM 是一个高度可定制的文本编辑器,广泛用于程序员的日常开发中。与传统的文本编辑器不同,VIM 基于模式操作,具有以下几个主要特点: 普通模式:用于浏览和修改文本。插入模式&#x…...
鲲鹏麒麟安装Kafka-v1.1.1
因项目需要在鲲鹏麒麟服务器上安装Kafka v1.1.1,因此这里将安装配置过程记录下来。 环境说明 # 查看系统相关详细信息 [roottest kafka_2.12-1.1.1]# uname -a Linux test.novalocal 4.19.148 #1 SMP Mon Oct 5 22:04:46 EDT 2020 aarch64 aarch64 aarch64 GNU/Li…...
scala基础_数据类型概览
Scala 数据类型 下表列出了 Scala 支持的数据类型: 类型类别数据类型描述Scala标准库中的实际类基本类型Byte8位有符号整数,数值范围为 -128 到 127scala.Byte基本类型Short16位有符号整数,数值范围为 -32768 到 32767scala.Short基本类型I…...
【重生之我要苦学C语言】文件操作
文件操作 为什么使用文件 如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保…...
Python中PyTorch详解
文章目录 Python中PyTorch详解一、引言二、PyTorch核心概念1、张量(Tensor)1.1、创建张量1.2、张量操作 2、自动求导(Autograd)2.1、自动求导示例 三、构建神经网络1、使用nn模块2、优化器(Optimizer) 四、…...
Codigger SIDE之Helix编辑器
在Codigger的多维世界中,Helix编辑器以其卓越的性能和灵活性,成为开发者手中的利剑。基于Rust构建,Helix不仅继承了Vim编辑器的经典特性,更以其现代化的功能,重新定义了代码编辑的边界。 模式切换的艺术 Helix的模式切…...
vue3+echarts+websocket分时图与K线图实时推送
一、父组件代码: <template> <div class"chart-box" v-loading"loading"> <!-- tab导航栏 --> <div class"tab-box"> <div class"tab-list"> <div v-for"(item, index) in tabList…...
Maven常用插件清单
Maven 是一个强大的项目管理和构建工具,它使用插件来执行各种构建生命周期任务。以下是常用的一些 Maven 构建插件及其主要用途: 1. Maven Compiler Plugin 用途:编译Java源代码。配置示例:<build><plugins><plu…...
敏捷项目管理
虽然一直在践行敏捷开发,包括站会、尝试使用Confluence做知识wiki、每周分享等等,当然项目日常使用的coding、禅道、jira 项目管理和 jenkins 、git之类的CICD工具更不必说,但确实没有系统地去学习过敏捷开发管理。昨天被人问到敏捷开发到底是…...
牛客小白月赛107(A~E)
文章目录 A Cidoai的吃饭思路code B Cidoai的听歌思路code C Cidoai的植物思路code D Cidoai的猫猫思路code E Cidoai的可乐思路code 牛客小白月赛107 A Cidoai的吃饭 思路 签到题,按题意模拟即可 code void solve(){int n,a,b,c;cin >> n >> a &g…...
【传感器技术】第6章 压电式传感器,压电材料,压电效应,电压放大器
关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...
基于Python深度学习的【猫狗宠物识别】系统设计实现
一、简介 宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【‘阿比西尼亚猫(Abyssinian)’, ‘孟加拉猫(Bengal)’…...
网站多语言前端翻译translate.js 在vue项目中的使用方法
网站多语言前端翻译translate.js 在vue项目中的使用方法 需求 客户网站,想要多语言版本的,通常的解决办法有两种: 1、最直接的办法:编写两种,或者多种语言版本的网站,也就是一个网站有几种语言࿰…...
HTML技术贴:深入理解与实践
1. 引言 HTML(HyperText Markup Language,超文本标记语言)是构建网页和网上应用的标准标记语言。它定义了网页内容的结构和意义,由一系列元素组成,这些元素告诉浏览器如何展示内容。本技术贴旨在深入探讨HTML的核心技…...
在SQL Server中使用hash join来提高表连接的性能
在SQL Server中使用hash join来提高表连接性能时,需要考虑数据集的大小、索引情况以及查询的具体需求。 在SQL Server中使用hash join来提高表连接性能的情况主要包括以下几种: • 两个表都没有合适的索引:Hash join通常适合当两个表都没有索…...
一键学懂BurpSuite(8)
声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…...
系统思考—战略决策
别用管理上的勤奋,来掩盖经营上的懒惰。 日本一家物业公司,因经营不善,面临生死存亡的危机。老板为了扭转局面,采取了很多管理手段——提高员工积极性,推行业绩与绩效挂钩,实施各种考核制度。然而…...
mybatis,mysql之collection 与 association 不生效问题(仅是个人常犯错误)
因为自己马大哈,经常犯这个错误,原以为是拷贝的代码问题,最后发现是自己的遗漏问题! 看代码,先看不生效的 <resultMap type"Price" id"PriceResult"><id property"priceId&qu…...
探索 Echarts 绘图:数据可视化的奇妙之旅
目录 一、Echarts 初印象 二、搭建 Echarts 绘图环境 三、绘制第一个图表:柱状图的诞生 四、图表的美化与定制:让数据更具吸引力 1. 主题切换:一键变换风格 2. 颜色调整:色彩搭配的艺术 3. 标签与提示框:丰富信…...
Python粉色圣诞树
系列文章 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码8Python普通的玫瑰花代码9Python炫酷的玫瑰花代码10Python多…...
JavaScript逆向时,常用的11个hook
提示:记录工作中遇到的需求及解决办法 文章目录 前言01、dom操作02、Cookie操作03、事件监听操作04、AJAX拦截操作05、函数替换操作06、Header操作07、URL操作08、JSON.stringify操作09、JSON.parse操作10、eval操作11、Function操作前言 在逆向分析JavaScript代码时,开发者…...
嵌入式驱动开发详解15(电容触摸屏gt9147)
文章目录 前言电容触摸屏特点MT触摸消息电容触摸屏协议电容屏触摸时序Type A 触摸点信息上报时序Type B 触摸点信息上报时序 多点触摸所使用到的API函数 驱动部分驱动框图设备树节点修改设备树引脚配置设备节点配置 具体驱动开发I2C驱动框架I2C框架内部实现 参考文献 前言 随着…...
supervision - 好用的计算机视觉 AI 工具库
Supervision库是一款出色的Python计算机视觉低代码工具,其设计初衷在于为用户提供一个便捷且高效的接口,用以处理数据集以及直观地展示检测结果。简化了对象检测、分类、标注、跟踪等计算机视觉的开发流程。开发者仅需加载数据集和模型,就能轻…...
软件安装不成功,一直出现“chrome_elf.dll丢失”问题是什么原因?“chrome_elf.dll丢失”要怎么解决和预防?
软件安装遇阻:“chrome_elf.dll丢失”问题全解析与解决方案 在软件安装与运行的过程中,我们时常会遇到各式各样的错误提示,其中“chrome_elf.dll丢失”便是较为常见的一种。这个错误不仅阻碍了软件的正常安装,也给用户带来了不小…...
10篇--图像噪点消除
概念 何为噪点? 噪点:指图像收到的一些干扰因素,通常是由图像采集设备、传输信道等因素造成的,表现为图像中随机的亮度,也可以理解为有那么一些点的像素值与周围的像素值格格不入。 常见的噪声类型 高斯噪声&#…...
在 Vue 2 中,在 <el-table> 中为每一行动态插入对应的 echart 组件
更新数据结构:确保每一行数据都包含需要绘制图表的数据(例如 demandRespList 和 timeList),以便为每行生成不同的图表。 修改 getTableDataPreview 方法:在获取数据后,您需要为每一行创建对应的图表配置。 在 <el-table-column> 中使用 slot-scope:使用 slot-scop…...
protobuf c++开发快速上手指南
1、环境准备 在c环境使用 protobuf,需要安装protobuf runtime以及protobuf的编译器:protoc,其作用如下表格: 需要安装的环境作用protoc将proto文件编译成c源码protobuf runtime编译c源码需要链接到protobuf库 注意:…...