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

数据结构:线性表的基本操作与链式表达

个人主页

文章专栏

成名之作——赛博算命之梅花易数的Java实现

陆续回三中,忘回漏回滴滴~感谢各位大佬的支持

在这里插入图片描述

一.线性表的定义和基本操作

1.1定义

线性表是具有相同数据类型的n个数据元素的有序数列,n为表长

第一个元素叫表头元素,除了他,每个元素有且仅有一个直接前驱

最后一个元素叫表尾元素,除了他,每个元素有且仅有一个直接后继

1.2特点

  • 个数有限
  • 逻辑上有顺序性
  • 每个元素都是数据元素,且数据类型都相同,占用空间相同
  • 有抽象性

注:线性表是逻辑结构,顺序表和链表是存储结构

1.3基本操作

InitList(&L): 初始化表。构造一个空的线性表。

Length(L):求表长。返回线性表L 的长度,即L 中数据元素的个数。

LocateElem(L,e): 按值查找操作。在表工中查找具有给定关键字值的元素。

GetElem(L,i): 按位查找操作。获取表L 中 第i 个位置的元素的值。

ListInsert(&L,i,e): 插入操作。在表L 中的第i 个位置上插入指定元素e。

ListDelete(&L,i,&e):删除操作。删除表L 中第i 个位置的元素,并用e 返回删除元素的值。

PrintList(L): 输出操作。按前后顺序输出线性表L 的所有元素值。

Empty(L): 判空操作。若L 为空表,则返回true, 否则返回false。

DestroyList(&L): 销毁操作。销毁线性表,并释放线性表L 所占用的内存空间。


二.线性表的顺序表示

2.1定义

线性表的顺序存储称为顺序表,逻辑顺序与物理存储顺序相同,是一种随机存取的存储结构

位序:就是第几个,相当于下标但不是下标,数组的下标从0开始,位序从1开始

2.2静态分配与动态分配

一维数组可以静态分配也可以动态分配。

静态分配:空间是固定的,多于最大值时,新数据就会溢出,导致数据崩溃

#define MaxSize 50//定义线性表的最大长度
typedef struct {ElemType data [MaxSize];//顺序表的元素int length;//顺序表的当前长度
}SqList;//顺序表的类型定义

动态分配:不是一次性划分所有空间,多余最大值时,会重新开辟更大的新空间,并且把原来的数据copy到新的空间中(不是链式存储,仍是顺序存储结构)

#define IntSize 100//表长度的初始定义
typedef struct{ElemType *data;//指示动态分配数组的指针int MaxSize , length;//数组的最大容量和当前个数
}SeqList;//动态分配数组顺序表的类型定义

C的初始动态分配语句为:

L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);

2.3顺序表的优缺

优点:可以随机访问,存储密度高

缺点:不方便变动,不够灵活

2.4基本操作实现

顺序表的初始化

静态分配

void InitList(SqList *L) {L->length = 0;//顺序表初始长度为0
}

动态分配

void InitList(SqList *L) {L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);//分配动态存储空间L->length = 0;//顺序表初始长度为0L->MaxSize=IntSize;//初始存储容量
}
插入操作
//在指定位置插入元素
bool ListInsert(SqList *L, int i, ElemType e) {//判断位序i是否合法if (i<1 || i>L->length+1) {return false;}//判断顺序表是否已满if (i>L->length+1) {return false;}//将第i个位置及之后的元素后移for (int j=L->length; j>i; j--) {L->data[j] = L->data[j-1];}//在第i个位置插入元素L->data[i-1] = e;L->length++;return true;
}

顺序表插入元素的平均时间复杂度是O(n)

删除操作
//删除指定位置的元素
bool ListDelete(SqList *L, int i, ElemType *e) {//判断位序i是否合法if (i<1 || i>L->length) {return false;}//保存被删除的元素*e = L->data[i-1];//将第i个位置及之后的元素前移for (int j=i; j<L->length; j++) {L->data[j-1] = L->data[j];}//顺序表长度减1L->length--;return true;
}

顺序表删除元素的平均时间复杂度是O(n)

按位查找
//按位查找
bool GetElem(SqList L, int i, ElemType *e) {//判断位序i是否合法if (i<1 || i>L.length) {return false;}*e = L.data[i-1];return true;
}

顺序表按位查找的平均时间复杂度是O(1)

