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

栈和队列经典笔试题

文章目录

  • 栈和队列的回顾💻
    • 栈🩳
    • 队列👟
  • 栈和队列经典笔试题🔋
    • 有效的括号🎸
    • 用队列实现栈 🕯
    • 用栈实现队列🔭
    • 设计循环队列🧼

安静的夜晚 你在想谁吗

栈和队列的回顾💻

栈🩳

栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则
一般使用数组实现栈在这里插入图片描述

物理图表示入栈和出栈(后进先出)在这里插入图片描述

队列👟

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出。FIFO(First In First Out)

入队列:进行插入操作的一端称为队尾 ;出队列:进行删除操作的一端称为队头。 在这里插入图片描述

物理图表示入队和出队(先进先出)
在这里插入图片描述

栈和队列经典笔试题🔋

有效的括号🎸

力扣题目链接:有效的括号
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

下面是几个示例:
在这里插入图片描述

题目分析
本题通俗的来讲,就是判断括号是否是匹配的,即括号的类型是否匹配和数量是否匹配。我们可以使用栈的知识来解决这道题:从给定序列的第一个字符开始遍历,如果遍历遇到左括号,就入栈;如果遍历遇到右括号,则先取栈顶元素,再出栈(因为合适的匹配必须是栈),判断栈顶元素与这个右括号是否匹配。
需要注意的点有:尽量每次循环只遍历一个元素或只对一个元素进行判断,这样可以保证数量匹配的正确性。当遍历一个元素不是左括号的时候,就判断栈中是否为空,如果栈为空,则说明数量是不匹配的;如果栈不为空,则要对这个右括号是否和栈顶的左括号匹配进行判断。
其实本题比较复杂的还是结构的问题,毕竟不用C++的,这个栈的功能需要我们自己去实现。
力扣代码(含栈结构)

