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

C语言-顺序表

在这里插入图片描述

🎯引言

欢迎来到HanLop博客的C语言数据结构初阶系列。在这个系列中,我们将深入探讨各种基本的数据结构和算法,帮助您打下坚实的编程基础。本次我将为你讲解。顺序表(也称为数组)是一种线性表,因其简单易用而广泛应用于各类编程任务中。在本篇文章中,我们将介绍顺序表的基本概念、顺序表的创建和操作方法,以及其优缺点。通过一些实际的代码示例,您将更好地掌握顺序表在C语言中的应用,从而为后续学习其他数据结构打下坚实的基础。

👓顺序表

1.线性表

线性表的概念

线性表是数据结构中最基本、最常用的一种结构,由n个数据元素组成一个有限序列。线性表中的数据元素之间存在一对一的线性关系,即每个元素都有唯一的前驱和后继(除了第一个和最后一个元素)。常见的线性表有:顺序表、链表、栈、队列…

线性表的基本特点:

  1. 线性关系:每个元素有且仅有一个直接前驱和一个直接后继(第一个元素除外没有前驱,最后一个元素除外没有后继)。

  2. 唯一性:每个元素在表中的位置是唯一的。

  3. 相同类型:线性表中的所有元素都是相同的数据类型。

逻辑结构

线性表的逻辑结构是指线性表中元素之间的关系。线性表中的元素具有一对一的线性关系,即每个元素都有唯一的前驱和后继(第一个元素除外没有前驱,最后一个元素除外没有后继)。这种逻辑结构决定了线性表的基本操作和特点。

物理结构

线性表的物理结构是指线性表在计算机内存中的存储方式。主要有两种存储方式:

  1. 顺序存储结构(顺序表,数组):
    • 元素依次存储在一段连续的内存空间中。
    • 优点:可以通过索引快速访问元素,查找效率高。
    • 缺点:插入和删除操作效率较低,因为需要移动大量元素。
  2. 链式存储结构(链表):
    • 元素存储在任意的内存位置,元素之间通过指针连接。
    • 优点:插入和删除操作效率较高,不需要移动元素,只需改变指针。
    • 缺点:查找效率较低,因为需要从头遍历到所需位置。

2.顺序表

2.1概念

  • 定义:顺序表是由一组连续的存储单元组成的线性表,元素之间的逻辑顺序与物理存储位置相对应。
  • 特点:
    • 元素类型相同,存储在一块连续的内存空间中。
    • 支持通过索引快速访问元素。
    • 插入和删除操作需要移动大量元素,效率较低。
  • 适用场景:适合于元素数量固定且需要频繁进行查找操作的场景。

2.2结构

顺序表的物理结构如下:

存储结构:使用一段连续的内存空间存储元素,可以通过下标来访问各个元素。(底层本质上数组,对数组进行封装后成了顺序表)

基本操作

  1. 插入操作

    • 定义:在顺序表的指定位置插入一个新的元素。

    • 步骤:如果插入位置不在表尾,需要将插入位置后的元素依次后移一位,然后将新元素插入到指定位置。

    • 时间复杂度:最坏情况下是O(n),因为可能需要移动表尾的所有元素。

  2. 删除操作

    • 定义:删除顺序表中指定位置的元素。

    • 步骤:将删除位置后的元素依次前移一位,覆盖被删除的元素位置。

    • 时间复杂度:最坏情况下是O(n),因为可能需要移动表尾的所有元素。

  3. 修改操作

    • 定义:修改顺序表中指定位置的元素值。

    • 步骤:直接通过索引定位到指定位置,修改元素的值。

    • 时间复杂度:O(1),因为修改操作是直接定位到位置进行修改。

  4. 查找操作

    • 定义:查找顺序表中指定元素或元素位置。

    • 步骤:通过顺序表的索引直接访问指定位置的元素,或者遍历整个表查找特定元素。

    • 时间复杂度:最坏情况下是O(n),因为可能需要遍历整个表来查找元素。

2.3分类

2.3.1静态顺序表
  • 定义:静态顺序表是在程序运行前就确定了大小,内存空间是静态分配的,不可动态改变大小。
  • 特点:数组长度在创建时固定,不能动态增加或减少。
  • 优点:访问速度快,不需要额外的空间管理。
  • 缺点:浪费内存空间,不能适应动态变化的数据需求。
