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

数据结构全解析:从线性到非线性,优缺点与应用场景深度剖析

1. 线性数据结构

(1)数组(Array)(适合静态数据)

优点

  1. 随机访问高效:通过索引可以直接访问元素,时间复杂度为 O(1)。

  2. 内存连续:数组在内存中是连续存储的,缓存友好,访问速度快。

  3. 简单易用:实现简单,适合存储固定大小的数据。

缺点

  1. 固定大小:数组的大小通常是固定的,动态调整需要重新分配内存,效率较低。

  2. 插入和删除效率低:在数组中插入或删除元素需要移动其他元素,时间复杂度为 O(n)。

  3. 内存浪费:如果数组未完全使用,会造成内存浪费。

代码示例:

#include <iostream>
using namespace std;int main() {int arr[5] = {1, 2, 3, 4, 5}; // 静态数组cout << "Element at index 2: " << arr[2] << endl; // 随机访问// 插入元素(低效)for (int i = 4; i >= 2; i--) {arr[i + 1] = arr[i];}arr[2] = 10; // 在索引2处插入10// 打印数组for (int i = 0; i < 5; i++) {cout << arr[i] << " ";}return 0;
}

(2)链表(Linked List)(适合动态数据)

优点

  1. 动态大小:链表可以动态分配内存,无需预先指定大小。

  2. 插入和删除高效:在已知节点的情况下,插入和删除操作的时间复杂度为 O(1)。

  3. 内存利用率高:链表按需分配内存,不会造成内存浪费。

缺点

  1. 随机访问效率低:链表不支持随机访问,查找元素需要遍历,时间复杂度为 O(n)。

  2. 额外空间开销:链表需要额外的指针空间来存储节点之间的关系。

  3. 缓存不友好:链表节点在内存中不连续,访问速度较慢。

代码示例:

#include <iostream>
using namespace std;struct Node {int data;Node* next;
};void printList(Node* head) {while (head != nullptr) {cout << head->data << " ";head = head->next;}cout << endl;
}int main() {Node* head = new Node{1, nullptr};head->next = new Node{2, nullptr};head->next->next = new Node{3, nullptr};// 插入元素Node* newNode = new Node{10, head->next};head->next = newNode;printList(head); // 输出: 1 10 2 3return 0;
}

(3)栈(Stack)

优点

  1. 简单高效:栈只允许在栈顶进行操作,实现简单,插入和删除的时间复杂度为 O(1)。

  2. 适合特定问题:栈非常适合解决递归问题、括号匹配、表达式求值等问题。

缺点

  1. 功能受限:栈只能在一端进行操作,无法直接访问中间元素。

  2. 容量限制:栈的容量通常是固定的(如果使用数组实现),动态调整需要额外开销。

代码示例:

#include <iostream>
#include <stack>
using namespace std;int main() {stack<int> s;s.push(10); // 入栈s.push(20);s.push(30);cout << "Top element: " << s.top() << endl; // 访问栈顶s.pop(); // 出栈cout << "Stack size: " << s.size() << endl; // 栈大小return 0;
}

(4)队列(Queue)

优点

  1. 先进先出(FIFO):队列适合处理需要按顺序处理的数据,如任务调度、缓冲区等。

  2. 高效操作:在队尾插入和队头删除的时间复杂度为 O(1)。

缺点

  1. 功能受限:队列只能在一端插入,另一端删除,无法直接访问中间元素。

  2. 容量限制:队列的容量通常是固定的(如果使用数组实现),动态调整需要额外开销。

代码示例:

#include <iostream>
#include <queue>
using namespace std;int main() {queue<int> q;q.push(10); // 入队q.push(20);q.push(30);cout << "Front element: " << q.front() << endl; // 访问队头q.pop(); // 出队cout << "Queue size: " << q.size() << endl; // 队列大小return 0;
}

(5)双端队列(Deque)

优点

  1. 灵活操作:双端队列允许在两端进行插入和删除操作,功能更强大。

  2. 高效操作:在两端插入和删除的时间复杂度为 O(1)。

缺点

  1. 实现复杂:相比栈和队列,双端队列的实现更复杂。

  2. 容量限制:如果使用数组实现,容量通常是固定的,动态调整需要额外开销。

代码示例:

#include <iostream>
#include <deque>
using namespace std;int main() {deque<int> dq;// 在队头和队尾插入元素dq.push_front(10); // 队头插入dq.push_back(20);  // 队尾插入dq.push_back(30);cout << "Front element: " << dq.front() << endl; // 访问队头cout << "Back element: " << dq.back() << endl;   // 访问队尾// 删除队头和队尾元素dq.pop_front(); // 删除队头dq.pop_back();  // 删除队尾cout << "Size of deque: " << dq.size() << endl; // 输出: 1return 0;
}

2. 非线性数据结构

(1)树(Tree)

优点

  1. 层次结构:树适合表示具有层次关系的数据,如文件系统、组织结构等。

  2. 高效搜索:二叉搜索树(BST)的搜索、插入和删除操作的时间复杂度为 O(log n)。

  3. 动态调整:树可以动态调整结构,适合频繁插入和删除的场景。

缺点

  1. 复杂度高:树的实现和操作比线性结构复杂。

  2. 平衡问题:如果树不平衡(如退化为链表),性能会下降,搜索时间复杂度退化为 O(n)。

  3. 额外空间开销:树需要额外的指针空间来存储节点之间的关系。

代码示例:

#include <iostream>
using namespace std;struct TreeNode {int data;TreeNode* left;TreeNode* right;TreeNode(int val) : data(val), left(nullptr), right(nullptr) {}
};// 插入节点
TreeNode* insert(TreeNode* root, int val) {if (root == nullptr) {return new TreeNode(val);}if (val < root->data) {root->left = insert(root->left, val);} else {root->right = insert(root->right, val);}return root;
}// 中序遍历(左-根-右)
void inorderTraversal(TreeNode* root) {if (root == nullptr) return;inorderTraversal(root->left);cout << root->data << " ";inorderTraversal(root->right);
}int main() {TreeNode* root = nullptr;root = insert(root, 10);root = insert(root, 5);root = insert(root, 15);root = insert(root, 3);root = insert(root, 7);cout << "Inorder Traversal: ";inorderTraversal(root); // 输出: 3 5 7 10 15return 0;
}

(2)二叉树(Binary Tree)

优点

  1. 简单高效:二叉树的结构简单,适合实现二叉搜索树、堆等数据结构。

  2. 搜索效率高:在平衡的情况下,搜索、插入和删除的时间复杂度为 O(log n)。

缺点

  1. 平衡问题:如果二叉树不平衡,性能会下降。

  2. 空间开销:需要额外的指针空间来存储左右子节点。

高级数据结构  约等于 基于二叉树的数据结构

代码示例:

#include <iostream>
using namespace std;struct TreeNode {int data;TreeNode* left;TreeNode* right;
};void inorderTraversal(TreeNode* root) {if (root == nullptr) return;inorderTraversal(root->left);cout << root->data << " ";inorderTraversal(root->right);
}int main() {TreeNode* root = new TreeNode{10, nullptr, nullptr};root->left = new TreeNode{5, nullptr, nullptr};root->right = new TreeNode{15, nullptr, nullptr};cout << "Inorder Traversal: ";inorderTraversal(root); // 输出: 5 10 15return 0;
}

(3)图(Graph)

优点

  1. 表示复杂关系:图适合表示多对多的关系,如社交网络、地图等。

  2. 灵活性强:图可以是有向的或无向的,可以带权或不带权。

缺点

  1. 实现复杂:图的实现和操作比线性结构和树更复杂。

  2. 空间开销大:图的存储(如邻接矩阵或邻接表)需要较大的空间。

  3. 算法复杂度高:图的遍历和搜索算法(如 DFS、BFS)的时间复杂度较高。

代码示例:

#include <iostream>
#include <vector>
using namespace std;class Graph {int V; // 顶点数vector<vector<int>> adj; // 邻接表public:Graph(int V) : V(V), adj(V) {}void addEdge(int u, int v) {adj[u].push_back(v);adj[v].push_back(u); // 无向图}void printGraph() {for (int i = 0; i < V; i++) {cout << "Vertex " << i << ": ";for (int j : adj[i]) {cout << j << " ";}cout << endl;}}
};int main() {Graph g(4);g.addEdge(0, 1);g.addEdge(0, 2);g.addEdge(1, 3);g.printGraph();return 0;
}

(4)堆(Heap)

优点

  1. 高效获取极值:堆可以在 O(1) 时间内获取最大值或最小值。

  2. 适合优先级队列:堆适合实现优先级队列,用于任务调度等场景。

  3. 动态调整:堆可以动态调整结构,插入和删除的时间复杂度为 O(log n)。