typedef char STDataType;
typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;void STInit(ST* ps);
void STDestroy(ST* ps);
void STPush(ST* ps, STDataType x);
void STPop(ST* ps);
STDataType STtop(ST* ps);
int STsize(ST* ps);
bool STEmpty(ST* ps);
void STInit(ST* ps)
{ps->a = NULL;ps->top = 0;ps->capacity = 0;
}
void STDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}
void STPush(ST* ps, STDataType x)
{assert(ps);if (ps->top == ps->capacity){int NEWcapacity = (ps->capacity == 0) ? 4 : (ps->capacity * 2);//扩容STDataType* tmp = realloc(ps->a, sizeof(STDataType) * NEWcapacity);if (tmp == NULL){perror("realloc fail");exit(-1);}ps->a = tmp;ps->capacity = NEWcapacity;}ps->a[ps->top] = x;ps->top++;
}
void STPop(ST* ps)
{assert(ps);assert(ps->top > 0);ps->top--;
}
//获取栈顶元素
STDataType STtop(ST* ps)
{assert(ps);assert(ps->top>0);return ps->a[ps->top-1];
}int STsize(ST* ps)
{assert(ps);return ps->top;
}bool STEmpty(ST* ps)
{assert(ps);return (ps->top == 0);
}bool isValid(char * s){ST st;STInit(&st);char stack_top;while(*s){if(*s=='('||*s=='['||*s=='{'){STPush(&st,*s);}	else{if(STEmpty(&st)){STDestroy(&st);return false;}stack_top=STtop(&st);STPop(&st);if(*s==')'&&stack_top!='('||*s==']'&&stack_top!='['||*s=='}'&&stack_top!='{'){STDestroy(&st);return false;}}s++;}if(!STEmpty(&st)){STDestroy(&st);return false;}return true;
}

当代码在所有不满足的情况下依旧没有返回 false 的时候,则说明它是满足括号的有效性的。

用队列实现栈 🕯

力扣题目链接:用队列实现栈
在这里插入图片描述
你只能使用队列的基本操作 —— 也就是 push to backpeek/pop from frontsizeis empty 这些操作。
你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

范例:
在这里插入图片描述
题目分析及思路
队列是先进先出,要实现一个后进先出的栈,一个队列肯定是不行的,必须使用两个队列来互相导着来实现。例如,我现在要对这个数据结构入4个元素:1 2 3 4
在这里插入图片描述
队列只能 pop 先 push 的元素,而要达到将最后进入的元素 pop 的目的,就需要另一个队列来帮忙了:先将所有元素都push到队列1,取 队列1 头位置的元素,将它 push 到 队列2 中后,再将 队列1 中这个元素 pop 掉。如此往复,直到 队列1 中只剩下一个元素,这就是栈结构中需要 pop 的元素。
在这里插入图片描述

在这里插入图片描述
再将最后这个元素pop掉,就相当于将栈结构里的栈顶元素pop掉了。这样就实现了栈的pop功能。
在上面的例子中,我们可以总结出队列实现栈的一般规律:实现push数据,就往空的队列里push;实现pop数据,先将费控队列的前n-1个元素导入空队列,并pop这n-1个元素,最后将剩下的那个元素pop掉即可实现栈的pop功能。
力扣代码(含结构)

typedef int QDataType;
typedef struct QueueNode {QDataType data;struct QueueNode* next;
}QNode;
typedef struct Queue {QNode* head;QNode* tail;int size;
}Que;
void QueueInit(Que*pq);
void QueueDestroy(Que* pq);
void QueuePush(Que* pq, QDataType x);
void QueuePop(Que* pq);
QDataType QueueFront(Que* pq);
QDataType QueueBack(Que* pq);
bool QueueEmpty(Que* pq);
int QueueSize(Que* pq);
void QueueInit(Que* pq)
{assert(pq);pq->head = pq->tail = NULL;pq->size = 0;
}
void QueueDestroy(Que* pq)
{assert(pq);QNode* cur = pq->head;while (cur){QNode* next = cur->next;free(cur);cur = next;}
}
void QueuePush(Que* pq, QDataType x)
{assert(pq);QNode* nownode = (QNode*)malloc(sizeof(QNode));if (nownode == NULL){perror("malloc fail");exit(-1);}nownode->data = x;nownode->next = NULL;if (pq->tail == NULL){pq->head = pq->tail = nownode;}else{pq->tail->next = nownode;pq->tail = nownode;}pq->size++;
}
void QueuePop(Que* pq)
{assert(pq);assert(pq->head != NULL);if (pq->head->next == NULL){free(pq->head);pq->head = pq->tail = NULL;}else{QNode* next = pq->head->next;free(pq->head);pq->head = next;}pq->size--;
}
QDataType QueueFront(Que* pq)
{assert(pq);assert(pq->head != NULL);return pq->head->data;
}
QDataType QueueBack(Que* pq)
{assert(pq);assert(pq->head!=NULL);return pq->tail->data;}
bool QueueEmpty(Que* pq)
{assert(pq);return pq->head == NULL;
}
int QueueSize(Que* pq)
{assert(pq);return pq->size;
}typedef struct {Que q1,q2;
} MyStack;MyStack* myStackCreate() {MyStack*pst=(MyStack*)malloc(sizeof(MyStack));QueueInit(&pst->q1);//->的优先级高于&,其实是&(pst->q1),将定义的结构体变量的地址传过去QueueInit(&pst->q2);return pst;
}void myStackPush(MyStack* obj, int x) {if(!QueueEmpty(&obj->q1)){QueuePush(&obj->q1,x);}else{QueuePush(&obj->q2,x);}
}int myStackPop(MyStack* obj) {Que*empty=&obj->q1;Que*nonEmpty=&obj->q2;if(!QueueEmpty(&obj->q1)){empty=&obj->q2;nonEmpty=&obj->q1;}//把非空队列的前size-1个元素push到空队列while(QueueSize(nonEmpty)>1){QueuePush(empty,QueueFront(nonEmpty));QueuePop(nonEmpty);}int top=QueueFront(nonEmpty);QueuePop(nonEmpty);return top;
}int myStackTop(MyStack* obj) {if(QueueEmpty(&obj->q1)){return QueueBack(&obj->q2);}else{return QueueBack(&obj->q1);}
}bool myStackEmpty(MyStack* obj) {return QueueEmpty(&obj->q1)&&QueueEmpty(&obj->q2);}void myStackFree(MyStack* obj) {QueueDestroy(&obj->q1);QueueDestroy(&obj->q2);free(obj);
}/*** Your MyStack struct will be instantiated and called as such:* MyStack* obj = myStackCreate();* myStackPush(obj, x);* int param_2 = myStackPop(obj);* int param_3 = myStackTop(obj);* bool param_4 = myStackEmpty(obj);* myStackFree(obj);
*/

用栈实现队列🔭

力扣题目链接:用栈实现队列
在这里插入图片描述
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
范例:
在这里插入图片描述
题目分析及思路
题目要求只使用栈的基本操作实现一个队列,这就需要两个栈进行‘合作’来完成。
例如,现在要往队列中 push 四个数据1,2,3,4。
创建两个栈,一个pushst,一个popst,如图,先将这四个数据push到 pushst 这个栈中。
在这里插入图片描述
现在,如果要实现队列的 pop 操作,就要将数据1 删除,但栈只能pop栈顶元素,所以只能先将pushst中的‘上面’的三个数据先导过来(取栈顶元素,再pop),然后数据1 就变成了 pushst 的栈顶元素,直接pop即可。
在这里插入图片描述
接下来,如果队列还需要 pop 数据的话,只需要在 popst 中 pop 即可。
如果要 push 数据,直接push 到pushst中,再次push后,如果要pop数据,需要将popst中的数据pop完后(直接取栈顶元素),将 pushst 中新push 的 n-1 个数据先导过去,再用上面的方式(出popst中的数据即可)。
总结:定义两个栈,队列需要push数据的时候,先往pushst中push数据(此时栈popst中为空),首次需要pop数据的时候,先将pushst中push的n-1个数据导入popst中,然后将最后一个元素pop掉,这就是队列要pop的头。当将n-1个数据导入popst中后,如果队列再要pop数据,就直接使用栈 popst 进行pop数据,入数据的时候就继续在pushst中压栈,当popst中的数据pop完了直接还要pop的话,就需要再将pushst中的n-1个元素导过去,如此往复…
力扣代码(含结构)

typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;//栈顶位置int capacity;//栈空间大小
}ST;
void STInit(ST* ps);
void STPush(ST* ps,STDataType x);
void STPrint(ST* ps);
void STPop(ST* ps);
void STDestroy(ST* ps);
STDataType STTop(ST* ps);
int STSize(ST* ps);
bool STEmpty(ST* ps);void STInit(ST* ps)
{assert(ps);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}
void STPush(ST* ps, STDataType x)
{assert(ps);if (ps->capacity==ps->top){int newcapacity = (ps->capacity == 0) ? 4 : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, newcapacity * sizeof(ps->a));if (tmp == NULL){perror("realloc fail");exit(-1);}ps->capacity = newcapacity;ps->a = tmp;}ps->a[ps->top] = x;ps->top++;
}
void STPrint(ST* ps)
{assert(ps);int i = 0;for (i = 0; i < ps->top; i++){printf("%d ", ps->a[i]);}printf("\n");
}
void STPop(ST* ps)
{assert(ps);assert(ps->top>0);(ps->top)--;
}
void STDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = ps->top = 0;
}
STDataType STTop(ST* ps)
{assert(ps);assert(ps->top > 0);return ps->a[ps->top - 1];
}
int STSize(ST* ps)
{assert(ps);return ps->top;
}
bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}typedef struct {ST pushst;ST popst;
} MyQueue;MyQueue* myQueueCreate() {MyQueue*obj=(MyQueue*)malloc(sizeof(MyQueue));STInit(&obj->pushst);STInit(&obj->popst);return obj;
}void myQueuePush(MyQueue* obj, int x) {STPush(&obj->pushst,x);
}int myQueuePop(MyQueue* obj) {int front=myQueuePeek(obj);STPop(&obj->popst);return front;
}int myQueuePeek(MyQueue* obj) {if(STEmpty(&obj->popst)){while(STSize(&obj->pushst)>0){STPush(&obj->popst,STTop(&obj->pushst));STPop(&obj->pushst);}}return STTop(&obj->popst);
}bool myQueueEmpty(MyQueue* obj) {return STEmpty(&obj->popst)&&STEmpty(&obj->pushst);
}void myQueueFree(MyQueue* obj) {STDestroy(&obj->pushst);STDestroy(&obj->popst);free(obj);
}