//静态顺序表
typedef int SLDateType;
#define N 10
typedef struct SeqList
{SLDateType a[N];int size;
}SeqList;
2.3.2动态顺序表
  • 定义:动态顺序表是在程序运行时根据需要动态分配内存空间的顺序表。
  • 特点:可以动态地增加或减少数组的长度。
  • 优点:节约内存空间,适应动态变化的数据需求。
  • 缺点:可能导致频繁的内存分配和拷贝,影响性能。
typedef int SLDateType;
typedef struct SeqList
{SLDateType* a;int size;int capacity;
}SeqList;

2.4动态顺序表的实现

2.4.1SeqList.h文件
//SeqList.h文件的代码
#include <stdio.h>//标准输入输出库,提供了标准的输入输出函数。
#include <stdlib.h>//标准库,提供了动态内存分配、随机数生成、程序控制等函数。
#include <assert.h>//断言库,用于在程序中插入检查点,确保某个条件为真,如果条件为假则终止程序执行。//动态顺序表
typedef int SLDateType;
typedef struct SeqList
{SLDateType* a;int size;int capacity;
}SeqList;//顺序表初始化
void SeqListInit(SeqList* p);
//顺表打印
void SeqListPrint(SeqList* p);
//顺序表的销毁
void SeqListDestory(SeqList* p);//顺序表尾插
void SeqListPushBack(SeqList* p, SLDateType x);
//顺序表增容
void CheckCapacity(SeqList* p);
//顺序表头插
void SeqListPushFront(SeqList* p, SLDateType x);
//顺序表尾删
void SeqListPopBack(SeqList* p);//在pos位置插入数字
void SeqListInsert(SeqList* p, int pos, SLDateType X);
//删除pos位置的数字
void SeqListErase(SeqList* p,int pos);
//找到指定的数字位置,返回下标
int SeqListFind(SeqList* p, SLDateType x);

代码解析:

动态顺序表结构体定义

typedef int SLDateType;
typedef struct SeqList
{SLDateType* a;  // 指向动态数组的指针int size;       // 当前动态顺序表中元素的个数int capacity;   // 当前动态顺序表的容量
} SeqList;
  • SLDateType:定义动态顺序表中存储的元素类型为 int
  • struct SeqList:定义了动态顺序表的结构体,包含:
    • SLDateType* a:指向动态数组的指针,用于存储顺序表中的元素。
    • int size:当前动态顺序表中元素的个数。
    • int capacity:当前动态顺序表的容量,即可以存储的最大元素个数。

函数声明

// 顺序表初始化
void SeqListInit(SeqList* p);
// 顺序表打印
void SeqListPrint(SeqList* p);
// 顺序表的销毁
void SeqListDestory(SeqList* p);// 顺序表尾插
void SeqListPushBack(SeqList* p, SLDateType x);
// 顺序表增容
void CheckCapacity(SeqList* p);
// 顺序表头插
void SeqListPushFront(SeqList* p, SLDateType x);
// 顺序表尾删
void SeqListPopBack(SeqList* p);// 在pos位置插入数字
void SeqListInsert(SeqList* p, int pos, SLDateType X);
// 删除pos位置的数字
void SeqListErase(SeqList* p, int pos);
// 找到指定的数字位置,返回下标
int SeqListFind(SeqList* p, SLDateType x);

这些函数声明定义了动态顺序表的基本操作:

  • SeqListInit:初始化动态顺序表。
  • SeqListPrint:打印动态顺序表中的元素。
  • SeqListDestory:销毁动态顺序表,释放内存。
  • SeqListPushBack:尾部插入元素。
  • CheckCapacity:检查并增加动态顺序表的容量。
  • SeqListPushFront:头部插入元素。
  • SeqListPopBack:尾部删除元素。
  • SeqListInsert:在指定位置插入元素。
  • SeqListErase:删除指定位置的元素。
  • SeqListFind:查找指定元素并返回其位置。

这些函数声明提供了对动态顺序表进行初始化、增删改查等基本操作的接口,具体的实现应该在对应的 SeqList.c 文件中完成。

