【海贼王的数据航海:利用数据结构成为数据海洋的霸主】链表—双向链表
目录
往期
1 -> 带头+双向+循环链表(双链表)
1.1 -> 接口声明
1.2 -> 接口实现
1.2.1 -> 双向链表初始化
1.2.2 -> 动态申请一个结点
1.2.3 -> 双向链表销毁
1.2.4 -> 双向链表打印
1.2.5 -> 双向链表判空
1.2.6 -> 双向链表尾插
1.2.7 -> 双向链表尾删
1.2.8 -> 双向链表头插
1.2.9 -> 双向链表头删
1.2.10 -> 双向链表查找
1.2.11 -> 双向链表在pos的前面进行插入
1.2.12 -> 双向链表删除pos位置的节点
2 -> 顺序表和链表的区别
3 -> 完整代码
3.1 -> List.c
3.2 -> List.h
3.3 -> Test.c

往期
链表-单链表
1 -> 带头+双向+循环链表(双链表)
1.1 -> 接口声明
#pragma once#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>// 带头+双向+循环链表增删查改实现
typedef int LTDataType;typedef struct LTNode
{LTDataType data;struct LTNode* next;struct LTNode* prev;
}LTNode;// 双向链表初始化
LTNode* LTInit();// 动态申请一个结点
LTNode* BuyLTNode(LTDataType x);// 双向链表销毁
void LTDestory(LTNode* phead);// 双向链表打印
void LTPrint(LTNode* phead);// 双向链表判空
bool LTEmpty(LTNode* phead);// 双向链表尾插
void LTPushBack(LTNode* phead, LTDataType x);// 双向链表尾删
void LTPopBack(LTNode* phead);// 双向链表头插
void LTPushFront(LTNode* phead, LTDataType x);// 双向链表头删
void LTPopFront(LTNode* phead);// 双向链表查找
LTNode* LTFind(LTNode* phead, LTDataType x);// 双向链表在pos的前面进行插入
void LTInsert(LTNode* pos, LTDataType x);// 双向链表删除pos位置的节点
void LTErase(LTNode* pos);
1.2 -> 接口实现
1.2.1 -> 双向链表初始化
// 双向链表初始化
LTNode* LTInit()
{LTNode* phead = BuyLTNode(-1);phead->next = phead;phead->prev = phead;return phead;
}
1.2.2 -> 动态申请一个结点
// 动态申请一个结点
LTNode* BuyLTNode(LTDataType x)
{LTNode* newnode = (LTNode*)malloc(sizeof(LTNode));if (newnode == NULL){perror("malloc fail");return NULL;}newnode->data = x;newnode->next = NULL;newnode->prev = NULL;return newnode;
}
1.2.3 -> 双向链表销毁
// 双向链表销毁
void LTDestory(LTNode* phead)
{assert(phead);LTNode* cur = phead->next;while (cur != phead){LTNode* next = cur->next;free(cur);cur = next;}free(phead);
}
1.2.4 -> 双向链表打印
// 双向链表打印
void LTPrint(LTNode* phead)
{assert(phead);printf("guard<==>");LTNode* cur = phead->next;while (cur != phead){printf("%d<==>", cur->data);cur = cur->next;}printf("\n");
}
1.2.5 -> 双向链表判空
// 双向链表判空
bool LTEmpty(LTNode* phead)
{assert(phead);return phead->next == phead;
}
1.2.6 -> 双向链表尾插
// 双向链表尾插
void LTPushBack(LTNode* phead, LTDataType x)
{assert(phead);LTNode* tail = phead->prev;LTNode* newnode = BuyLTNode(x);tail->next = newnode;newnode->prev = tail;newnode->next = phead;phead->prev = newnode;// 复用// LTInsert(phead, x);
}
// 尾插测试
void Test1()
{LTNode* plist = LTInit();LTPushBack(plist, 1);LTPushBack(plist, 2);LTPushBack(plist, 3);LTPushBack(plist, 4);LTPushBack(plist, 5);LTPrint(plist);LTDestory(plist);plist = NULL;
}