设计循环队列🧼

力扣题目链接:设计循环队列
在这里插入图片描述
范例:
在这里插入图片描述
个人理解:当我们使用数组(顺序表)来实现队列的时候,随着出数据的时候队头不断前移,那么队列的容量(队头到队尾)将会越来越小,如下图:
在这里插入图片描述
所以可以采用循环队列的方式来维持队列容量的恒定。
此题需要的空间固定为k,并且要将这些空间重复利用,所以采用用数组实现最为合适。
思路
开辟数组空间的时候‘多开一个’,利用数组的下标来控制队尾和队头的位置。
比如,当队列的长度为4的时候,就开辟5块空间的地址,最后一块空间用来把握队列长度来防止越界。当队头和队尾相等的时候,说明队列为空;当(队尾+1)%(k+1)等于队头的时候,说明队头和队尾之间只有一块空间的地址,说明队列已满。
力扣代码

typedef struct {int*a;int k;int front;int rear;
} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue*obj=(MyCircularQueue*)malloc(sizeof(MyCircularQueue));obj->a=(int*)malloc(sizeof(int)*(k+1));obj->k=k;obj->front=obj->rear=0;return obj;
}bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->front==obj->rear;
}bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->rear+1)%(obj->k+1)==obj->front;
}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj))return false;obj->a[obj->rear]=value;obj->rear++;obj->rear%=obj->k+1;return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return false;obj->front++;obj->front%=obj->k+1;return true;
}int myCircularQueueFront(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return -1;return obj->a[obj->front];
}int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return -1;return obj->a[(obj->rear+obj->k)%(obj->k+1)];
}void myCircularQueueFree(MyCircularQueue* obj) {free(obj->a);obj->a=NULL;free(obj);obj=NULL;
}/*** Your MyCircularQueue struct will be instantiated and called as such:* MyCircularQueue* obj = myCircularQueueCreate(k);* bool param_1 = myCircularQueueEnQueue(obj, value);* bool param_2 = myCircularQueueDeQueue(obj);* int param_3 = myCircularQueueFront(obj);* int param_4 = myCircularQueueRear(obj);* bool param_5 = myCircularQueueIsEmpty(obj);* bool param_6 = myCircularQueueIsFull(obj);* myCircularQueueFree(obj);
*/