按值查找(顺序查找)
//按值查找
int LocateElem(SqList L, ElemType e) {for (int i=0; i<L.length; i++) {if (L.data[i] == e) {return i+1;}}return 0;
}

顺序表按值查找的平均时间复杂度是O(n)

以上是基于c语言的代码实现,以下是java的代码实现

public class SequentialList {// 定义常量和数据类型private static final int MAX_SIZE = 100;private int[] data;private int length;// 构造函数:初始化顺序表public SequentialList() {data = new int[MAX_SIZE];length = 0;}// 在指定位置插入元素public boolean insert(int index, int element) {// 判断索引是否合法(1~length+1)if (index < 1 || index > length + 1) {return false;}// 判断顺序表是否已满if (length >= MAX_SIZE) {return false;}// 将第index个位置及之后的元素后移for (int j = length; j >= index; j--) {data[j] = data[j-1];}data[index-1] = element;  // 在第index个位置插入元素length++;                 // 顺序表长度加1return true;}// 删除指定位置的元素public boolean delete(int index, int[] element) {// 判断索引是否合法(1~length)if (index < 1 || index > length) {return false;}element[0] = data[index-1];  // 保存被删除的元素// 将第index+1个位置及之后的元素前移for (int j = index; j < length; j++) {data[j-1] = data[j];}length--;  // 顺序表长度减1return true;}// 按位查找:获取顺序表中第index个位置的元素public boolean getElement(int index, int[] element) {// 判断索引是否合法(1~length)if (index < 1 || index > length) {return false;}element[0] = data[index-1];  // 将第index个位置的元素赋值给elementreturn true;}// 打印顺序表中的所有元素public void printList() {System.out.print("顺序表中的元素: ");for (int i = 0; i < length; i++) {System.out.print(data[i] + " ");}System.out.println("\n顺序表长度: " + length);}

三.线性表的链式表示

3.1单链表

3.1.1 定义

单链表是一种链式存储结构,通过节点(Node)连接而成。每个节点包含:

  • 数据域:存储数据元素的值
  • 指针域:存储下一个节点的地址(null表示无后继节点)

逻辑结构
head -> Node1 -> Node2 -> ... -> Node(n) -> null
head为头指针,指向链表第一个节点;最后一个节点的指针域为null

3.1.2 节点定义
typedef int ElemType;// 单链表节点结构体
typedef struct LNode {ElemType data;          // 数据域struct LNode *next;     // 指针域,指向下一个节点
} LNode, *LinkList;        // LinkList为指向结构体的指针类型
3.1.3 核心操作实现
(1)初始化空链表
// 初始化空链表(带头节点)
bool InitList(LinkList *L) {*L = (LNode *)malloc(sizeof(LNode));  // 分配头节点if (*L == NULL) return false;         // 内存分配失败(*L)->next = NULL;                    // 头节点指针域置空return true;
}
(2)按位序插入节点
// 在第i个位置插入元素e(带头节点)
bool ListInsert(LinkList L, int i, ElemType e) {if (i < 1) return false;              // 位序i不能小于1LNode *p = L;                        // p指向头节点,从第0个位置开始遍历int j = 0;                           // 当前位置j=0(头节点位置)// 找到第i-1个节点while (p != NULL && j < i-1) {p = p->next;j++;}if (p == NULL) return false;          // i超过链表长度+1// 创建新节点LNode *s = (LNode *)malloc(sizeof(LNode));s->data = e;s->next = p->next;                    // 新节点指向p的后继节点p->next = s;                          // p的后继节点改为新节点return true;
}
(3)按位序删除节点
// 删除第i个位置的元素,并用e返回值(带头节点)
bool ListDelete(LinkList L, int i, ElemType *e) {if (i < 1) return false;LNode *p = L;int j = 0;// 找到第i-1个节点while (p != NULL && j < i-1) {p = p->next;j++;}if (p == NULL || p->next == NULL) return false;  // i不合法或链表为空LNode *q = p->next;          // q指向待删除节点*e = q->data;                // 保存删除元素的值p->next = q->next;           // 跳过待删除节点free(q);                     // 释放内存return true;
}
(4)按位序查找节点
// 按位序i查找节点(返回节点指针)
LNode* GetElem(LinkList L, int i) {if (i < 0) return NULL;       // i=0时返回头节点LNode *p = L;int j = 0;while (p != NULL && j < i) {p = p->next;j++;}return p;                    // 找到返回节点,否则返回NULL
}
3.1.4 特点
  • 优点:
    • 动态分配内存,无需预先确定长度
    • 插入 / 删除操作无需移动大量元素,时间复杂度为 (O(1))(找到前驱节点后)
  • 缺点:
    • 无法随机访问元素,按位查找需遍历链表(时间复杂度 (O(n)))
    • 存储密度低(每个节点需额外存储指针域)

3.2 双链表

3.2.1 定义

双链表的节点包含两个指针域