1.2.7 -> 双向链表尾删
// 双向链表尾删
void LTPopBack(LTNode* phead)
{assert(phead);assert(!LTEmpty(phead));LTNode* tail = phead->prev;LTNode* tailPrev = tail->prev;free(tail);tailPrev->next = phead;phead->prev = tailPrev;// 复用// LTErase(phead->prev);
}
// 尾删测试
void Test2()
{LTNode* plist = LTInit();LTPushBack(plist, 1);LTPushBack(plist, 2);LTPushBack(plist, 3);LTPushBack(plist, 4);LTPushBack(plist, 5);LTPrint(plist);LTPopBack(plist);LTPrint(plist);LTPopBack(plist);LTPrint(plist);LTPopBack(plist);LTPrint(plist);LTPopBack(plist);LTPrint(plist);LTPopBack(plist);LTPrint(plist);LTDestory(plist);plist = NULL;
}

1.2.8 -> 双向链表头插
// 双向链表头插
void LTPushFront(LTNode* phead, LTDataType x)
{assert(phead);LTNode* newnode = BuyLTNode(x);newnode->next = phead->next;phead->next->prev = newnode;phead->next = newnode;newnode->prev = phead;// 复用// LTInsert(phead->next, x);
}
// 头插测试
void Test3()
{LTNode* plist = LTInit();LTPushFront(plist, 1);LTPushFront(plist, 2);LTPushFront(plist, 3);LTPushFront(plist, 4);LTPushFront(plist, 5);LTPrint(plist);LTDestory(plist);plist = NULL;
}

1.2.9 -> 双向链表头删
// 双向链表头删
void LTPopFront(LTNode* phead)
{assert(phead);assert(!LTEmpty(phead));LTNode* first = phead->next;LTNode* second = first->next;phead->next = second;second->prev = phead;free(first);// 复用// LTErase(phead->next);
}
// 头删测试
void Test4()
{LTNode* plist = LTInit();LTPushBack(plist, 1);LTPushBack(plist, 2);LTPushBack(plist, 3);LTPushBack(plist, 4);LTPushBack(plist, 5);LTPrint(plist);LTPopFront(plist);LTPrint(plist);LTPopFront(plist);LTPrint(plist);LTPopFront(plist);LTPrint(plist);LTPopFront(plist);LTPrint(plist);LTPopFront(plist);LTPrint(plist);LTDestory(plist);plist = NULL;
}