相关文章:

栈和队列经典笔试题

文章目录 栈和队列的回顾&#x1f4bb;栈&#x1fa73;队列&#x1f45f; 栈和队列经典笔试题&#x1f50b;有效的括号&#x1f3b8;用队列实现栈 &#x1f56f;用栈实现队列&#x1f52d;设计循环队列&#x1f9fc; 安静的夜晚 你在想谁吗 栈和队列的回顾&#x1f4bb; 栈&am…...

No5.9:多边形内角和公式

#!/usr/bin/python # -*- coding: UTF-8 -*-#指定了编码&#xff0c;中文就能正常展示 # codingutf-8def calc_degree(n):#n代表边形的总数degree (n - 2) * 180#多边形内角和公式return degreeprint(calc_degree(3))#三角形的内角和 print(calc_degree(4))#四边形的内角和【小…...

EditPlus 配置python 及Anaconda中的python

若不是pycharm vscode 太大&#xff0c;太占内存&#xff0c;谁会想到用Notepad&#xff0c;EdirPlus 配置python呢&#xff01;&#xff01;&#xff01; 话不多说&#xff0c;首先你自己安装好EditPlus。开始 菜单栏 选择 工具 -> 配置自定义工具 组名:python 命令:d:\*…...

linux 编译 llvm + clang

1. 需要下载以下三个压缩包&#xff0c;下载源码&#xff1a;Release LLVM 15.0.7 llvm/llvm-project GitHub clang-15.0.7.src.tar.xzcmake-15.0.7.src.tar.xzllvm-15.0.7.src.tar.xz​​​​​ 2. 解压后将 clang 源码放入 llvm/tools/ 下 3. 将解压后的 cmake-15.0.7…...

Mybatis 框架 ( 四 ) QueryWrapper

4.5.Wrapper条件构造器 Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 AbstractWrapper &#xff1a; 用于查询条件封装&#xff0c;生成 sql 的 where 条件 QueryWrapper &#xff1a; Entity 对象封装操作类&#xff0c;不是用lambda语法 UpdateWrapper &am…...

数据结构和算法之二分法查找

二分法查找&#xff0c;也称作二分查找或折半查找&#xff0c;是一种在有序数组中快速查找特定元素的算法。它采用分治法思想&#xff0c;通过将问题划分为规模更小的子问题&#xff0c;并且通过对子问题的查找来解决原问题。 二分法查找的思路是不断地将数组一分为二&#xf…...

系统日期如何在页面展示,框架是react或者vue3

安装插件dayjs或者moment.js 2.使用setInterval&#xff08;useInterval&#xff09;或者requestAnimationFrame react项目中useInterval的代码示例&#xff1a; import React, {useState } from react; import { useInterval } from "ahooks"; import moment fro…...

(二十二)大数据实战——Flume数据采集之故障转移案例实战

前言 本节内容我们完成Flume数据采集的故障转移案例&#xff0c;使用三台服务器&#xff0c;一台服务器负责采集nc数据&#xff0c;通过使用failover模式的Sink处理器完成监控数据的故障转移&#xff0c;使用Avro的方式完成flume之间采集数据的传输。整体架构如下&#xff1a;…...

前端小案例3:Flex弹性布局行内元素宽度自适应

