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

数据结构练习二习题

第七题:

#include<bits/stdc++.h>
using namespace std;#define MaxSize 100  // 定义顺序表的最大长度typedef int ElemType;  // 定义元素类型为inttypedef struct {ElemType data[MaxSize];  // 存储数据的数组int length;              // 当前顺序表的长度
} SqList;// 插入函数:在有序顺序表中插入元素x
void charu(SqList *&L, ElemType x) {if (L->length >= MaxSize) {  // 检查顺序表是否已满cout << "顺序表已满,无法插入!" << endl;return;}int i = 0;// 找到插入位置while (i < L->length && L->data[i] < x) {i++;}// 将插入位置后的元素后移for (int j = L->length - 1; j >= i; j--) {L->data[j + 1] = L->data[j];}// 插入元素xL->data[i] = x;L->length++;  // 顺序表长度加1
}int main() {SqList *L = new SqList();  // 动态分配顺序表内存L->length = 0;             // 初始化顺序表长度为0int n;cout << "请输入有序表的初始元素个数(不超过" << MaxSize << "):";cin >> n;if (n > MaxSize) {cout << "输入的元素个数超过顺序表最大容量!" << endl;return 0;}cout << "请输入" << n << "个有序的整数:" << endl;for (int i = 0; i < n; i++) {cin >> L->data[i];L->length++;  // 每输入一个元素,顺序表长度加1}int x;cout << "请输入要插入的数值x: ";cin >> x;// 调用插入函数charu(L, x);// 输出插入后的顺序表cout << "插入后的顺序表: ";for (int i = 0; i < L->length; i++) {cout << L->data[i] << " ";}cout << endl;delete L;  // 释放动态分配的内存return 0;
}

第八题:

#include<bits/stdc++.h>
using namespace std;#define MaxSize 100  // 定义顺序表的最大长度typedef int ElemType;  // 定义元素类型为inttypedef struct {ElemType data[MaxSize];  // 存储数据的数组int length;              // 当前顺序表的长度
} SqList;// 调序函数:将顺序表中的负数移到前面,非负数移到后面
void tiaoxu(SqList *&L) {int i = 0;int j = L->length - 1;while (i < j) {while (L->data[i] < 0) i++;  // 从左往右找到第一个非负数while (L->data[j] >= 0) j--; // 从右往左找到第一个负数if (i < j) {swap(L->data[i], L->data[j]);  // 交换两个元素}}
}int main() {SqList *L = new SqList();  // 动态分配顺序表内存L->length = 0;             // 初始化顺序表长度为0int n;cout << "请输入顺序表的初始元素个数(不超过" << MaxSize << "):";cin >> n;if (n > MaxSize) {cout << "输入的元素个数超过顺序表最大容量!" << endl;return 0;}cout << "请输入" << n << "个整数:" << endl;for (int i = 0; i < n; i++) {cin >> L->data[i];L->length++;  // 每输入一个元素,顺序表长度加1}// 调用调序函数tiaoxu(L);// 输出调序后的顺序表cout << "调序后的顺序表: ";for (int i = 0; i < L->length; i++) {cout << L->data[i] << " ";}cout << endl;delete L;  // 释放动态分配的内存return 0;
}

第十一题:

第十二题:

#include <iostream>
using namespace std;// 定义链表结点结构
typedef int ElemType;  // 定义元素类型为inttypedef struct LinkNode {ElemType data;              // 数据域struct LinkNode* next;      // 指针域
} LinkNode;// 创建链表
void CreateList(LinkNode*& L, int n) {L = new LinkNode();  // 创建头结点L->next = nullptr;   // 初始化为空链表LinkNode* tail = L;  // 尾指针,初始指向头结点cout << "请输入" << n << "个整数:" << endl;for (int i = 0; i < n; i++) {LinkNode* newNode = new LinkNode();  // 创建新结点cin >> newNode->data;newNode->next = nullptr;tail->next = newNode;  // 将新结点插入链表尾部tail = newNode;        // 更新尾指针}
}// 逆置链表
void Reverse(LinkNode*& L) {if (L == nullptr || L->next == nullptr) {return;  // 空链表或只有一个结点,无需逆置}LinkNode* p = L->next;  // 当前结点(从第一个有效结点开始)LinkNode* q = nullptr;  // 后继结点L->next = nullptr;      // 头结点的指针域置空while (p != nullptr) {q = p->next;        // 保存后继结点p->next = L->next;  // 将当前结点插入到头结点之后L->next = p;        // 更新头结点的指针域p = q;              // 当前结点后移}
}// 输出链表
void Displist(LinkNode* L) {LinkNode* p = L->next;  // 从第一个有效结点开始while (p != nullptr) {cout << p->data << " ";p = p->next;}cout << endl;
}// 销毁链表
void DestroyList(LinkNode*& L) {LinkNode* p = L;while (p != nullptr) {LinkNode* temp = p;p = p->next;delete temp;  // 释放结点内存}L = nullptr;  // 头指针置空
}int main() {LinkNode* L = nullptr;  // 链表头指针int n;cout << "请输入链表的初始元素个数:";cin >> n;if (n <= 0) {cout << "输入的元素个数无效!" << endl;return 0;}// 创建链表CreateList(L, n);// 输出原始链表cout << "原始链表: ";Displist(L);// 逆置链表Reverse(L);// 输出逆置后的链表cout << "逆置后的链表: ";Displist(L);// 销毁链表DestroyList(L);return 0;
}

第十三题:

#include <bits/stdc++.h>
using namespace std;
typedef int ElemType;  
typedef struct LinkNode {ElemType data;             struct LinkNode* next;     
} LinkNode;
// 创建链表
void CreateList(LinkNode*& L, int n) {L = new LinkNode();  L->next = nullptr;   LinkNode* tail = L;  cout << "请输入" << n << "个整数:" << endl;for (int i = 0; i < n; i++) {LinkNode* newNode = new LinkNode(); cin >> newNode->data;newNode->next = nullptr;tail->next = newNode; tail = newNode;      }
}
// 找到链表的中间元素
ElemType zhongjian(LinkNode* L) {if (L == nullptr || L->next == nullptr) {return -1;  }LinkNode*p=L->next,*q=p;while (p->next!=NULL && p->next->next!=NULL){p=p->next->next;q=q->next;}return q->data;  
}
// 输出链表
void Displist(LinkNode* L) {LinkNode* p = L->next;  while (p != nullptr) {cout << p->data << " ";p = p->next;}cout << endl;
}
// 销毁链表
void DestroyList(LinkNode*& L) {LinkNode* p = L;while (p != nullptr) {LinkNode* temp = p;p = p->next;delete temp;  }L = nullptr;  
}
int main() {LinkNode* L = nullptr; int n;cout << "请输入链表的初始元素个数:";cin >> n;if (n <= 0) {cout << "输入的元素个数无效!" << endl;return 0;}CreateList(L, n);cout << "原始链表: ";Displist(L);ElemType mid = zhongjian(L);if (mid != -1) {cout << "中间位置元素: " << mid << endl;} else {cout << "链表为空或只有一个元素,无法找到中间位置!" << endl;}DestroyList(L);return 0;
}

第十四题:

#include <bits/stdc++.h>
using namespace std;typedef int ElemType;  // 定义元素类型为inttypedef struct LinkNode {ElemType data;              // 数据域struct LinkNode* next;      // 指针域
} LinkNode;// 创建链表
void CreateList(LinkNode*& L, int n) {L = new LinkNode();  // 创建头结点L->next = nullptr;   // 初始化为空链表LinkNode* tail = L;  // 尾指针,初始指向头结点cout << "请输入" << n << "个整数:" << endl;for (int i = 0; i < n; i++) {LinkNode* newNode = new LinkNode();  // 创建新结点cin >> newNode->data;newNode->next = nullptr;tail->next = newNode;  // 将新结点插入链表尾部tail = newNode;        // 更新尾指针}
}// 在第一个最大值结点之前插入值为x的结点
void InsertBeforeMax(LinkNode*& L, ElemType x) {if (L == nullptr || L->next == nullptr) {cout << "链表为空,无法插入!" << endl;return;}LinkNode* p = L->next;  // 当前结点(从第一个有效结点开始)LinkNode* prev = L;     // 前驱结点(初始指向头结点)ElemType maxVal = p->data;  // 最大值初始化为第一个结点的值LinkNode* maxPrev = L;  // 最大值结点的前驱结点// 找到第一个最大值结点及其前驱结点while (p != nullptr) {if (p->data > maxVal) {maxVal = p->data;maxPrev = prev;}prev = p;p = p->next;}// 在最大值结点之前插入新结点LinkNode* newNode = new LinkNode();newNode->data = x;newNode->next = maxPrev->next;maxPrev->next = newNode;
}// 输出链表
void Displist(LinkNode* L) {LinkNode* p = L->next;  // 从第一个有效结点开始while (p != nullptr) {cout << p->data << " ";p = p->next;}cout << endl;
}// 销毁链表
void DestroyList(LinkNode*& L) {LinkNode* p = L;while (p != nullptr) {LinkNode* temp = p;p = p->next;delete temp;  // 释放结点内存}L = nullptr;  // 头指针置空
}int main() {LinkNode* L = nullptr;  // 链表头指针int n;cout << "请输入链表的初始元素个数:";cin >> n;if (n <= 0) {cout << "输入的元素个数无效!" << endl;return 0;}// 创建链表CreateList(L, n);// 输出原始链表cout << "原始链表: ";Displist(L);// 插入值为x的结点ElemType x;cout << "请输入要插入的值x: ";cin >> x;InsertBeforeMax(L, x);// 输出插入后的链表cout << "插入后的链表: ";Displist(L);// 销毁链表DestroyList(L);return 0;
}

第十七题:

#include <bits/stdc++.h>
using namespace std;typedef int ElemType;  // 定义元素类型为inttypedef struct LinkNode {ElemType data;              // 数据域struct LinkNode* next;      // 指针域
} LinkNode;// 创建链表
void CreateList(LinkNode*& L, int n) {L = new LinkNode();  // 创建头结点L->next = nullptr;   // 初始化为空链表LinkNode* tail = L;  // 尾指针,初始指向头结点cout << "请输入" << n << "个整数:" << endl;for (int i = 0; i < n; i++) {LinkNode* newNode = new LinkNode();  // 创建新结点cin >> newNode->data;newNode->next = nullptr;tail->next = newNode;  // 将新结点插入链表尾部tail = newNode;        // 更新尾指针}
}// 合并两个单链表
void Merge(LinkNode* ha, LinkNode* hb, LinkNode*& hc) {hc = ha;  // hc 指向 ha 的头结点LinkNode* p = ha->next;  // p 指向 ha 的第一个有效结点LinkNode* q = hb->next;  // q 指向 hb 的第一个有效结点// 找到 ha 的尾结点while (p->next != nullptr) {p = p->next;}// 将 hb 的结点连接到 ha 的尾部p->next = q;// 释放 hb 的头结点delete hb;hb = nullptr;
}// 输出链表
void Displist(LinkNode* L) {LinkNode* p = L->next;  // 从第一个有效结点开始while (p != nullptr) {cout << p->data << " ";p = p->next;}cout << endl;
}// 销毁链表
void DestroyList(LinkNode*& L) {LinkNode* p = L;while (p != nullptr) {LinkNode* temp = p;p = p->next;delete temp;  // 释放结点内存}L = nullptr;  // 头指针置空
}int main() {LinkNode* ha = nullptr;  // 链表 ha 的头指针LinkNode* hb = nullptr;  // 链表 hb 的头指针LinkNode* hc = nullptr;  // 合并后的链表 hc 的头指针int n1, n2;cout << "请输入链表 ha 的初始元素个数:";cin >> n1;if (n1 <= 0) {cout << "输入的元素个数无效!" << endl;return 0;}CreateList(ha, n1);  // 创建链表 hacout << "请输入链表 hb 的初始元素个数:";cin >> n2;if (n2 <= 0) {cout << "输入的元素个数无效!" << endl;return 0;}CreateList(hb, n2);  // 创建链表 hb// 输出原始链表cout << "链表 ha: ";Displist(ha);cout << "链表 hb: ";Displist(hb);// 合并链表Merge(ha, hb, hc);// 输出合并后的链表cout << "合并后的链表 hc: ";Displist(hc);// 销毁链表DestroyList(hc);return 0;
}

第十八题:

#include <bits/stdc++.h>
using namespace std;typedef int ElemType;  // 定义元素类型为int// 定义双向链表结点结构
typedef struct DLinkNode {ElemType data;              // 数据域struct DLinkNode* prev;     // 前驱指针struct DLinkNode* next;     // 后继指针
} DLinkNode;// 创建循环双链表
void CreateList(DLinkNode*& head, int n) {head = new DLinkNode();  // 创建头结点head->prev = head;       // 头结点的前驱指向自己head->next = head;       // 头结点的后继指向自己DLinkNode* tail = head;  // 尾指针,初始指向头结点cout << "请输入" << n << "个整数:" << endl;for (int i = 0; i < n; i++) {DLinkNode* newNode = new DLinkNode();  // 创建新结点cin >> newNode->data;newNode->prev = tail;  // 新结点的前驱指向尾结点newNode->next = head;  // 新结点的后继指向头结点tail->next = newNode;  // 尾结点的后继指向新结点head->prev = newNode;  // 头结点的前驱指向新结点tail = newNode;        // 更新尾指针}
}// 插入算法
void Insert(DLinkNode*& ha, DLinkNode*& hb, int i) {if (ha == nullptr || hb == nullptr) {cout << "链表为空,无法插入!" << endl;return;}DLinkNode* p = ha->next;  // 当前结点(从第一个有效结点开始)int count = 1;            // 计数器,用于找到第 i 个结点// 找到第 i 个结点while (p != ha && count < i) {p = p->next;count++;}if (i == 0) {// 将 hb 插入到 ha 的前面DLinkNode* hbTail = hb->prev;  // hb 的尾结点hbTail->next = ha->next;       // hb 的尾结点指向 ha 的第一个有效结点ha->next->prev = hbTail;       // ha 的第一个有效结点的前驱指向 hb 的尾结点ha->next = hb->next;           // ha 的头结点指向 hb 的第一个有效结点hb->next->prev = ha;           // hb 的第一个有效结点的前驱指向 ha 的头结点} else if (p != ha) {// 将 hb 插入到 ha 的第 i 个结点后面DLinkNode* hbTail = hb->prev;  // hb 的尾结点hbTail->next = p->next;        // hb 的尾结点指向 p 的后继结点p->next->prev = hbTail;        // p 的后继结点的前驱指向 hb 的尾结点p->next = hb->next;            // p 的后继指向 hb 的第一个有效结点hb->next->prev = p;            // hb 的第一个有效结点的前驱指向 p} else {// 将 hb 插入到 ha 的后面DLinkNode* haTail = ha->prev;  // ha 的尾结点haTail->next = hb->next;       // ha 的尾结点指向 hb 的第一个有效结点hb->next->prev = haTail;       // hb 的第一个有效结点的前驱指向 ha 的尾结点hb->prev->next = ha;           // hb 的尾结点指向 ha 的头结点ha->prev = hb->prev;           // ha 的头结点的前驱指向 hb 的尾结点}// 释放 hb 的头结点delete hb;hb = nullptr;
}// 输出循环双链表
void Displist(DLinkNode* head) {if (head == nullptr || head->next == head) {cout << "链表为空!" << endl;return;}DLinkNode* p = head->next;  // 从第一个有效结点开始while (p != head) {cout << p->data << " ";p = p->next;}cout << endl;
}// 销毁循环双链表
void DestroyList(DLinkNode*& head) {if (head == nullptr) {return;}DLinkNode* p = head->next;  // 从第一个有效结点开始while (p != head) {DLinkNode* temp = p;p = p->next;delete temp;  // 释放结点内存}delete head;  // 释放头结点head = nullptr;
}int main() {DLinkNode* ha = nullptr;  // 链表 ha 的头指针DLinkNode* hb = nullptr;  // 链表 hb 的头指针int n1, n2;cout << "请输入链表 ha 的初始元素个数:";cin >> n1;if (n1 <= 0) {cout << "输入的元素个数无效!" << endl;return 0;}CreateList(ha, n1);  // 创建链表 hacout << "请输入链表 hb 的初始元素个数:";cin >> n2;if (n2 <= 0) {cout << "输入的元素个数无效!" << endl;return 0;}CreateList(hb, n2);  // 创建链表 hb// 输出原始链表cout << "链表 ha: ";Displist(ha);cout << "链表 hb: ";Displist(hb);int i;cout << "请输入插入位置 i: ";cin >> i;// 插入链表 hbInsert(ha, hb, i);// 输出插入后的链表cout << "插入后的链表 ha: ";Displist(ha);// 销毁链表DestroyList(ha);return 0;
}

实验题2实验5

#include "cdlinklist.cpp"
int main() {DLinkNode *h;ElemType e;cout<<"双链表的基本运算如下:"<<endl;cout<<"(1)初始化单链表h"<<endl;InitList(h);cout<<"(2)依次采用尾插法插入a,b,c,d,e元素"<<endl;ListInsert(h,1,'a');ListInsert(h,2,'b');ListInsert(h,3,'c');ListInsert(h,4,'d');ListInsert(h,5,'e');cout<<"(3)输出双链表h:";DisList(h);printf("(4)双链表h长度:%d\n",ListLength(h));printf("(5)双链表h为%s\n",(ListEmpty(h))?"空":"非空");GetElem(h,3,e);printf("(6)双链表h的第3个元素:%c\n",e);printf("(7)元素a的位置:%d\n",LocateElem(h,'a'));printf("(8)在第4个元素位置上插入f元素\n");ListInsert(h,4,'f');cout<<"(9)输出双链表h:";ListInsert(h);cout<<"(10)删除h的第3个元素\n";ListDelete(h,3,e);cout<<"(11)输出双链表h:";DisList(h);cout<<"(12)释放双链表h:\n";DestroyList(h);return 1;
}

实验6

#include <iostream>
using namespace std;typedef struct LinkNode {int data;struct LinkNode* next;
} LinkNode;// 创建单链表
void CreateList(LinkNode*& L, int a[], int n) {L = new LinkNode();  // 头结点L->next = nullptr;LinkNode* tail = L;for (int i = 0; i < n; i++) {LinkNode* newNode = new LinkNode();newNode->data = a[i];newNode->next = nullptr;tail->next = newNode;tail = newNode;}
}// 按基准值x划分单链表
void Partition(LinkNode*& L, int x) {if (L->next == nullptr || L->next->next == nullptr) return;LinkNode* lessHead = new LinkNode();  // 小于x的链表头LinkNode* greaterHead = new LinkNode();  // 大于等于x的链表头LinkNode* lessTail = lessHead, *greaterTail = greaterHead;LinkNode* p = L->next;while (p != nullptr) {if (p->data < x) {lessTail->next = p;lessTail = p;} else {greaterTail->next = p;greaterTail = p;}p = p->next;}// 合并两个链表lessTail->next = greaterHead->next;greaterTail->next = nullptr;L->next = lessHead->next;// 释放临时头结点delete lessHead;delete greaterHead;
}// 输出链表
void Displist(LinkNode* L) {LinkNode* p = L->next;while (p != nullptr) {cout << p->data << " ";p = p->next;}cout << endl;
}// 销毁链表
void DestroyList(LinkNode*& L) {LinkNode* p = L;while (p != nullptr) {LinkNode* temp = p;p = p->next;delete temp;}L = nullptr;
}int main() {LinkNode* L;int a[] = {3, 5, 8, 5, 10, 2, 1};int n = sizeof(a) / sizeof(a[0]);int x = 5;  // 基准值CreateList(L, a, n);cout << "原始链表: ";Displist(L);Partition(L, x);cout << "划分后链表: ";Displist(L);DestroyList(L);return 0;
}

相关文章:

数据结构练习二习题

第七题&#xff1a; #include<bits/stdc.h> using namespace std;#define MaxSize 100 // 定义顺序表的最大长度typedef int ElemType; // 定义元素类型为inttypedef struct {ElemType data[MaxSize]; // 存储数据的数组int length; // 当前顺序表的长度…...

Flutter 中 GetX 的优缺点及常见问题解决方案

在 Flutter 生态中&#xff0c;GetX 凭借其轻量级、高效的特性&#xff0c;成为众多开发者青睐的状态管理与路由解决方案。然而&#xff0c;任何工具都有其适用场景与局限性。 一、GetX 的核心优势 1. 极简开发体验 GetX 通过响应式语法糖&#xff08;如Rx和Obx&#xff09;…...

Qt开发:QColorDialog的使用

文章目录 一、QColorDialog的基本介绍二、QColorDialog的基本用法三、完整示例 一、QColorDialog的基本介绍 QColorDialog 继承自 QDialog&#xff0c;用于让用户选择颜色。它可以以模态或非模态的方式运行&#xff0c;并支持 QColor 作为输入和输出。 二、QColorDialog的基本…...

【计算机网络编码与调制】

文章目录 一、前言二、编码与调制的基本概念1. 编码常见编码类型&#xff1a; 2. 调制常见调制类型&#xff1a; 三、常见编码技术1. NRZ编码&#xff08;Non-Return to Zero&#xff09;特点&#xff1a; 2. 曼彻斯特编码&#xff08;Manchester&#xff09;特点&#xff1a; …...

<数据集>手势识别数据集<目标检测>

数据集下载链接https://download.csdn.net/download/qq_53332949/90529961数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;10829张 标注数量(xml文件个数)&#xff1a;10829 标注数量(txt文件个数)&#xff1a;10829 标注类别数&#xff1a;26 标注类别名称&…...

魔法测试:用本地多模态大模型(Qwen2.5-VL)将PDF转为Markdown文档

安装咒语清单 &#x1f4dc; pip install -U vllm qwen-vl-utils pdf2image pip install githttps://github.com/huggingface/transformers accelerate&#xff08;温馨提示&#xff1a;念咒前请检查你的魔法棒(Python环境)是否兼容~&#xff09; 第一阶段&#xff1a;PDF变…...

【渗透测试】Fastjson 反序列化漏洞原理(二)

目录 反序列化漏洞结合 RMI 攻击详解一、RMI 和 JNDI 的基础知识(1) RMI 简介(2) JNDI 简介 二、漏洞利用的核心原理1. 构造恶意 JSON 数据2. 设置恶意 RMI 服务3. 加载并执行恶意代码 三、具体利用过程环境准备攻击步骤1. 构造恶意 JSON 数据2. 设置恶意 RMI 服务3. 部署恶意类…...

[c语言日寄MAX]深度解析:大小端字节序

【作者主页】siy2333 【专栏介绍】⌈c语言日寄MAX⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还…...

凝视型高光谱相机:钻石光谱分析研究与应用

钻石作为一种珍贵的宝石&#xff0c;其颜色和光谱特征一直是宝石学研究的重要方向。中达瑞和测试部样品科对六种不同颜色的钻石样品进行了高光谱成像测试&#xff0c;旨在分析它们在光谱下的差异和可分性。本文将详细介绍此次测试的过程、结果及其意义。 测试样品与设备 此次…...

2.基于多线程的TCP服务器实现

在我们预想中&#xff0c;服务器端应该能够同时与多个客户端建立连接并进行网络通信。然而&#xff0c;在之前的代码中&#xff0c;服务器实现只支持单一连接&#xff0c;因为在处理连接时&#xff0c;主线程会被accept()、read()或write()等方法阻塞&#xff0c;导致无法响应新…...

自动驾驶01 激光雷达原理

部分转载于 原文链接&#xff1a;https://blog.csdn.net/qq_45193988/article/details/143982588 1. 什么是激光雷达 激光雷达LiDAR的全称为Light Detection and Ranging 激光探测和测距。 激光雷达的工作原理&#xff1a;对红外光束Light Pluses发射、反射和接收来探测物体。…...

基础场景-------------------(5)重载和重写的区别

重写(Override) 从字面上看&#xff0c;重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继 承了父类原有的方法&#xff0c;但有时子类并不想原封不动的继承父类中的某个方法&#xff0c;所以在方法名&#xff0c;参数列 表&#xff0c;返回…...

基于ssm的微博网站(全套)

进入信息时代以来&#xff0c;很多数据都需要配套软件协助处理&#xff0c;这样可以解决传统方式带来的管理困扰。比如耗时长&#xff0c;成本高&#xff0c;维护数据困难&#xff0c;数据易丢失等缺点。本次使用数据库工具MySQL和编程技术JSP开发的微博网站&#xff0c;可以实…...

Java并发编程从入门到实战:同步、异步、多线程核心原理全解析

《Java并发编程从入门到实战&#xff1a;同步、异步、多线程核心原理全解析》 一、多线程基础认知&#xff08;从单核到多核的进化&#xff09; 1.1 什么是线程&#xff1f; 线程是程序执行的最小单元&#xff0c;一个进程可以包含多个线程。例如浏览器同时下载文件&#xff0…...

《引流获客》总结

第一章 入门篇 理解爆款打法和引流打法的区别 爆款打法&#xff1a;刷播放量&#xff0c;制作“爆款”视频/文案。 引流打法&#xff1a;刷有效转化&#xff0c;不在意播放量&#xff0c;而注重有多少观众被引流成为客户&#xff0c;完成消费&#xff0c;即成交转化。 定理&…...

基于Python的机器学习入门指南

在当今数字化时代&#xff0c;机器学习&#xff08;Machine Learning&#xff09;已经成为科技领域中最热门的话题之一。它不仅改变了我们对数据的理解和处理方式&#xff0c;还在许多行业中得到了广泛应用&#xff0c;如金融、医疗、交通等。Python作为一门强大的编程语言&…...

【蓝桥杯每日一题】3.25

&#x1f3dd;️专栏&#xff1a; 【蓝桥杯备篇】 &#x1f305;主页&#xff1a; f狐o狸x “OJ超时不是终点&#xff0c;是算法在提醒你该优化时间复杂度了&#xff01;” 目录 3.25 差分数组 一、一维差分 题目链接&#xff1a; 题目描述&#xff1a; 解题思路&#xff1a;…...

Kubernetes高级应用之-重启策略

一、介绍&#xff0b;扩展应用&#xff08;涉及的高级资源在后续会写出来&#xff09; # Kubernetes Pod重启策略&#xff08;RestartPolicy&#xff09;全面解析 ## 一、重启策略的核心价值与重要性 在Kubernetes集群中&#xff0c;Pod重启策略&#xff08;RestartPolicy&a…...

Axure RP9.0教程: 多级联动【设置选项改变时->情形->面板状态】(给动态面板元件设置相关交互事件的情形,来控制其他面板不同的状态。)

文章目录 引言I 多级联动(省、市、区)实现思路添加三省、市、区下拉列表给省下拉框添加数据源将市、区下拉框添加不同状态,分别以省、市命名给省下拉控件设置选项改变时的交互事件省下拉控件的交互事件情形市下拉交互事件的配置II 知识扩展: 展示省 → 地级市 → 区县的多级…...

Next.js 严重漏洞:攻击者可绕过中间件授权检查

Next.js React 框架近日披露了一个严重的安全漏洞&#xff0c;攻击者可在特定条件下利用该漏洞绕过授权检查。该漏洞被标记为 CVE-2025-29927&#xff0c;其 CVSS 评分为 9.1&#xff08;满分 10.0&#xff09;。 漏洞详情 Next.js 在公告中表示&#xff1a;“Next.js 使用内…...

气象可视化卫星云图的方式:方法与架构详解

气象卫星云图是气象预报和气候研究的重要数据来源。通过可视化技术,我们可以将卫星云图数据转化为直观的图像或动画,帮助用户更好地理解气象变化。本文将详细介绍卫星云图可视化的方法、架构和代码实现。 一、卫星云图可视化方法 1. 数据获取与预处理 卫星云图数据通常来源…...

NLP高频面试题(十四)——DPO、PPO等强化学习训练方法介绍

强化学习&#xff08;Reinforcement Learning&#xff0c;RL&#xff09;近年来随着深度学习的快速发展而备受关注&#xff0c;特别是在游戏控制、自动驾驶、机器人控制及大语言模型训练等领域均有广泛应用。本文将重点介绍强化学习中的经典训练方法&#xff0c;包括PPO&#x…...

从 Neo4j 数据库中提取数据并绘制图谱

代码说明&#xff1a; 连接 Neo4j 数据库&#xff1a; 使用 py2neo.Graph 连接到 Neo4j 数据库。确保替换 uri、username 和 password 为你的实际配置。 Cypher 查询&#xff1a; 查询数据库中的节点和关系&#xff0c;限制返回的记录数&#xff08;例如 LIMIT 100&#xff09…...

Android Compose 框架隐式动画之过渡动画深入剖析(二十六)

Android Compose 框架隐式动画之过渡动画深入剖析 一、引言 在移动应用开发领域&#xff0c;用户体验始终是至关重要的。动画效果作为提升用户体验的关键元素&#xff0c;能够为应用增添生动性和交互性。Android Compose 作为现代 Android UI 工具包&#xff0c;为开发者提供…...

esp32s3聊天机器人(三)

先放上最新的硬件图 添加了按钮、600毫安锂电池和充电板 关于 sherpa-onnx 语音生成的打断 按说明实现了一下&#xff0c;但是偶尔还是有问题&#xff0c;毕竟不是直接立刻打断生成 private int OnAudioData(nint samples, int n){//Console.WriteLine("OnAudioData n…...

超融合服务器是什么

超融合服务器的定义与背景 超融合服务器&#xff08;Hyperconverged Infrastructure, HCI&#xff09;是一种通过软件定义技术&#xff0c;将计算、存储、网络和虚拟化功能整合到单一硬件平台中的IT基础设施解决方案。其核心目标是通过资源的高度集成和统一管理&#xff0c;简…...

Rust从入门到精通之精通篇:22.Unsafe Rust 详解

Unsafe Rust 详解 在 Rust 的设计哲学中,安全性是核心原则之一。Rust 的所有权系统、借用检查器和类型系统共同保证了内存安全和线程安全。然而,有些底层操作无法通过 Rust 的安全检查机制进行验证,这就是 unsafe Rust 存在的原因。在本章中,我们将深入探讨 unsafe Rust,…...

如何设计系统扩展性以应对业务增长

要设计具备良好扩展性的系统以应对业务增长&#xff0c;关键在于采用分布式架构、实现服务的松耦合、保证数据库的水平扩展能力、使用缓存和CDN优化性能、做好持续监控与自动化运维。其中&#xff0c;服务的松耦合尤为重要。松耦合意味着系统中各服务之间的依赖关系较弱&#x…...

Python基于Django的小区监控图像拼接系统【附源码、文档说明】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

ElasticSearch快速入门--实现分词搜索

分词题目搜索 使用Elasticsearch实现题目数据的存储和分词搜索&#xff0c;需要将数据库的数据同步到 Elasticsearch。 ElasticSearch入门 ElasticSearch&#xff08;简称ES&#xff09;是一个开源的分布式搜索和数据分析引擎&#xff0c;用Java开发并且是当前最流行的开源的…...

解读探寻数字影像新路径:树莓集团现状最新进展

树莓集团在数字影像领域展现出强劲的发展势头&#xff0c;其核心战略在于构建完整的数字产业生态链。 产业园建设与运营 全国布局&#xff1a; 树莓集团已在全国范围内建设并运营多个国际数字影像产业园&#xff0c;旨在打造区域性的数字产业高地。 成都案例&#xff1a; 在成…...

数据治理之数据仓库

本文主要阐述了数据仓库在大数据平台项目中的地位和重要性,对目前市场上数据仓库主流设计进行分析说明,讲述了通用数据仓库设计上所应考虑的因素。 数据仓库介绍 数据仓库是一个过程而不是一个项目;数据仓库是一个环境,而不是一件产品。数据仓库提供用户用于决策支持的当前…...

自由学习记录(48)

When the material of an object disappears, the light and shadow also disappear (synchronized) Tiling And Offset 显示的是四分之一前面的&#xff0c;不是中间的四分之一块&#xff0c; 准确的还是跟着视频学&#xff0c; &#xff0c;AI一些回答会散发一种“奇怪的错味…...

zynq7020 最小ps环境速通

1 简介 环境: 硬件 野火 zynq 皓月 xc7z020clg400-1 软件: vivado2020.2 vitis2020.2 petalinux2020.2 搭建 ps 的最小环境,跑裸机 helloworld 测试 uart 和 ddr,跑 linux 系统. 2 ps 环境搭建 2.1 uart 2.1 ddr 2.1 删除 pl 接口,包括 pl 时钟,pl 时钟复位,axi_m. 具体略…...

Modbus RTU ---> Modbus TCP透传技术实现(Modbus透传、RS485透传、RTU透传)分站代码实现

文章目录 Modbus RTU到Modbus TCP透传技术实现1. 透传技术概述1.1 透传基本原理- 协议帧格式转换- 地址映射与管理- 通信时序适配- 错误检测与处理 2. 透传网关硬件架构2.1 典型硬件结构- 微控制器/处理器(ARM、STM32等)- RS-485/RS-232收发器- 以太网控制器(如W5500)- 电源管理…...

【SOC 芯片设计 DFT 学习专栏 -- IDDQ 测试 与 Burn-In 测试】

文章目录 IDDQ 测试与 Burn-In 测试IDDQ 测试工作原理测试过程优点局限性示例 2. Burn-In 测试工作原理测试过程优点局限性示例 总结对比 IDDQ 测试和 Burn-in 测试&#xff1a; IDDQ 测试与 Burn-In 测试 本文将详细介绍 DFT 中 IDDQ测试 和 burn-in测试模式 IDDQ 测试 IDD…...

Rust从入门到精通之进阶篇:19.Rust 生态系统

Rust 生态系统 Rust 拥有一个丰富而活跃的生态系统,提供了各种库和框架来支持不同领域的开发。在本章中,我们将探索 Rust 生态系统中的主要组件,了解常用的库和工具,以及如何在项目中有效地使用它们。 Rust 包管理:Cargo 和 crates.io Cargo 回顾 Cargo 是 Rust 的构建…...

【HarmonyOS Next】三天撸一个BLE调试精灵

【HarmonyOS Next】三天撸一个BLE调试精灵 一、功能介绍 BLE调试精灵APP属于工具类APP&#xff0c;在用户使用的过程中&#xff0c;负责调试BLE设备从机端&#xff0c;比如蓝牙耳机、低功耗设备、带有BLE的空调等设备&#xff0c;可以在页面中清晰看到设备的厂商&#xff0c;…...

STM32实现智能温控系统(暖手宝):PID 算法 + DS18B20+OLED 显示,[学习 PID 优质项目]

一、项目概述 本文基于 STM32F103C8T6 单片机&#xff0c;设计了一个高精度温度控制系统。通过 DS18B20 采集温度&#xff0c;采用位置型 PID 算法控制 PWM 输出驱动 MOS 管加热Pi膜&#xff0c;配合 OLED 实时显示温度数据。系统可稳定将 PI 膜加热至 40℃&#xff0c;适用于…...

【docker】docker-compose安装RabbitMQ

docker-compose安装RabbitMQ 1、配置docker-compose.yml文件&#xff08;docker容器里面的目录请勿修改&#xff09;2、启动mq3、访问mq4、查看服务器映射目录5、踩坑5.1、权限不足 1、配置docker-compose.yml文件&#xff08;docker容器里面的目录请勿修改&#xff09; versi…...

如何突破MacBook苹果电脑Cursor限制:免费版的解决方法

Macbook苹果电脑无限白嫖Cursor|解决免费版限制问题|达到50次150次续杯|arm|intel 如何突破MacBook苹果电脑Cursor限制&#xff1a;免费版的解决方法 前言 本文介绍了如何在MacBook上突破Cursor免费版的使用限制。请遵循以下步骤进行操作。 操作步骤 进入程序目录&#xff1a;…...

网络原理之传输层

前文我们了解 应用层 传输层 网络层 数据链路层 物理层 这五层结构,此文我先讨论传输层相关的知识 1. 传输层 负责数据能够从发送端传输到接收端. 1.1 端口号 端⼝号(Port)标识了⼀个主机上进行通信的不同的应用程序 端口号范围划分: 0-1023:知名端口号,HTTP,FTP,SSH等这些…...

一个免费 好用的pdf在线处理工具

pdf24 doc2x 相比上面能更好的支持数学公式。但是收费...

新书速览|云原生Kubernetes自动化运维实践

《云原生Kubernetes自动化运维实践》 本书内容&#xff1a; 《云原生Kubernetes自动化运维实践》以一名大型企业集群运维工程师的实战经验为基础&#xff0c;全面系统地阐述Kubernetes&#xff08;K8s&#xff09;在自动化运维领域的技术应用。《云原生Kubernetes自动化运维实践…...

解决安卓so库异常无法打印堆栈的问题

解决方案&#xff1a; 设置 android:extractNativeLibs"true" 直接在 AndroidManifest.xml 里加上&#xff1a; <applicationandroid:extractNativeLibs"true"> </application>这样&#xff0c;so 文件会被解压&#xff0c;崩溃时可以正常打…...

996引擎-接口测试:背包

996引擎-接口测试:背包 背包测试NPC参考资料背包测试NPC CONSTANT = require("Envir/QuestDiary/constant/CONSTANT.lua"); MsgUtil = require("Envir/QuestDiary/utils/996/MsgUtil.lua");...

红数码影视(RED Digital Cinema)存储卡格式化后的恢复方法

红数码影视(RED Digital Cinema)的摄像机可以生成两种RAW级高清视频文件&#xff0c;一种是R3D&#xff0c;一种是MOV。其中MOV属于苹果(apple)公司的QT视频封装结构&#xff0c;使用的视频编码是Apple ProRes;而R3D则是RED公司自创的RAW视频文件&#xff0c;这种文件解码需要使…...

若依前端框架增删改查

1.下拉列表根据数据库加载 这个是用来查询框 绑定了 change 事件来处理站点选择变化后的查询逻辑。 <el-form-item label"站点选择" prop"stationId" v-has-permi"[ch:m:y]"><el-select v-model"queryParams.stationId" pl…...

YARN Cluster模式和Client模式的区别是什么

在 Apache Spark 的 YARN 部署中&#xff0c;Cluster 模式和Client 模式的核心区别在于 Driver 的启动位置和客户端&#xff08;提交任务的机器&#xff09;的角色。以下是两者的详细对比&#xff1a; 1. 核心区别概览 特性YARN Cluster 模式YARN Client 模式Driver 位置在 YA…...

哪吒汽车:一边熬夜蹦迪,一边找药投医

两年前&#xff0c;威马CEO沈晖发了个短视频&#xff0c;内容是“活下去&#xff0c;像牲口一样活下去”。 如今最能体会沈晖当时心情的&#xff0c;估计就是方运舟了。 作为哪吒汽车创始人兼董事长&#xff0c;他连续多次被限高&#xff0c;为了让哪吒汽车活下去&#xff0c…...