1.2.10 -> 双向链表查找
// 双向链表查找
LTNode* LTFind(LTNode* phead, LTDataType x)
{assert(phead);LTNode* cur = phead->next;while (cur != phead){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}
1.2.11 -> 双向链表在pos的前面进行插入
// 双向链表在pos的前面进行插入
void LTInsert(LTNode* pos, LTDataType x)
{assert(pos);LTNode* prev = pos->prev;LTNode* newnode = BuyLTNode(x);prev->next = newnode;newnode->prev = prev;newnode->next = pos;pos->prev = newnode;
}
// 查找插入测试
void Test5()
{LTNode* plist = LTInit();LTPushBack(plist, 1);LTPushBack(plist, 2);LTPushBack(plist, 3);LTPushBack(plist, 4);LTPushBack(plist, 5);LTPrint(plist);LTNode* pos = LTFind(plist, 3);if (pos)LTInsert(pos, 99);LTPrint(plist);LTDestory(plist);plist = NULL;
}

1.2.12 -> 双向链表删除pos位置的节点
// 双向链表删除pos位置的节点
void LTErase(LTNode* pos)
{assert(pos);LTNode* posPrev = pos->prev;LTNode* posNext = pos->next;posPrev->next = posNext;posNext->prev = posPrev;free(pos);
}
2 -> 顺序表和链表的区别
| 不同点 | 顺序表 | 链表 |
| 存储空间上 | 物理上一定连续 | 逻辑上连续,但物理上不一定连续 |
| 随机访问 | 支持O(1) | 不支持:O(N) |
| 任意位置插入或者删除元素 | 可能需要搬移元素,效率低O(N) | 只需修改指针指向 |
| 插入 | 动态顺序表,空间不够时需要扩容 | 没有容量的概念 |
| 应用场景 | 元素高效存储+频繁访问 | 任意位置插入和删除频繁 |
| 缓存利用率 | 高 | 低 |
注:缓存利用率参考存储体系结构以及局部原理性。

3 -> 完整代码
3.1 -> List.c
#include "List.h"// 双向链表初始化
LTNode* LTInit()
{LTNode* phead = BuyLTNode(-1);phead->next = phead;phead->prev = phead;return phead;
}// 动态申请一个结点
LTNode* BuyLTNode(LTDataType x)
{LTNode* newnode = (LTNode*)malloc(sizeof(LTNode));if (newnode == NULL){perror("malloc fail");return NULL;}newnode->data = x;newnode->next = NULL;newnode->prev = NULL;return newnode;
}// 双向链表销毁
void LTDestory(LTNode* phead)
{assert(phead);LTNode* cur = phead->next;while (cur != phead){LTNode* next = cur->next;free(cur);cur = next;}free(phead);
}// 双向链表打印
void LTPrint(LTNode* phead)
{assert(phead);printf("guard<==>");LTNode* cur = phead->next;while (cur != phead){printf("%d<==>", cur->data);cur = cur->next;}printf("\n");
}// 双向链表判空
bool LTEmpty(LTNode* phead)
{assert(phead);return phead->next == phead;
}// 双向链表尾插
void LTPushBack(LTNode* phead, LTDataType x)
{assert(phead);LTNode* tail = phead->prev;LTNode* newnode = BuyLTNode(x);tail->next = newnode;newnode->prev = tail;newnode->next = phead;phead->prev = newnode;// 复用// LTInsert(phead, x);
}// 双向链表尾删
void LTPopBack(LTNode* phead)
{assert(phead);assert(!LTEmpty(phead));LTNode* tail = phead->prev;LTNode* tailPrev = tail->prev;free(tail);tailPrev->next = phead;phead->prev = tailPrev;// 复用// LTErase(phead->prev);
}// 双向链表头插
void LTPushFront(LTNode* phead, LTDataType x)
{assert(phead);LTNode* newnode = BuyLTNode(x);newnode->next = phead->next;phead->next->prev = newnode;phead->next = newnode;newnode->prev = phead;// 复用// LTInsert(phead->next, x);
}// 双向链表头删
void LTPopFront(LTNode* phead)
{assert(phead);assert(!LTEmpty(phead));LTNode* first = phead->next;LTNode* second = first->next;phead->next = second;second->prev = phead;free(first);// 复用// LTErase(phead->next);
}// 双向链表查找
LTNode* LTFind(LTNode* phead, LTDataType x)
{assert(phead);LTNode* cur = phead->next;while (cur != phead){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}// 双向链表在pos的前面进行插入
void LTInsert(LTNode* pos, LTDataType x)
{assert(pos);LTNode* prev = pos->prev;LTNode* newnode = BuyLTNode(x);prev->next = newnode;newnode->prev = prev;newnode->next = pos;pos->prev = newnode;
}// 双向链表删除pos位置的节点
void LTErase(LTNode* pos)
{assert(pos);LTNode* posPrev = pos->prev;LTNode* posNext = pos->next;posPrev->next = posNext;posNext->prev = posPrev;free(pos);
}
3.2 -> List.h
#pragma once#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>// 带头+双向+循环链表增删查改实现
typedef int LTDataType;typedef struct LTNode
{LTDataType data;struct LTNode* next;struct LTNode* prev;
}LTNode;// 双向链表初始化
LTNode* LTInit();// 动态申请一个结点
LTNode* BuyLTNode(LTDataType x);// 双向链表销毁
void LTDestory(LTNode* phead);// 双向链表打印
void LTPrint(LTNode* phead);// 双向链表判空
bool LTEmpty(LTNode* phead);// 双向链表尾插
void LTPushBack(LTNode* phead, LTDataType x);// 双向链表尾删
void LTPopBack(LTNode* phead);// 双向链表头插
void LTPushFront(LTNode* phead, LTDataType x);// 双向链表头删
void LTPopFront(LTNode* phead);// 双向链表查找
LTNode* LTFind(LTNode* phead, LTDataType x);// 双向链表在pos的前面进行插入
void LTInsert(LTNode* pos, LTDataType x);// 双向链表删除pos位置的节点
void LTErase(LTNode* pos);
3.3 -> Test.c
#include "List.h"// 尾插测试
void Test1()
{LTNode* plist = LTInit();LTPushBack(plist, 1);LTPushBack(plist, 2);LTPushBack(plist, 3);LTPushBack(plist, 4);LTPushBack(plist, 5);LTPrint(plist);LTDestory(plist);plist = NULL;
}// 尾删测试
void Test2()
{LTNode* plist = LTInit();LTPushBack(plist, 1);LTPushBack(plist, 2);LTPushBack(plist, 3);LTPushBack(plist, 4);LTPushBack(plist, 5);LTPrint(plist);LTPopBack(plist);LTPrint(plist);LTPopBack(plist);LTPrint(plist);LTPopBack(plist);LTPrint(plist);LTPopBack(plist);LTPrint(plist);LTPopBack(plist);LTPrint(plist);LTDestory(plist);plist = NULL;
}// 头插测试
void Test3()
{LTNode* plist = LTInit();LTPushFront(plist, 1);LTPushFront(plist, 2);LTPushFront(plist, 3);LTPushFront(plist, 4);LTPushFront(plist, 5);LTPrint(plist);LTDestory(plist);plist = NULL;
}// 头删测试
void Test4()
{LTNode* plist = LTInit();LTPushBack(plist, 1);LTPushBack(plist, 2);LTPushBack(plist, 3);LTPushBack(plist, 4);LTPushBack(plist, 5);LTPrint(plist);LTPopFront(plist);LTPrint(plist);LTPopFront(plist);LTPrint(plist);LTPopFront(plist);LTPrint(plist);LTPopFront(plist);LTPrint(plist);LTPopFront(plist);LTPrint(plist);LTDestory(plist);plist = NULL;
}// 查找插入测试
void Test5()
{LTNode* plist = LTInit();LTPushBack(plist, 1);LTPushBack(plist, 2);LTPushBack(plist, 3);LTPushBack(plist, 4);LTPushBack(plist, 5);LTPrint(plist);LTNode* pos = LTFind(plist, 3);if (pos)LTInsert(pos, 99);LTPrint(plist);LTDestory(plist);plist = NULL;
}int main()
{return 0;
}
感谢大佬们支持!!!
互三啦!!!
相关文章:
【海贼王的数据航海:利用数据结构成为数据海洋的霸主】链表—双向链表
目录 往期 1 -> 带头双向循环链表(双链表) 1.1 -> 接口声明 1.2 -> 接口实现 1.2.1 -> 双向链表初始化 1.2.2 -> 动态申请一个结点 1.2.3 -> 双向链表销毁 1.2.4 -> 双向链表打印 1.2.5 -> 双向链表判空 1.2.6 -> 双向链表尾插 1.2.7 -&…...
做测试还是测试开发,选职业要慎重!
【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程,一周学完让你面试通过率提高90%!(自动化测试) 突然发现好像挺多人想投测开和测试的,很多人面试的时候也会被问到这几个职位的区别,然后有测…...
Java面试题总结200道(二)
26、简述Spring中Bean的生命周期? 在原生的java环境中,一个新的对象的产生是我们用new()的方式产生出来的。在Spring的IOC容器中,将这一部分的工作帮我们完成了(Bean对象的管理)。既然是对象,就存在生命周期,也就是作用…...
面试数据库篇(mysql)- 03MYSQL支持的存储引擎有哪些, 有什么区别
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。 MySQL体系结构 连接层服务层引擎层存储层 存储引擎特点 InnoDB MYSQL支持的存储引擎有哪些, 有什么区别 ? my…...
MySQL深入——25
Join语句如何优化? Join语句的两种算法,分别为Index Nested-Loop Join和Block Nested-Loop Join NLJ在大表Join当中还不错,但BNL在大表join时性能就差很多,很耗CPU资源。 如何优化这两个算法 创建t1,t2算法,在t1中…...
Docker运行时安全之道: 保障容器环境的安全性
引言 Docker作为容器化技术的领军者,为应用部署提供了灵活性和便捷性。然而,在享受这些优势的同时,必须重视Docker运行时的安全性。本文将深入研究一些关键的Docker运行时安全策略,以确保你的容器环境在生产中得到有效的保护。 1. 使用最小特权原则 保持容器以最小权限运…...
前后端分离项目Docker部署指南(上)
目录 前言 一.搭建局域网 1.搭建net-ry局域网,用于部署若依项目 2.注意点 二.安装redis 创建目录 将容器进行挂载 编辑 测试是否安装成功 编辑 三. 安装MySQL 创建文件夹 上传配置文件并且修改 .启动MySQL容器服务 充许远程连接 四.部署后端 使用…...
ARM 架构下国密算法库
目录 前言GmSSL编译环境准备下载 GmSSL 源码编译 GmSSL 源码SM4 对称加密算法SM2 非对称加密算法小结前言 在当前的国际形式下,国替势不可挡。操作系统上,银河麒麟、统信 UOS、鸿蒙 OS 等国产系统开始发力,而 CPU 市场,也是百花齐放,有 龙芯(LoongArch架构)、兆芯(X86…...
源码的角度分析Vue2数据双向绑定原理
什么是双向绑定 我们先从单向绑定切入,其实单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新。那么双向绑定就可以从此联想到,即在单向绑定的基础上,用户更新…...
动态规划(算法竞赛、蓝桥杯)--树形DP树形背包
1、B站视频链接:E18 树形DP 树形背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N110; int n,V,p,root; int v[N],w[N]; int h[N],to[N],ne[N],tot; //邻接表 int f[N][N];void add(int a,int b){to[tot]b;ne[tot]h[a];h[a…...
electron打包前端项目
1.npm run build 打包项目文件到disk文件夹 2.安装electron:npm install electron 打开后进到/dist里面 然后把这个项目的地址配置环境变量 配置环境变量:在系统变量的path中添加进去 配置成功后,electron -v看看版本。 3.创建主程序的入口文件main.…...
2.1基本算法之枚举7647:余数相同问题
已知三个正整数 a,b,c。 现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同。 请问满足上述条件的x的最小值是多少? 数据保证x有解 #include<bits/stdc.h>//万能头 using…...
求最短路径之迪杰斯特拉算法
对fill用法的介绍 1.用邻接矩阵实现 const int maxn100; const int INF100000000;//无穷大,用来初始化边 int G[maxn][maxn];//用邻接矩阵存储图的信息 int isin[maxn]{false};//记录是否已被访问 int minDis[maxn];//记录到顶点的最小距离void Dijkstra(int s,in…...
python大学社团管理系统开发文档
项目介绍 一直想做一款大学社团管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套管理系统。 在线体验 代码下载:https://github.com/geeeeeeeek/python_team演示地址:http://team.gitapp.cn/ &…...
leetcode 1328.破坏回文串
题目链接LeetCode1328 1.题目 给你一个由小写英文字母组成的回文字符串 palindrome ,请你将其中 一个 字符用任意小写英文字母替换,使得结果字符串的 字典序最小 ,且 不是 回文串。 请你返回结果字符串。如果无法做到,则返回一个…...
重学SpringBoot3-自动配置机制
重学SpringBoot3-自动配置机制 引言Spring Boot 自动配置原理示例:Spring Boot Web 自动配置深入理解总结相关阅读 引言 Spring Boot 的自动配置是其最强大的特性之一,它允许开发者通过最少的配置实现应用程序的快速开发和部署。这一切都得益于 Spring …...
sql基本语法+实验实践
sql语法 注释: 单行 --注释内容# 注释内容多行 /* 注释内容 */数据定义语言DDL 查询所有数据库 show databases;注意是databases而不是database。 查询当前数据库 select database();创建数据库 create database [if not exists] 数据库名 [default charset 字符…...
Node.js中的并发和多线程处理
在Node.js中,处理并发和多线程是一个非常重要的话题。由于Node.js是单线程的,这意味着它在任何给定时间内只能执行一个任务。然而,Node.js的事件驱动和非阻塞I/O模型使得处理并发和多线程变得更加高效和简单。在本文中,我们将探讨…...
node.js 封装分页查询
node.js封装sql分页查询 方法: /*** 生成分页查询sql* param {string} table 表名* param {number} pageNum 分页页数 * param {number} pageSize 分页条数 * param {object} query 查询对象 例:{id:1,name:小明}* returns sql语句*/ const limit (ta…...
iptables 基本使用
iptables 主要用到两个表:filter 和 nat,其中 filter 表可以用来过滤数据包;nat 可以用来修改数据包的源地址和目的地址。 chain chain 是 table 中对数据包进行匹配的规则,对于 filter 来说 chain 有 INPUT & OUTPUT & …...
Altium Designer 22 实战:用这个隐藏技巧,为DIP插件焊盘穿上‘防烫服’
Altium Designer 22实战:用丝印层为DIP焊盘打造双重防护 手工焊接DIP插件时,烙铁温度过高或操作不当导致绿油层损坏,进而引发短路问题,是硬件工程师经常遇到的痛点。特别是在生产线上,工人为了效率往往将烙铁温度调至最…...
重构数字桌面:2025年macOS菜单栏管理工具全解析
重构数字桌面:2025年macOS菜单栏管理工具全解析 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 问题溯源:为什么你的菜单栏变成了数字垃圾场? 当我们每天打开Mac…...
黑丝空姐-造相Z-Turbo构建AI编程助手:自动生成前端组件配图
黑丝空姐-造相Z-Turbo构建AI编程助手:自动生成前端组件配图 想象一下这个场景:你正在为一个航空公司的内部管理系统编写前端代码,需要创建一个“机组人员资料卡”组件。你已经写好了HTML结构和CSS样式,但卡在了头像占位符上——是…...
实战演练:用nli-distilroberta-base构建智能问答系统的推理模块
实战演练:用nli-distilroberta-base构建智能问答系统的推理模块 1. 项目概述与核心价值 自然语言推理(NLI)是构建智能问答系统的核心技术之一,它能够判断两个句子之间的逻辑关系。nli-distilroberta-base镜像基于轻量级的DistilRoBERTa模型,…...
LFM2.5-1.2B-Thinking-GGUF效果展示:多语言混合prompt响应能力实测
LFM2.5-1.2B-Thinking-GGUF效果展示:多语言混合prompt响应能力实测 1. 模型核心能力概览 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,专为低资源环境优化设计。这个1.2B参数的模型采用GGUF格式,通过llama.cpp运行时实现高…...
Google Authenticator PHP集成避坑指南:从扫码到验证的完整流程与常见错误解决
Google Authenticator PHP集成深度排障手册:从原理到实战的30个关键细节 当你按照教程一步步完成Google Authenticator的PHP集成,却在最后一步验证失败时,那种挫败感我深有体会。三年前我第一次在金融项目中实现动态口令认证,连续…...
pandas高效筛选技巧:如何精准匹配与排除DataFrame中的特定字符串列
1. 字符串筛选的常见场景与痛点 做数据分析的朋友们应该都遇到过这样的需求:从海量数据中快速找出包含特定关键词的记录。比如电商平台要筛选出所有包含"促销"字样的商品标题,或者客服系统需要过滤掉所有包含"投诉"关键词的工单。这…...
别再花钱买模板了!用扣子(Coze)和剪映,5分钟搞定城市宣传视频(保姆级节点配置)
零成本打造城市宣传片:Coze剪映全流程实战指南 想象一下这样的场景:你刚接手一个本地文旅推广项目,预算只够买两杯咖啡,但甲方期待的是《航拍中国》级别的视觉大片。传统解决方案要么外包烧钱,要么自己熬夜学剪辑到崩溃…...
如何在5分钟内成为资源下载高手:res-downloader的终极指南
如何在5分钟内成为资源下载高手:res-downloader的终极指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader res-do…...
Alpamayo-R1-10B参数调优教程:Temperature从0.4→1.2对轨迹激进程度的影响可视化对比
Alpamayo-R1-10B参数调优教程:Temperature从0.4→1.2对轨迹激进程度的影响可视化对比 1. 引言 如果你正在使用Alpamayo-R1-10B这个自动驾驶模型,可能会发现一个有趣的现象:同样的路口场景,同样的驾驶指令,模型给出的…...