前端小案例3&#xff1a;Flex弹性布局行内元素宽度自适应 项目背景&#xff1a;需要在一行上展示空调设备的三个模式&#xff08;制冷、制热、通风&#xff09;或者两个模式&#xff08;制冷、制热&#xff09;&#xff1b;因为不同产品的模式数量不同&#xff0c;因此需要让模…...

纳尼?小说还要用看的?这可以听!无广!

这是一款听书软件&#xff0c;可以自定义书源&#xff0c;自己设置书架&#xff0c;页面简单易操作&#xff0c;无广告。 支持直接搜索书名&#xff0c;链接&#xff0c;图文&#xff0c;本地文件等方式听书 拥有30多主播声音&#xff0c;分类细致 支持倍速、添加BGM等...

【微服务部署】四、Jenkins一键打包部署NodeJS(Vue)前端项目步骤详解

本文介绍使用Jenkins一键将NodeJS&#xff08;Vue&#xff09;前端项目打包并上传到生产环境服务器&#xff0c;这里使用的是直接打包静态页面&#xff0c;发送到远程服务器Nginx配置目录的方式&#xff0c;首先确保服务器环境配置好&#xff0c;安装Nginx&#xff0c;运行目录…...

【前端】禁止别人调试自己的前端页面代码

无限debugger 前端页面防止调试的方法主要是通过不断 debugger 来疯狂输出断点&#xff0c;因为 debugger 在控制台被打开的时候就会执行由于程序被 debugger 阻止&#xff0c;所以无法进行断点调试&#xff0c;所以网页的请求也是看不到的代码如下&#xff1a; /** * 基础禁止…...

UDP的可靠性传输

UDP系列文章目录 第一章 UDP的可靠性传输-理论篇&#xff08;一&#xff09; 第二章 UDP的可靠性传输-理论篇&#xff08;二&#xff09; 文章目录 UDP系列文章目录前言1.TCP 和UDP格式对比2.UDP分片原理3.UDP 传输层应该注意问题4.MTU5.UDP 分片机制设计重点 一、ARQ协议什么…...

科研笔记:TPAMI submission guideline

1 author information Author Information - IEEE Transactions on Pattern Analysis and Machine Intelligence | IEEE Computer Society Digital Library 1.1 会议期刊extension 当一个TPAMI的提交基于之前的会议论文时&#xff0c;IEEE要求期刊论文是之前出版物的“实质…...

Python文件操作(02):打开文件、读文件、关闭文件

一、读文本文件 打开文件读文件内容关闭文件 1、在读取文件内容后进行解码操作 """ 1. 打开文件- 路径&#xff1a;相对路径&#xff1a;当前项目&#xff08;读文件.py&#xff09;所在的目录下查找需要读取的文件绝对路径&#xff1a;文件--右键--Copy Pat…...

C语言访问Mysql

文章目录 C语言访问Mysql1. 环境设置2. mysql接口介绍(1) 初始化mysql_init()(2) 链接数据库mysql_real_connect(3) 下发mysql命令mysql_query()(4) 获取执行结果mysql_store_result(5) 释放结果集mysql_free_result()(6) 获取结果行数mysql_num_rows(7) 获取结果列数mysql_num…...

软件设计师(十)网络与信息安全基础知识

计算机网络是由多台计算机组成的系统&#xff0c;与传统的单机系统、多机系统相比有很大的区别。 一、网络概述 计算机网络是计算机技术与通信技术相结合的产物&#xff0c;它实现了远程通信、远程信息处理和资源共享。 1、计算机网络的概念 计算机网络的定义是利用通信设备…...

蓝桥杯官网填空题(换零钞)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 X 星球的钞票的面额只有&#xff1a;100 元&#xff0c;5 元&#xff0c;2 元&#xff0c;1 元&#xff0c;共 4 种。 小明去 X 星旅游&#xff0c;他手里只有 2 张…...

JavaFX之Stage

Stage&#xff08;舞台&#xff09;&#xff0c;它代表了一个顶级窗口&#xff0c;是JavaFX应用程序的主要容器。Stage可以包含多个场景&#xff08;Scene&#xff09;&#xff0c;每个场景可以包含各种用户界面元素&#xff08;如按钮、文本框等&#xff09;。Stage提供了许多…...

深度翻页导出导致慢SQL,mysqlCPU飙升优化方案

慢SQL原因分析&#xff1a; 1.深度翻页 2.多表JOIN 3. 大IN 4. id倒排序 本文针对深度翻页的优化进行探讨 方案1&#xff1a; 将limit offset, pageSize的方式改成 id > xx limit pageSize. 这样能走Id索引&#xff0c;提高速度。 缺点&#xff1a;不能使用多线程…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...