缺点

  1. 功能受限:堆只能快速获取极值,无法高效访问其他元素。

  2. 实现复杂:堆的实现比线性结构复杂。

代码示例:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;class MaxHeap {vector<int> heap;void heapifyUp(int index) {while (index > 0) {int parent = (index - 1) / 2;if (heap[parent] < heap[index]) {swap(heap[parent], heap[index]);index = parent;} else {break;}}}void heapifyDown(int index) {int size = heap.size();while (true) {int left = 2 * index + 1;int right = 2 * index + 2;int largest = index;if (left < size && heap[left] > heap[largest]) {largest = left;}if (right < size && heap[right] > heap[largest]) {largest = right;}if (largest != index) {swap(heap[index], heap[largest]);index = largest;} else {break;}}}public:void push(int val) {heap.push_back(val);heapifyUp(heap.size() - 1);}void pop() {if (heap.empty()) return;heap[0] = heap.back();heap.pop_back();heapifyDown(0);}int top() {if (heap.empty()) throw runtime_error("Heap is empty");return heap[0];}bool empty() {return heap.empty();}
};int main() {MaxHeap heap;heap.push(10);heap.push(30);heap.push(20);heap.push(5);cout << "Max element: " << heap.top() << endl; // 输出: 30heap.pop();cout << "Max element after pop: " << heap.top() << endl; // 输出: 20return 0;
}

(5)哈希表(Hash Table)(散列表)

优点

  1. 高效查找:哈希表的查找、插入和删除操作的平均时间复杂度为 O(1)。

  2. 适合大规模数据:哈希表适合存储和查找大规模数据。

缺点

  1. 哈希冲突:哈希冲突(不同的数据,计算出来的哈希值可能相同,从而导致冲突)会影响性能,需要额外的处理(如链地址法或开放地址法)。

  2. 空间开销大:哈希表需要较大的空间来减少冲突。

  3. 无序性:哈希表中的元素是无序的,无法直接按顺序访问。

雪崩效应:

  • 如果两个数据有一点不同,它们的哈希值就会差别很大,从而不容易冲突。
  • 哈希表的空间效率和时间效率是矛盾的,使用的空间越大,越容易设计哈希函数。
  • 如果空间很小,再好的哈希函数也会产生冲突。
  • 在使用哈希表时,需要在空间和时间效率上取得平衡。

代码示例:

#include <iostream>
#include <unordered_map>
using namespace std;int main() {unordered_map<string, int> hashMap;hashMap["Alice"] = 25;hashMap["Bob"] = 30;cout << "Age of Alice: " << hashMap["Alice"] << endl; // 输出: 25cout << "Age of Bob: " << hashMap["Bob"] << endl; // 输出: 30return 0;
}

总结

  • 线性数据结构:适合处理顺序关系明确的数据,操作简单高效,但功能受限。

  • 非线性数据结构:适合处理复杂关系的数据,功能强大,但实现和操作复杂度较高。

相关文章:

数据结构全解析:从线性到非线性,优缺点与应用场景深度剖析

1. 线性数据结构 &#xff08;1&#xff09;数组&#xff08;Array&#xff09;&#xff08;适合静态数据&#xff09; 优点&#xff1a; 随机访问高效&#xff1a;通过索引可以直接访问元素&#xff0c;时间复杂度为 O(1)。 内存连续&#xff1a;数组在内存中是连续存储的&…...

JAVA面试_进阶部分_Ibatis与Hibernate的区别

一、 hibernate与ibatis之间的比较&#xff1a; hibernate 是当前最流行的o/r mapping框架&#xff0c;它出身于sf.NET&#xff0c;现在已经成为jboss的一部分了。 ibatis 是另外一种优秀的o/r mapping框架&#xff0c;目前属于apache的一个子项目了。 相对hibernate“o/r”而…...

页面刷新时 选择值或输入值不丢失

视图完整代码 <body><h1>查询员工信息</h1><form action"SearchForm" style"text-align: center;">所属部门&#xff1a;<select name"ddlDept" id"ddlDept"><option value"">--请选择…...

通用人工智能(AGI):定义、挑战与未来展望

文章目录 引言AGI的定义与特征实现AGI的挑战AGI与ASI的区别AGI的潜在影响结语 引言 通用人工智能&#xff08;Artificial General Intelligence, AGI&#xff09;是人工智能领域的终极目标&#xff0c;代表着一种能够执行人类所有智力任务的系统。与当前的任务导向型人工智能&…...