  • prior:指向前驱节点
  • next:指向后继节点

逻辑结构head <-> Node1 <-> Node2 <-> ... <-> Node(n) (头节点的priornull,尾节点的nextnull

3.2.2 节点定义
typedef struct DNode {ElemType data;struct DNode *prior;  // 前驱指针struct DNode *next;   // 后继指针
} DNode, *DLinkList;
3.2.3 核心操作实现(插入与删除)
(1)插入节点(在 p 节点后插入 s 节点)
void InsertAfter(DNode *p, DNode *s) {s->next = p->next;      // s的后继指向p的后继if (p->next != NULL) {  // 若p不是尾节点,更新后继的前驱p->next->prior = s;}p->next = s;            // p的后继指向ss->prior = p;           // s的前驱指向p
}
(2)删除节点(删除 p 节点的后继节点 q)
bool DeleteNext(DNode *p) {if (p == NULL || p->next == NULL) return false;DNode *q = p->next;          // q为p的后继节点p->next = q->next;           // p的后继改为q的后继if (q->next != NULL) {       // 若q不是尾节点,更新后继的前驱q->next->prior = p;}free(q);                     // 释放内存return true;
}
3.2.4 特点
  • 优点:
    • 支持双向遍历,可快速找到前驱节点
    • 插入 / 删除操作更安全(避免单向链表的 “断链” 风险)
  • 缺点:
    • 结构更复杂,占用内存更多
    • 操作需同时维护两个指针域

3.3 循环链表

3.3.1 定义

循环链表是首尾相连的链表,分为单循环链表双循环链表

  • 单循环链表:尾节点的next指向头节点
  • 双循环链表:头节点的prior指向尾节点,尾节点的next指向头节点

逻辑结构(单循环链表)head -> Node1 -> Node2 -> ... -> Node(n) -> head

3.3.2 核心特点
  • 判空条件:头节点的next是否指向自身(单循环链表)
  • 遍历终止条件:是否回到头节点
  • 合并操作:可通过修改首尾节点的指针实现 (O(1)) 时间复杂度合并
3.3.3 单循环链表初始化
// 初始化单循环链表(带头节点)
bool InitCircList(LinkList *L) {*L = (LNode *)malloc(sizeof(LNode));if (*L == NULL) return false;(*L)->next = *L;  // 头节点指针指向自身return true;
}
3.3.4 遍历操作(单循环链表)
void TraverseCircList(LinkList L) {LNode *p = L->next;  // p指向第一个节点while (p != L) {      // 未回到头节点时继续遍历printf("%d ", p->data);p = p->next;}printf("\n");
}

4. 顺序表 vs 链表 对比

特性顺序表链表
存储方式连续内存空间离散内存空间,指针连接
随机访问支持(时间复杂度 (O(1)))不支持(需遍历,(O(n)))
插入 / 删除平均 (O(n))(移动元素)平均 (O(n))(查找节点)
内存利用率高(无额外指针)低(指针占用空间)
适用场景频繁访问、固定长度场景频繁插入 / 删除、动态长度场景

总结

  • 若需要高效查询,选顺序表;
  • 若需要灵活增删,选链表;
  • 循环链表适合环形结构场景(如约瑟夫环问题);
  • 双链表适合双向遍历需求(如文件历史记录)。

------- | --------------------------- | ----------------------------- |
| 存储方式 | 连续内存空间 | 离散内存空间,指针连接 |
| 随机访问 | 支持(时间复杂度 (O(1))) | 不支持(需遍历,(O(n))) |
| 插入 / 删除 | 平均 (O(n))(移动元素) | 平均 (O(n))(查找节点) |
| 内存利用率 | 高(无额外指针) | 低(指针占用空间) |
| 适用场景 | 频繁访问、固定长度场景 | 频繁插入 / 删除、动态长度场景 |

总结

  • 若需要高效查询,选顺序表;
  • 若需要灵活增删,选链表;
  • 循环链表适合环形结构场景(如约瑟夫环问题);
  • 双链表适合双向遍历需求(如文件历史记录)。

相关文章:

数据结构:线性表的基本操作与链式表达

个人主页 文章专栏 成名之作——赛博算命之梅花易数的Java实现 陆续回三中&#xff0c;忘回漏回滴滴~感谢各位大佬的支持 一.线性表的定义和基本操作 1.1定义 线性表是具有相同数据类型的n个数据元素的有序数列&#xff0c;n为表长 第一个元素叫表头元素&#xff0c;除了他…...

C++:设计模式--工厂模式

更多内容&#xff1a;XiaoJ的知识星球 目录 1.简单工厂模式1.1 简单工厂1.2 实现步骤1.3 实现代码1.4 优缺点 2.工厂模式2.1 工厂模式2.2 实现步骤2.3 实现代码2.4 优缺点 3.抽象工厂模式3.1 抽象工厂模式3.2 实现步骤3.3 实现代码3.4 优缺点 1.简单工厂模式 . 1.1 简单工厂 …...

【前端优化】使用speed-measure-webpack-plugin分析前端运行、打包耗时,优化项目

记录下 项目安装speed-measure-webpack-plugin 打包分析&#xff1a; 修改vue.config.js文件 speed-measure-webpack-plugin进行构建速度分析&#xff0c;需要包裹整个 configureWebpack 配置 const originalConfig {publicPath: /,assetsDir: assets,parallel: true,devS…...

国产化Excel处理组件Spire.XLS教程:如何使用 C# 将 Excel(XLS 或 XLSX)文件转换为 PDF

Excel 是常见的数据处理与呈现工具&#xff0c;但直接共享 Excel 文件可能面临格式错乱、兼容性不足或数据泄露的风险。为了保证文档在不同平台和终端上的稳定展示&#xff0c;开发者常常需要将 Excel 文件转换为 PDF 格式。 本文将详细介绍如何使用 C#和.NET Excel 库——Spi…...

B3623 枚举排列(递归实现排列型枚举)

B3623 枚举排列&#xff08;递归实现排列型枚举&#xff09; - 洛谷 题目描述 今有 n 名学生&#xff0c;要从中选出 k 人排成一列拍照。 请按字典序输出所有可能的排列方式。 输入格式 仅一行&#xff0c;两个正整数 n,k。 输出格式 若干行&#xff0c;每行 k 个正整数…...

vue-08(使用slot进行灵活的组件渲染)

使用slot进行灵活的组件渲染 作用域slot是 Vue.js 中的一种强大机制&#xff0c;它允许父组件自定义子组件内容的呈现。与仅向下传递数据的常规 props 不同&#xff0c;作用域 slot 为父级提供了一个模板&#xff0c;然后子级可以填充数据。这提供了高度的灵活性和可重用性&am…...

Fine Pruned Tiled Light Lists(精细删减的分块光照列表)

概括 在这篇文章&#xff0c; 我将介绍一种Tiled Light 变体&#xff0c;主要针对AMD Graphics Core Next&#xff08;GCN&#xff09;架构进行优化&#xff0c;我们的方法应用于游戏 古墓丽影:崛起 中&#xff0c;特别是我们在通过光列表生成和阴影贴图渲染之间交错进行异步计…...

2025-5-29-C++ 学习 字符串(3)

字符串 2025-5-29-C 学习 字符串&#xff08;3&#xff09;P3741 小果的键盘题目背景题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 输入输出样例 #2输入 #2输出 #2 输入输出样例 #3输入 #3输出 #3 输入输出样例 #4输入 #4输出 #4 输入输出样例 #5输入 #5输出 #5 说明…...

openresty+lua+redis把非正常访问的域名加入黑名单

一、验证lua geoIp2是否缺少依赖 1、执行命令 /usr/local/openresty/bin/opm get anjia0532/lua-resty-maxminddb 执行安装命令报错,缺少Digest/MD5依赖 2、Digest/MD5依赖 yum -y install perl-Digest-MD5 GeoIP2 lua库依赖动态库安装&#xff0c;lua库依赖libmaxminddb实…...

使用Mathematica绘制随机多项式的根

使用ListPlot和NSolve直接绘制&#xff1a; (*返回系数为r和s之间整数的n次随机多项式*) eq[n_, r_, s_] : RandomInteger[{r, s}, {n}] . Array[Power[x, # - 1] &, n] (*返回给定随机多项式的根所对应的笛卡尔坐标*) sol[n_, r_, s_] : {Re[#], Im[#]} & / (x /.…...

IEEE PRMVAI 2025 WS 26:计算机视觉前沿 Workshop 来袭!

宝子们&#xff0c;搞计算机视觉和深度学习的看过来啦&#xff01;&#x1f389; 2025 年 IEEE 第三届模式识别、机器视觉和人工智能国际会议里&#xff0c;Workshop 26 简直是科研宝藏地&#xff01; 这次 Workshop 聚焦 “Deep learning - based low - level models for comp…...

360浏览器设置主题

设置默认主题&#xff1a; 1.右上角有个皮肤按钮 进来后&#xff0c;右边有个回复默认皮肤按钮。 换成彩色皮肤后&#xff0c;找按钮不太好找了。...

最卸载器——Geek Uninstaller 使用指南

Geek Uninstaller 是一款轻量级的第三方卸载工具&#xff0c;专为 Windows 系统设计&#xff0c;提供比系统默认卸载器更彻底的应用清除能力。它体积小、绿色免安装&#xff0c;使用起来简单直观&#xff0c;但功能却不含糊。 一、为什么要用 Geek Uninstaller&#xff1f; Wi…...

leetcode216.组合总和III:回溯算法中多条件约束下的状态管理

一、题目深度解析与组合约束条件 题目描述 找出所有相加之和为n的k个数的组合&#xff0c;且满足以下条件&#xff1a; 每个数只能使用一次&#xff08;范围为1到9&#xff09;所有数字均为唯一的正整数组合中的数字按升序排列 例如&#xff0c;当k3&#xff0c;n9时&#…...

应急响应靶机-web3-知攻善防实验室

题目&#xff1a; 1.攻击者的两个IP地址 2.攻击者隐藏用户名称 3.三个攻击者留下的flag 密码&#xff1a;yj123456 解题&#xff1a; 1.攻击者的两个IP地址 一个可能是远程&#xff0c;D盾&#xff0c;404.php,192.168.75.129 找到远程连接相关的英文,1149代表远程连接成功…...

【基于SpringBoot的图书购买系统】Redis中的数据以分页的形式展示:从配置到前后端交互的完整实现

引言 在当今互联网应用开发中&#xff0c;高性能和高并发已经成为系统设计的核心考量因素。Redis作为一款高性能的内存数据库&#xff0c;以其快速的读写速度、丰富的数据结构和灵活的扩展性&#xff0c;成为解决系统缓存、高并发访问等场景的首选技术之一。在图书管理系统中&…...

Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程

Jupyter MCP 服务器是基于模型上下文协议&#xff08;Model Context Protocol, MCP&#xff09;的 Jupyter 环境扩展组件&#xff0c;它能够实现大型语言模型与实时编码会话的无缝集成。该服务器通过标准化的协议接口&#xff0c;使 AI 模型能够安全地访问和操作 Jupyter 的核心…...

PMO价值重构:从项目管理“交付机器”到“战略推手”

在数字化转型浪潮中&#xff0c;项目管理办公室&#xff08;PMO&#xff09;正经历着前所未有的角色蜕变。传统上&#xff0c;PMO往往被视为项目管理的“交付机器”&#xff0c;专注于项目的按时交付和资源分配。然而&#xff0c;随着企业对战略执行的重视&#xff0c;PMO正逐渐…...

如何成为一名优秀的产品经理

一、 夯实核心基础 深入理解智能驾驶技术栈&#xff1a; 感知&#xff1a; 摄像头、雷达&#xff08;毫米波、激光雷达&#xff09;、超声波传感器的工作原理、优缺点、融合策略。了解目标检测、跟踪、SLAM等基础算法概念。 定位&#xff1a; GNSS、IMU、高精地图、轮速计等定…...

[SLAM自救笔记0]:开端

&#x1f4cd;背景介绍 本人本硕双非&#xff0c;目前研究方向为4D毫米波雷达SLAM与多传感器融合。主攻技术栈是RIO&#xff08;Radar-Inertial Odometry&#xff09;与LIO&#xff08;LiDAR-Inertial Odometry&#xff09;。 &#x1f3af;定位方向说明 虽然研究方向偏RIO&…...

零知开源——STM32F407VET6驱动Flappy Bird游戏教程

简介 本教程使用STM32F407VET6零知增强板驱动3.5寸TFT触摸屏实现经典Flappy Bird游戏。通过触摸屏控制小鸟跳跃&#xff0c;躲避障碍物柱体&#xff0c;挑战最高分。项目涉及STM32底层驱动、图形库移植、触摸控制和游戏逻辑设计。 目录 简介 一、硬件准备 二、软件架构 三、…...

[SC]SystemC在CPU和GPU等复杂SoC验证中的应用

SystemC在CPU和GPU等复杂SoC验证中的应用 摘要:SystemC 是一种基于 C++ 的硬件描述和仿真语言,广泛用于系统级设计和验证,特别是在 CPU 和 GPU 等复杂 SoC (System on Chip) 的验证工作中。通过 SystemC,你可以构建硬件模块、定义时序行为、进行系统级仿真,并与 UV…...

鸿蒙OSUniApp导航栏组件开发:打造清新简约的用户界面#三方框架 #Uniapp

UniApp 开发实战&#xff1a;打造符合鸿蒙设计风格的日历活动安排组件 在移动应用开发中&#xff0c;日历和活动安排是非常常见的需求。本文将详细介绍如何使用 UniApp 框架开发一个优雅的日历活动安排组件&#xff0c;并融入鸿蒙系统的设计理念&#xff0c;实现一个既美观又实…...

力扣HOT100之动态规划:300. 最长递增子序列

这道题之前刷代码随想录的时候也刷过&#xff0c;现在又给忘完了。自己尝试着写了一下&#xff0c;发现怎么写都写不对&#xff0c;直接去看视频了。。我自己写的时候的定义是&#xff1a;考虑下标0 ~ i范围内索赔能取到的最长严格递增子序列的长度&#xff0c;后面发现在写递推…...

EEPROM库详解

EEPROM EEPROM 地址空间&#xff1a; 每个字节有唯一地址&#xff08;从 0 开始&#xff09;&#xff0c;例如 ATmega328P 的地址范围是 0~1023&#xff08;共 1KB&#xff09;。不同型号的 Arduino 板 EEPROM 大小不同&#xff08;如 Mega2560 为 4KB&#xff0c;地址 0~409…...

JDK21深度解密 Day 10:微服务架构适配JDK21

【JDK21深度解密 Day 10】微服务架构适配JDK21 引言:百万并发时代的微服务进化 作为"JDK21深度解密"系列的第10天,今天我们聚焦微服务架构在JDK21时代的技术跃迁。Java语言历史上最大的一次并发模型革新——虚拟线程(Virtual Threads),正在重塑微服务架构的底…...

Java并发编程实战 Day 2:线程安全与synchronized关键字

【Java并发编程实战 Day 2】线程安全与synchronized关键字 开篇 欢迎来到《Java并发编程实战》系列的第二天&#xff01;在第一天中&#xff0c;我们学习了Java并发编程的基础知识以及线程模型的核心概念。今天我们将继续深入探讨并发编程中的关键问题——线程安全&#xff0…...

在win10/11下Node.js安装配置教程

下载安装 官网链接https://nodejs.org/zh-cn 下载好以后双击打开&#xff0c;点击下一步 勾选&#xff0c;然后下一步 选择路径、下一步 下一步 配置环境 找到我们安装的文件夹&#xff0c;创建两个文件夹 node_global node_cache 在CMD中配置路径 npm config set p…...

飞致云开源社区月度动态报告(2025年5月)

自2023年6月起&#xff0c;中国领先的开源软件公司飞致云以月度为单位发布《飞致云开源社区月度动态报告》&#xff0c;旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况&#xff0c;以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源运营数据概览&…...

压缩包方式在Linux和Windows下安装mongodb

目录 安装流程安装实例1. Linux安装2. Windows安装 总结 安装流程 zip方式安装 优点&#xff1a;自定义性较高&#xff0c;可以自己控制数据、日志等文件的位置 1、下载安装包 2、解压安装包 3、创建各类文件路径 4、配置conf文件 5、使用自定义配置文件启动 安装实例 1. Li…...