2.4.2SeqList.c文件
//SeqList.c文件
//这里引入了头文件 SeqList.h,其中定义了动态顺序表的结构体 SeqList 和函数声明。
#include "SeqList.h"
//顺序表的初始化
void SeqListInit(SeqList* p)
{assert(p);p->a = NULL;p->size = p->capacity = 0;
}//顺序表的销毁
void SeqListDestory(SeqList* p)
{assert(p);free(p->a);p->a = NULL;p->size = p->capacity = 0;
}//顺序表打印
void SeqListPrint(SeqList* p)
{assert(p);int i = 0;for (i = 0; i < p->size; i++){printf("%d ", p->a[i]);}printf("\n");
}//检查并增加动态顺序表的容量。
void CheckCapacity(SeqList* p)
{assert(p);int newcapacity = p->capacity == 0 ? 4 : p->capacity * 2;if (p->capacity == p->size){p->capacity = newcapacity;SLDateType* tmp = (SLDateType*)realloc(p->a, p->capacity * sizeof(SLDateType));if (tmp != NULL){p->a = tmp;}else{exit(1);}}
}//顺序表尾插
void SeqListPushBack(SeqList* p, SLDateType x)
{assert(p);CheckCapacity(p);p->a[p->size] = x;p->size++;
}//顺序表头插
void SeqListPushFront(SeqList* p, SLDateType x)
{assert(p);CheckCapacity(p);int i = 0;for (i = p->size; i > 0; i--){p->a[i] = p->a[i-1];}p->a[0] = x;p->size++;
}//顺序表尾删
void SeqListPopBack(SeqList* p)
{assert(p);assert(p->size);p->size--;}//顺序表头删
void SeqListPopFront(SeqList* p)
{assert(p);assert(p->size);int i = 0;for (i = 0; i < p->size-1; i++){p->a[i] = p->a[i + 1];}p->size--;
}//在pos位置插入数字
void SeqListInsert(SeqList* p, int pos, SLDateType x)
{assert(p != NULL);assert(pos >= 0 && pos <= p->size);//检查是否需要增容CheckCapacity(p);for (int i = p->size-1; i > pos-1 ; --i){p->a[i + 1] = p->a[i];//p->a[pos+1]=p->a[pos]}p->a[pos] = x;p->size++;
}//删除pos位置的数字
void SeqListErase(SeqList* p, int pos)
{assert(p != NULL);assert(pos >= 0 && pos < p->size);for (int i = pos; i < p->size-1; i++){p->a[i] = p->a[i + 1];//p->a[size-2]=p->a[size-1]}p->size--;
}//找到指定的数字位置,返回下标
int SeqListFind(SeqList* p, SLDateType x)
{assert(p != NULL);for (size_t i = 0; i < p->size; i++){if (p->a[i] == x){return i;}}return -1;
}

代码解析:

初始化函数 SeqListInit

void SeqListInit(SeqList* p)
{assert(p);p->a = NULL;p->size = p->capacity = 0;
}
  • 功能:初始化动态顺序表。
  • 说明:将动态顺序表指针 p 所指向的顺序表 a 设置为 NULL,并将 size(元素个数)和 capacity(容量)都设置为 0。使用断言 assert(p) 确保传入的指针 p 不为空。

销毁函数 SeqListDestory

void SeqListDestory(SeqList* p)
{assert(p);free(p->a);p->a = NULL;p->size = p->capacity = 0;
}
  • 功能:销毁动态顺序表。
  • 说明:释放动态顺序表 a 所指向的内存空间,将 a 置为 NULL,并将 sizecapacity 置为 0。同样使用断言 assert(p) 确保传入的指针 p 不为空。

打印函数 SeqListPrint

void SeqListPrint(SeqList* p)
{assert(p);int i = 0;for (i = 0; i < p->size; i++){printf("%d ", p->a[i]);}printf("\n");
}
  • 功能:打印动态顺序表中的元素。
  • 说明:遍历顺序表 a 中的每个元素,依次打印出来。使用断言 assert(p) 确保传入的指针 p 不为空。

增容函数 CheckCapacity

void CheckCapacity(SeqList* p)
{assert(p);int newcapacity = p->capacity == 0 ? 4 : p->capacity * 2;if (p->capacity == p->size){p->capacity = newcapacity;SLDateType* tmp = (SLDateType*)realloc(p->a, p->capacity * sizeof(SLDateType));if (tmp != NULL){p->a = tmp;}else{exit(1);}}
}
  • 功能:检查并增加动态顺序表的容量。
  • 说明:
    • 如果当前顺序表 a 的容量 capacity 等于当前元素个数 size,则表示需要增加容量。
    • 计算新的容量 newcapacity,如果当前容量为 0,则设置为 4,否则扩大为原来的两倍。
    • 使用 realloc 函数重新分配 a 的内存空间,将新的容量分配给 a。如果分配失败,程序退出。
    • 使用断言 assert(p) 确保传入的指针 p 不为空。

尾部插入函数 SeqListPushBack

void SeqListPushBack(SeqList* p, SLDateType x)
{assert(p);CheckCapacity(p);p->a[p->size] = x;p->size++;
}
  • 功能:在动态顺序表尾部插入元素 x
  • 说明:首先调用 CheckCapacity 函数检查并增加容量。然后将元素 x 插入到顺序表 a 的末尾,并更新 size

头部插入函数 SeqListPushFront

void SeqListPushFront(SeqList* p, SLDateType x)
{assert(p);CheckCapacity(p);int i = 0;//元素从后往前依次往后移动一位 注:不能从前往后 因为前面的元素往后移动会覆盖掉后面的元素for (i = p->size; i > 0; i--){p->a[i] = p->a[i-1];}p->a[0] = x;p->size++;
}
  • 功能:在动态顺序表头部插入元素 x
  • 说明:首先调用 CheckCapacity 函数检查并增加容量。然后将顺序表 a 中的所有元素后移一位,为新元素腾出空间,最后将 x 插入到顺序表 a 的第一个位置,并更新 size

尾部删除函数 SeqListPopBack

void SeqListPopBack(SeqList* p)
{assert(p);assert(p->size > 0);p->size--;
}
  • 功能:从动态顺序表尾部删除元素。
  • 说明:首先使用断言 assert(p) 确保顺序表不为空,然后将 size 减一,表示删除尾部的元素。

头部删除函数 SeqListPopFront

void SeqListPopFront(SeqList* p)
{assert(p);assert(p->size > 0);int i = 0;//元素从前往后依次向前移动一位 for (i = 0; i < p->size-1; i++){p->a[i] = p->a[i + 1];}p->size--;
}
  • 功能:从动态顺序表头部删除元素。
  • 说明:首先使用断言 assert(p) 确保顺序表不为空,然后将顺序表 a 中的所有元素前移一位,覆盖掉第一个元素,最后将 size 减一,表示删除头部的元素。

插入函数 SeqListInsert

void SeqListInsert(SeqList* p, int pos, SLDateType x)
{assert(p != NULL);assert(pos >= 0 && pos <= p->size);CheckCapacity(p);//元素从后往前依次向后移动一位 for (int i = p->size-1; i >= pos; --i){p->a[i + 1] = p->a[i];}p->a[pos] = x;p->size++;
}
  • 功能:在指定位置 pos 插入元素 x
  • 说明:
    • 首先使用断言确保顺序表和位置参数有效。
    • 调用 CheckCapacity 函数检查并增加容量。
    • 将插入位置 pos 后的所有元素依次后移一位,为新元素 x 腾出空间。
    • 将元素 x 插入到指定位置 pos,并更新 size

删除函数 SeqListErase

void SeqListErase(SeqList* p, int pos)
{assert(p != NULL);assert(pos >= 0 && pos < p->size);//元素从前往后依次向前移动一位 for (int i = pos; i < p->size-1; i++){p->a[i] = p->a[i + 1];}p->size--;
}
  • 功能:删除指定位置 pos 的元素。
  • 说明:
    • 首先使用断言确保顺序表和位置参数有效。
    • 将指定位置 pos 后的所有元素依次前移一位,覆盖掉要删除的元素。
    • 最后将 size 减一,表示删除了一个元素。

查找函数 SeqListFind

int SeqListFind(SeqList* p, SLDateType x)
{assert(p != NULL);for (size_t i = 0; i < p->size; i++){if (p->a[i] == x){return i;}}return -1;
}
  • 功能:查找顺序表中值为 x 的元素,返回其位置索引。
  • 说明:
    • 使用断言确保顺序表有效。
    • 遍历顺序表 a 中的所有元素,找到第一个值等于 x 的元素,返回其位置索引。
    • 如果未找到,返回 -1 表示未找到。

🥇结语

通过本篇文章,我们详细介绍了顺序表这一重要的数据结构及其在C语言中的实现与应用。我们探讨了顺序表的基本概念、操作方法以及优缺点,并通过实例代码展示了如何在实际编程中使用顺序表。掌握顺序表不仅有助于理解其他更复杂的数据结构,还能提高代码编写和优化能力。希望本文能为您的编程之旅提供有益的指导。请继续关注HanLop博客,下一篇文章我们将探讨另一种常见的数据结构——链表,敬请期待!

相关文章:

C语言-顺序表

&#x1f3af;引言 欢迎来到HanLop博客的C语言数据结构初阶系列。在这个系列中&#xff0c;我们将深入探讨各种基本的数据结构和算法&#xff0c;帮助您打下坚实的编程基础。本次我将为你讲解。顺序表&#xff08;也称为数组&#xff09;是一种线性表&#xff0c;因其简单易用…...

OpenCV漫水填充函数floodFill函数的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 功能描述 ffloodFill函数是OpenCV库中用于图像处理的一个功能&#xff0c;它用于填充与种子点颜色相近的连通区域。这个函数在很多场景下都非常有用&#x…...

redis内存分析

阿里云redis集群对key进行hash后保存在对应的后端节点&#xff0c;使每个节点的key数量大致相同&#xff0c;但是如果存在大key&#xff0c;就会导致单个节点内存用满&#xff0c;可以使用redis-rdb-tools 或rdr来对内存进行分析。 redis-rdb-tools redis-rdb-tools通过对dum…...

redis批量删除keys,用lua脚本。

文章目录 现象解决方法 现象 系统报错&#xff1a; misconf redis is configured to save ....后查看机器内存。 是内存满了&#xff0c;需要删除其中的key 解决方法 (1) 编写一个脚本&#xff0c;放在redis-cli.exe同一个目录 (2) 脚本内容如下&#xff1a; -- 使用Lua脚…...

Python-找客户软件

软件功能 请求代码&#xff1a; 填充表格&#xff1a; 可以search全国各个区县的所有企业信息&#xff0c;过滤手机号、查看是否续存/在业状态。方便找客户。 支持定-制-其他引-留-阮*件&#xff08;XHSS&#xff0c;DYY&#xff0c;KS&#xff0c;Bi-li*Bi-li&#xff09; V*…...

STM32 - PWR 笔记

PWR&#xff08;Power Control&#xff09;电源控制 PWR 负责管理 STM32 内部的电源供电部分&#xff0c;可以实现 可编程电压监测器 和 低功耗模式 的功能 可编程电压监测器&#xff08;PVD&#xff09;可以监控VDD电源电压&#xff0c;当VDD下降到PVD阀值以下或上升到PVD…...

标准盒模型和怪异盒子模型的区别

在 CSS 中&#xff0c;标准盒模型和怪异盒模型是两种不同的盒子模型计算方式&#xff0c;主要区别如下&#xff1a; 一、标准盒模型&#xff08;content-box&#xff09; 1. 定义与组成 - 标准盒模型是 CSS 中默认的盒模型。 - 它由内容区域&#xff08;content&#xff09;、…...

推荐算法——MRR

定义&#xff1a; MRR计算的是第一个正确答案的排名的倒数&#xff0c;并对所有查询取平均值。它衡量了模型在排序结果中快速找到正确答案的能力。 其中&#xff1a; Q 是查询的总数。ranki​ 是第 i 个查询中第一个正确答案的排名&#xff08;位置&#xff09;。如果第一个正…...

idea中打开静态网页端口是63342而不是8080

问题&#xff1a; 安装了tomcat 并且也配置了环境&#xff0c;但是在tomcat下运行&#xff0c;总是在63342下面显示。这也就意味着&#xff0c;并没有运行到tomcat环境下。 找了好几个教程&#xff08;中间还去学习了maven&#xff0c;因为跟的教程里面&#xff0c;没有maven,但…...

Vue3框架搭建3:配置说明-prettier配置

1、配置说明&#xff1a; .prettierrc.json{"$schema": "https://json.schemastore.org/prettierrc","semi": false,"tabWidth": 2,"singleQuote": true,"printWidth": 100,"trailingComma": "no…...

SQL MySQL定时器/事件调度器(Event Scheduler)

事件调度器&#xff08;Event Scheduler&#xff09;在MySQL数据库系统中是一个强大的功能组件&#xff0c;它允许用户定义一系列称为“事件”的数据库对象&#xff0c;这些事件在指定的时间或时间间隔自动执行预定义的SQL语句或操作。事件调度器通过维护一个时间计划表来管理这…...

从0到1构建渠道运营体系:实战案例与策略指南

引言 在当今竞争激烈的市场环境中&#xff0c;有效的渠道运营是企业实现产品或服务快速触达目标用户、提升市场份额的关键。从零开始构建一个高效的渠道运营体系&#xff0c;不仅需要深思熟虑的策略规划&#xff0c;还需要灵活应变的实战操作。本文将结合实战案例&#xff0c;…...

Java版Flink使用指南——将消息写入到RabbitMQ的队列中

大纲 新建工程新增依赖 编码自动产生数据写入RabbitMQ 测试工程代码 在 《Java版Flink使用指南——从RabbitMQ中队列中接入消息流》一文中&#xff0c;我们介绍了如何使用Java在Flink中读取RabbitMQ中的数据&#xff0c;并将其写入日志中。本文将通过代码产生一些数据&#xf…...

python excel openpyxl

python excel LTS 在开始之前&#xff0c;确保已经安装了 Python 和所需的库。 主要使用以下库&#xff1a; openpyxl&#xff1a;用于读取和写入 Excel 文件。 pandas&#xff1a;用于数据处理和分析。 xlwings&#xff1a;用于将 Python 与 Excel 连接&#xff0c;实现双向…...

C++八股(一)

目录 一、new和malloc ⭐ 二、class和struct的区别 ⭐ 三、char和int之间的转换 四、什么是野指针和悬挂指针 ⭐ 五、NULL和nullptr区别⭐ 六、指针常量和常量指针有何区别⭐ 七、物理内存和虚拟内存的区别⭐ 八、重载、重写和隐藏的区别⭐ 九、简述面向对象(OOP)的…...

【Git的基本操作】版本回退 | 撤销修改的三种情况 | 删除文件

目录 5.版本回退 5.1选项hard&后悔药 5.2后悔药&commit id 5.3版本回退的原理 6.撤销修改 6.1情况一 6.2情况二 6.3情况三 ​7.删除文件 Git重要能力之一马&#xff0c;版本回退功能。Git是版本控制系统&#xff0c;能够管理文件历史版本。本篇以ReadMe文件为…...

STM32-I2C

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. I2C通信1.1 I2C通信简介1.2 硬件电路1.3 I2C时序基本单元1.3.1 起始条件和终止条件1.3.2 发送一个字节1.3.3 接收一个字节1.3.4 发送应答和接收应答 1.4 I2C时序1.4.1 指定地址写1.4.2 当前地址读1.4.3 指定地址读…...

04.ffmpeg打印音视频媒体信息

目录 1、相关头文件 2、相关结构体 3、相关函数 4、函数详解 5、源码附上 1、相关头文件 #include <libavformat/avformat.h> 包含格式相关的函数和数据结构 #include <libavutil/avutil.h> 包含一些通用实用函数 2、相关结构体 AV…...

微信开发授权登录梳理总结

授权登录流程对比 微信公众号/网页 微信文档地址&#xff1a;https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 流程图如下&#xff1a; 特殊说明&#xff1a; 步骤1拼接的微信地址是&#xff1a;https://open.weixin.qq…...

HTML5实现我的音乐网站源码

文章目录 作者&#xff1a;[xcLeigh](https://blog.csdn.net/weixin_43151418) 1.设计来源1.1 界面效果1.2 轮播图界面1.3 音乐播放界面1.4 视频播放界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...