考研数学复习之定积分定义求解数列极限(超详细教程)

定积分求解数列极限是一种将数列极限问题转化为定积分问题进行求解的方法。这种方法通常适用于那些和式数列极限,其主要思路是将数列的项看作是某个函数在某一点或某一段区间上的取值或某种形式的和,然后利用定积分的性质和计算方法,来求解这类数列的极限。 定积分定义 设函数在…...

【redis】应用场景:共享会话和手机验证码

文章目录 共享会话实现思路 手机验证码实现思路伪代码实现生成验证码验证验证码 共享会话 实现思路 如果每个应用服务器&#xff0c;维护自己的会话数据&#xff0c;此时彼此之间胡共享&#xff0c;用户请求访问到不同的服务器上&#xff0c;就可能会出现一些不能正确处理的情…...

vscode带参数调试

转载&#xff1a;【深度学习环境】VSCode 调试python 带args参数的程序_vscode args-CSDN博客 ctrlshiftf全局搜索...

音视频软件工程师面试题

一、基础知识 编解码相关 H.264 和 H.265(HEVC)的主要区别是什么?视频编解码的基本流程是什么?关键技术有哪些?音频编解码(如 AAC、MP3、Opus)的区别和应用场景?什么是 B 帧、P 帧、I 帧?它们的作用是什么? 流媒体协议RTMP、HTTP-FLV、HLS、WebRTC 的区别和应用场景…...

mac用docker跑sql server

网上的各个文章跑下来都有一些问题&#xff0c;记录一下我成功跑起来的过程。 省略Docker安装 修改docker源&#xff1a; {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental"…...

【技海登峰】Kafka漫谈系列(八)Controller:Zookeeper模式与KRaft模式

【技海登峰】Kafka漫谈系列(八)Controller:Zookeeper模式与KRaft模式 在上述学习过程中,我们知道完整的Kafka集群架构中包含了Broker、Topic、Partition、Replica、Producer、Consumer等众多组件,它们之间的关系又非常复杂:比如Topic由多个Partition组成、Partition又包含…...

c# txt文档的实时显示,用来查看发送接收指令

通讯历史按钮 private void uiButton1_Click(object sender, EventArgs e){try{logf new logF();logf.Show();}catch (Exception){throw;} }主页面关闭函数&#xff08;点击保存就为true true就不删除&#xff09; private void page1_FormClosed(object sender, FormClos…...

LabVIEW变频器谐波分析系统

随着工业自动化的发展&#xff0c;变频器在电力、机械等领域的应用日益广泛&#xff0c;但谐波问题直接影响系统效率与稳定性。传统谐波检测设备&#xff08;如Norma5000&#xff09;精度虽高&#xff0c;但价格昂贵且操作复杂&#xff0c;难以适应现场快速检测需求。本项目基于…...

搜广推校招面经四十三

快手主站推荐算法 一、因果推荐和偏差消除在推荐系统中的应用 1.1. 因果推荐 因果推荐&#xff08;Causal Recommendation&#xff09;是指利用因果推断的方法来理解和优化推荐系统的行为。不同于传统的基于关联分析的推荐方法&#xff0c;因果推荐旨在揭示用户行为背后的真…...

Android打造易用的 WiFi 工具类:WifiUtils 封装实践

Android在全局范围内使用WifiUtils工具类&#xff0c;我们可以将其设计为一个单例&#xff0c;并通过Application类进行初始化。这样可以确保在整个应用程序中只有一个WifiUtils实例&#xff0c;并且可以在任何地方访问它。以下是实现全局使用的步骤和代码示例&#xff1a; 记…...

010-Catch2

Catch2 一、框架简介 Catch2 是一个基于 C 的现代化单元测试框架&#xff0c;支持 TDD&#xff08;测试驱动开发&#xff09;和 BDD&#xff08;行为驱动开发&#xff09;模式。其核心优势在于&#xff1a; 单头文件设计&#xff1a;v2.x 版本仅需包含 catch.hpp 即可使用自然…...

Kubernetes Pod的生命周期概述

概述 在Kubernetes的世界中&#xff0c;Pod作为最基本的应用进程单元, 其生命周期也代表着应用进程的整个生命周期。了解其生命周期是掌握云计算中一个计算单元如何在Kubernetes世界周转的基石。 本期文章主要针对于Pod的生命周期的不同阶段进行介绍&#xff0c;让读者能够对…...

Linux服务器使用docker离线安装MySQL

今天记录一下&#xff0c;Linux的docker安装MySQL镜像的步骤&#xff0c;以后安装任何镜像都可以仿照本篇文章。 因为我有一台云服务器是联网的&#xff0c;所有我的步骤就是把需要的镜像都在云服务器下载好&#xff0c;再保存下来&#xff0c;传到本地的不联网服务器。 其实我…...

软件安全分析与应用之Web安全(二)

2.3 第 3 题 Web 安全 2.3.1 撰写安装报告 要求录屏 &#xff08;1&#xff09;Vmware&#xff1b; 首先找到.iso镜像 点击下一步我接受 下一步 下一步 下一步 下一步 点击升级等待完成安装 &#xff08;2&#xff09;kali-linux 克隆kali 等待安装 克隆成功 然后开始启…...

CEH与OSCP:网络安全认证对比分析

在网络安全领域&#xff0c;渗透测试被视为至关重要的一环&#xff0c;帮助企业检测和修复系统漏洞。为提升行业标准&#xff0c;许多认证应运而生&#xff0c;其中CEH和OSCP作为行业认可度较高的认证&#xff0c;广泛被网络安全从业者选择。尽管这两者都涉及渗透测试领域&…...

如何通过强化学习RL激励大型语言模型(LLMs)的搜索能力?R1-Searcher来了

R1-Searcher,这是一种使用 RL 增强 LLM 的 RAG 能力的新框架,通过两阶段强化学习(RL)实现LLM在推理过程中自主调用外部检索系统,突破模型固有知识限制。 为了通过探索外部检索环境来激励大语言模型的搜索能力,设计了一种基于结果的两阶段强化学习方法,通过定制的奖励设计…...

AI重构电商内容体系:企业如何突破生产、管理、分发三重门?

在电商内容需求激增的2025年&#xff0c;AI技术已成为破解内容生产低效、管理混乱、分发粗放的核心工具。特赞科技服务案例显示&#xff0c;企业通过AIGC数字资产管理方案可实现效率300%提升。 内容科技驱动电商新范式 电商内容已从"商品说明书"演变为体验经济载体…...

版本控制器Git(1)

文章目录 前言一、初识Git问题引入解决方案注意事项 二、Git安装三、Git配置与基本操作Git创建Git配置用户名称和地址认识工作区、暂存区、版本库添加文件到仓库添加文件到暂存区提交暂存区内容到本地仓库 查看提交历史 四、Git 暂存区、HEAD、对象库及文件Git内部结构概览查看…...

VMware安装Windows server 2016

1、新建虚拟机&#xff0c;选择自定义模式 2、选择兼容性 4、命名虚拟机 5、固件类型 EFI 虚拟磁盘类型&#xff0c;不同电脑推荐的类型不同&#xff0c;用默认的就行 删除声卡和打印机 检查网络配置 选择本地的Windows server 2016的系统镜像&#xff0c;系统镜像可以去Window…...

【编程向导】-JavaScript-基础语法-类型检测

类型检测 类型检测的方法&#xff1a; typeofinstanceofObject.prototype.toStringconstructor typeof typeof 操作符返回一个字符串&#xff0c;表示未经计算的操作数的类型。 typeof undefined; // "undefined" typeof null; // "object" typeof 10…...

Python并发编程实战:突破GIL限制的工程化解决方案

一、GIL的本质与影响范围 **全局解释器锁(Global Interpreter Lock,GIL)**是CPython解释器的核心机制,其本质是一个互斥锁,保证同一时刻只有一个线程执行Python字节码。这一设计使得: ✅ 简化内存管理:避免多线程竞争对象引用计数 ❌ 限制多核性能:CPU密集型多线程程序…...

FPGA学习篇——Verilog学习之全加器的实现

跟着野火的视频学习了一下全加器的实现~ 1 半加器和全加器原理 首先&#xff0c;解释一下为什么全加器的 公式还可以写成以下形式&#xff1a; &#xff08;1&#xff09;首先我们要明白&#xff1a; 因为由真值表来看&#xff0c;他们是不相同的&#xff08;当ab1时&#xff…...

嵌入式学习L6网络编程D4多进程并发

多线程 客户端 /*./client serv_ip serv_port */ #include "net.h"void usage (char *s) {printf ("\n%s serv_ip serv_port", s);printf ("\n\t serv_ip: server ip address");printf ("\n\t serv_port: server port(>5000)\n\n"…...

四层协议攻防手册:从SYN Flood到UDP反射的深度防御

一、四层协议攻击类型与特征 攻击类型协议层特征SYN FloodTCP大量半开连接&#xff0c;SYN_RECV状态堆积UDP反射放大UDP小请求包触发大响应&#xff08;如NTP、DNS响应&#xff09;TCP分片攻击TCP发送异常分片耗尽重组资源连接耗尽攻击TCP建立大量空闲连接占用端口资源 二、TC…...

hive开窗函数

进入hive [root@hadoop01 conf]# hive ... hive (default)> show databases; OK database_name default Time taken: 0.528 seconds, Fetched: 1 row(s)创建数据库 hive (default)> create database test; hive (default)> use test;创建表 字段名字段字段类型学号S…...

【技术白皮书】内功心法 | 第二部分 | Telnet远程登录的工作原理

远程登录的工作原理 背景介绍远程登录远程登录的服务模式远程登录服务的实现基础远程登录服务的运行模式Telnet服务为什么不被操作系统管理 Telnet协议的原理网络虚终端&#xff08;NVT&#xff09;结束标示NVT的原理NVT屏蔽差异 背景介绍 绝大多数计算机都是运行多用户操作系…...

AnyPlace助力Franka突破物体形状与配置多样性挑战

物体几何形状与放置配置多样性的挑战 在机器人操作领域&#xff0c;物体放置一直是一个复杂且富有挑战性的任务。由于物体的几何形状和放置配置的多样性&#xff0c;实现稳健且可推广的物体放置变得尤为困难。 传统的机器人放置方法往往依赖于大量的特定任务演示&#xff0c;…...

【工控】线扫相机小结 第五篇

背景介绍 线扫相机通过光栅尺的脉冲触发&#xff0c; 我在调试线扫过程中&#xff0c;发现图像被拉伸&#xff0c;预设调节分配器。图像正常后&#xff0c;我提高的相机的扫描速度&#xff08;Y轴动的更快了&#xff09;。 动的更快的发现&#xff0c;图像变短了&#xff08;以…...

【Prometheus】层层解析prometheus如何监控k8s核心组件

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...

泄露测试仪CTS的Sentinel I28使用

前言:本文档主要讨论CTS Sentinel I28的使用方法,设备图片如下: 具体文档可从下面链接下载: https://download.csdn.net/download/qq_34047402/90471262 泄露测试仪CTS的SentinelI28使用资源-CSDN文库 [注意] 调压方式,若选择机械式调压,那么测试的压力值只能有1个,…...

Python字典,集合

一.字典 在 Python 中&#xff0c;字典&#xff08;dict&#xff09;是一种非常重要且常用的数据结构&#xff0c;它用于存储键值对. 如下为字典的创建,打印键,打印值,和清空的操作 二.集合 在 Python 中&#xff0c;集合&#xff08;set&#xff09;是一种无序且唯一的数据…...

【数据分析大屏】基于Django+Vue汽车销售数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅

目录 一、项目背景 二、项目创新点 三、项目功能 四、开发技术介绍 五、项目功能展示 六、权威视频链接 一、项目背景 汽车行业数字化转型加速&#xff0c;销售数据多维分析需求激增。本项目针对传统报表系统交互性弱、实时性差等痛点&#xff0c;基于DjangoVue架构构建…...

Ubuntu用户安装cpolar内网穿透

前言 Cpolar作为一款体积小巧却功能强大的内网穿透软件&#xff0c;不仅能够在多种环境和应用场景中发挥巨大作用&#xff0c;还能适应多种操作系统&#xff0c;应用最为广泛的Windows、Mac OS系统自不必多说&#xff0c;稍显小众的Linux、树莓派、群辉等也在起支持之列&#…...

关于sqlalchemy的ORM的使用

关于sqlalchemy的ORM的使用 二、创建表三、使用数据表、查询记录 二、创建表 使用Mapped来映射字段 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker,Mapped,mapped_columnBase declarative_base() engine create_engin…...

C 语言分支与循环:构建程序逻辑的基石

在 C 语言的世界里&#xff0c;分支和循环结构是编程的核心内容&#xff0c;它们赋予了程序根据不同条件执行不同操作以及重复执行特定代码段的能力&#xff0c;让程序变得更加智能和高效。今天&#xff0c;我们就深入探讨 C 语言分支和循环的相关知识&#xff0c;助力大家夯实…...

J-LangChain - Agent - 编排一个 ReAct + Function Call 反应链

系列文章索引 J-LangChain 入门 介绍 j‑langchain 是一款基于 Java 的 AIGC 编排框架&#xff0c;致力于集成多种大模型&#xff08;LLM&#xff09;调用及 RAG 工具。自 1.0.8 版本起&#xff0c;我们引入了工具函数&#xff08;Function Call&#xff09;调用能力&#xf…...

Rust 之一 基本环境搭建、各组件工具的文档、源码、配置

概述 Rust 是一种强调性能、类型安全和并发性的通用编程语言。它强制执行内存安全&#xff0c;使用其特有的所有权机制&#xff0c;而无需传统的垃圾收集器。Rust 不强制执行编程范式&#xff0c;但受到函数式编程思想的影响。 最初是由 Mozilla 员工 Graydon Hoare 在 2006 年…...

详细介绍 Jupyter nbconvert 工具及其用法:如何将 Notebook 转换为 Python 脚本

nbconvert 是 Jupyter 提供的一个非常强大的工具&#xff0c;允许用户将 Jupyter Notebook 文件&#xff08;.ipynb&#xff09;转换成多种格式&#xff0c;包括 Python 脚本&#xff08;.py&#xff09;、HTML、PDF、LaTeX 等。你可以通过命令行来运行 nbconvert&#xff0c;也…...

C语言之预处理

预处理 一.头文件的包含1.1头文件的作用1.2包含头文件的方式- 包含标准库头文件- 包含用户自定义头文件 1.3嵌套文件包含 二.条件编译2.1条件编译的作用2.2条件编译的指令 三.预定义符号四.define4.1define定义常量4.2#define定义宏4.2.1定义宏时常见错误 4.3宏替换的规则4.4带…...

AcWing--869.试除法求约数

题目&#xff1a; 给定 n 个正整数 ai&#xff0c;对于每个整数 ai&#xff0c;请你按照从小到大的顺序输出它的所有约数。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一个整数 ai。 输出格式 输出共 n 行&#xff0c;其中第 i 行输出第 i 个整数 ai 的所有…...

【HeadFirst系列之HeadFirstJava】第16天之深入解析 Java 集合与泛型:高效管理数据的终极指南!(含代码实战)

Java 集合与泛型全解析&#xff1a;数据结构的奥秘&#xff08;基于 Head First Java 第 16 章&#xff09; 在 Java 开发中&#xff0c;我们经常需要存储和操作大量数据。如何高效地存储、检索和操作数据&#xff1f;如何避免数组的局限性&#xff1f;Java 集合框架&#xff…...

【从零开始学习计算机科学】操作系统(七)文件管理

【从零开始学习计算机科学】操作系统(七)文件管理 文件管理文件的逻辑结构文件的读写方式文件的物理结构与组织文件目录空闲块管理文件的共享文件的权限控制与保护文件系统的其他功能文件管理 文件管理主要涉及文件的逻辑组织和物理组织,目录的结构和管理。所谓文件管理,就…...

Stable Diffusion F.1模型全面解析

一、引言&#xff1a;生成式AI的变革与SD模型的演进 生成式AI的崛起 扩散模型&#xff08;Diffusion Model&#xff09;成为图像生成领域的主流范式&#xff0c;其通过逐步去噪过程实现高保真图像合成。Stable Diffusion&#xff08;SD&#xff09;作为开源社区标杆&#xff0c…...

基于SpringBoot的手机销售网站设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

上海利氪科技-再次续订MappingSpace

2024年6月&#xff0c;智能底盘系统方案商利氪科技完成C轮融资&#xff0c;本轮融资规模超10亿元人民币。 成立于2021年&#xff0c;利氪科技短短三年时间就已获得近20亿元融资。 利氪科技是领先的智能线控底盘系统方案商。公司聚焦新能源汽车和自动驾驶核心领域&#xff0c;依…...

go注册rpc接口

1.定义proto文件&#xff1a; syntax "proto3";package pb;service Service { rpc RPC (Request) returns (Reply) {} }message Request {string Action 1;int64 TraceID 2;string Payload 3; }message Reply {int32 Code 1;int64 TraceID 2;string Pa…...