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

数据结构:栈和队列的实现和图解二者相互实现

文章目录

  • 写在前面
    • 什么是栈
    • 栈的实现
  • 队列
    • 什么是队列
    • 队列的实现
  • 用队列实现栈
  • 用栈模拟队列

写在前面

栈和队列的实现依托的是顺序表和链表,如果对顺序表和链表不清楚是很难真正理解栈和队列的

下面为顺序表和链表的实现和图解讲解
手撕图解顺序表
手撕图解单链表

什么是栈

栈是一种数据结构,遵循的原则是后入先出,简单来说就是先入栈的最后出,最后入栈的先出

栈在实际应用中也是有很多场景,例如在使用网页时,我们点入了多个网页,退出返回的时候遵循的就是栈的后入先出原则

栈的实现

既然知道了栈的原则,那么就进行栈的实现用什么比较好,首先确定是可以用线性表实现,观察栈的使用原则不难发现,它只涉及一端的输入输出,这就意味着使用顺序表是很好的解决方案

栈的功能也不算多,入栈出栈检查栈满查看栈顶元素…整体看,栈就是顺序表的变形,这里对栈的实现不进行过多补充,重点在于后面和队列的相互实现

首先列出栈的定义和栈要实现的部分,声明和定义分离是个好习惯

// stack.h
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>// 支持动态增长的栈
typedef int STDataType;
typedef struct Stack
{STDataType* _a;int _top;		// 栈顶int _capacity;  // 容量 
}Stack;// 初始化栈 
void StackInit(Stack* ps);// 入栈 
void StackPush(Stack* ps, STDataType data);// 出栈 
void StackPop(Stack* ps);// 获取栈顶元素 
STDataType StackTop(Stack* ps);// 获取栈中有效元素个数 
int StackSize(Stack* ps);// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 
int StackEmpty(Stack* ps);// 销毁栈 
void StackDestroy(Stack* ps);

下面是对栈的实现,几乎都是顺序表的基本操作,实现很简单

// stack.c
#include "stack.h"void StackInit(Stack* ps)
{assert(ps);STDataType* tmp = NULL;int newcapacity = ps->_capacity == 0 ? 4 : ps->_capacity * 2;tmp = (STDataType*)realloc(ps->_a, sizeof(STDataType) * newcapacity);if (tmp == NULL){perror("realloc fail");return;}ps->_capacity = newcapacity;ps->_a = tmp;
}void StackPush(Stack* ps, STDataType data)
{assert(ps);if (ps->_capacity == ps->_top){STDataType* tmp = NULL;int newcapacity = ps->_capacity == 0 ? 4:ps->_capacity * 2;tmp = (STDataType*)realloc(ps->_a,sizeof(STDataType)* newcapacity);if (tmp == NULL){perror("realloc fail");return;}ps->_capacity = newcapacity;ps->_a = tmp;}ps->_a[ps->_top] = data;ps->_top++;
}bool STEmpty(Stack* ps)
{assert(ps);return ps->_top == 0;
}void StackPop(Stack* ps)
{assert(ps);assert(!STEmpty(ps));ps->_top--;
}STDataType StackTop(Stack* ps)
{assert(ps);assert(!STEmpty(ps));return ps->_a[ps->_top-1];
}int StackSize(Stack* ps)
{assert(ps);return ps->_top;
}int StackEmpty(Stack* ps)
{assert(ps);if (0 == ps->_top)return 1;elsereturn 0;
}void StackDestroy(Stack* ps)
{assert(ps);ps->_capacity = 0;ps->_top = 0;free(ps->_a);ps->_a = NULL;
}

整体看,只要掌握了顺序表,栈的实现是很轻松的

队列

什么是队列

从名字来看,队列在日常生活中也经常遇到,不管在哪里都少不了排队的概念,而在有秩序的队列中,进队列都是从后面进队列,出队列都是从头出队列,这就类似于链表中的头删和尾插

那么队列的定义就有了,先进的先出,后进的后出,这就是队列的定义
队列实现还是和线性表有关,具体选顺序表还是链表要进行分析:

如果选用顺序表,顺序表的头删和尾插显然不如链表,你可能有这样的解决方案:我们可以选用数组下标当作头和尾,这样就能模拟头部少一个和尾部加一个,的确,这样可以解决,但是下一个问题是数组的长度并不好管控,如果想要完美的充分利用顺序表,就必须要使用循环数组,循环数组的下标并不好掌控,因此这里使用链表是很合适的选择

这里是关于循环数组的解析和模拟实现队列:
解析循环数组

队列的实现

// queue.h
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>typedef int QDataType;
typedef struct QueueNode
{struct QueueNode* next;QDataType data;
}QNode;typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;void QueueInit(Queue* pq);void QueueDestroy(Queue* pq);void QueuePush(Queue* pq, QDataType x);void QueuePop(Queue* pq);QDataType QueueFront(Queue* pq);QDataType QueueBack(Queue* pq);int QueueSize(Queue* pq);bool QueueEmpty(Queue* pq);

上述函数的声明具体实现如下:

// queue.c
#include "queue.h"#include"Queue.h"void QueueInit(Queue* pq)
{assert(pq);pq->phead = NULL;pq->ptail = NULL;pq->size = 0;
}void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur = pq->phead;while (cur){QNode* next = cur->next;free(cur);cur = next;}pq->phead = pq->ptail = NULL;pq->size = 0;
}void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("malloc fail\n");return;}newnode->data = x;newnode->next = NULL;if (pq->ptail == NULL){assert(pq->phead == NULL);pq->phead = pq->ptail = newnode;}else{pq->ptail->next = newnode;pq->ptail = newnode;}pq->size++;
}void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));// 1、一个节点// 2、多个节点if (pq->phead->next == NULL){free(pq->phead);pq->phead = pq->ptail = NULL;}else{// 头删QNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--;
}QDataType QueueFront(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->phead->data;
}QDataType QueueBack(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->ptail->data;
}int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}

栈和队列本身是没有难度的,但是如果使用栈去实现队列,用队列去实现栈呢?
下面分析如何实现队列和栈的相互实现:

用队列实现栈

先看原理图:

在这里插入图片描述
代码实现也不算难,实现如下:

#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>typedef int QDataType;
typedef struct QueueNode
{struct QueueNode* next;QDataType data;
}QNode;typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;
#include "queue.h"#include"Queue.h"void QueueInit(Queue* pq)
{assert(pq);pq->phead = NULL;pq->ptail = NULL;pq->size = 0;
}void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur = pq->phead;while (cur){QNode* next = cur->next;free(cur);cur = next;}pq->phead = pq->ptail = NULL;pq->size = 0;
}void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("malloc fail\n");return;}newnode->data = x;newnode->next = NULL;if (pq->ptail == NULL){assert(pq->phead == NULL);pq->phead = pq->ptail = newnode;}else{pq->ptail->next = newnode;pq->ptail = newnode;}pq->size++;
}void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));// 1、一个节点// 2、多个节点if (pq->phead->next == NULL){free(pq->phead);pq->phead = pq->ptail = NULL;}else{// 头删QNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--;
}QDataType QueueFront(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->phead->data;
}QDataType QueueBack(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->ptail->data;
}int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}
typedef struct Mystack
{Queue push;Queue pop;
}Mystack;void MsInit(Mystack* ps)
{assert(ps);QueueInit(&(ps->push));QueueInit(&(ps->pop));
}void MsPush(Mystack* ps,QDataType x)
{assert(ps);QueuePush(&(ps->push), x);
}void MsPop(Mystack* ps)
{while (QueueSize(&(ps->push)) > 1){QueuePush(&(ps->pop), QueueFront(&(ps->push)));QueuePop(&(ps->push));}QueuePop(&(ps->push));while (!QueueEmpty(&(ps->pop))){QueuePush(&(ps->push), QueueFront(&(ps->pop)));QueuePop(&(ps->pop));}
}QDataType MsTop(Mystack* ps)
{assert(ps);return ps->push.ptail->data;
}bool MsEmpty(Mystack* ps)
{if (ps->push.size == 0)return true;return false;
}int main()
{Mystack s;MsInit(&s);MsPush(&s, 1);MsPush(&s, 2);MsPush(&s, 3);MsPush(&s, 4);MsPush(&s, 5);while (!MsEmpty(&s)){printf("%d ", MsTop(&s));MsPop(&s);}return 0;
}

用栈模拟队列

和上面的比起来,栈来实现队列就有一些改变:

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>// 支持动态增长的栈
typedef int STDataType;
typedef struct Stack
{STDataType* _a;int _top;		// 栈顶int _capacity;  // 容量 
}Stack;void StackInit(Stack* ps)
{assert(ps);ps->_a = NULL;ps->_top = 0;ps->_capacity = 0;
}void StackPush(Stack* ps, STDataType data)
{assert(ps);if (ps->_capacity == ps->_top){STDataType* tmp = NULL;int newcapacity = ps->_capacity == 0 ? 4:ps->_capacity * 2;tmp = (STDataType*)realloc(ps->_a,sizeof(STDataType)* newcapacity);if (tmp == NULL){perror("realloc fail");return;}ps->_capacity = newcapacity;ps->_a = tmp;}ps->_a[ps->_top] = data;ps->_top++;
}bool STEmpty(Stack* ps)
{assert(ps);return ps->_top == 0;
}void StackPop(Stack* ps)
{assert(ps);assert(!STEmpty(ps));ps->_top--;
}STDataType StackTop(Stack* ps)
{assert(ps);assert(!STEmpty(ps));return ps->_a[ps->_top-1];
}int StackSize(Stack* ps)
{assert(ps);return ps->_top;
}int StackEmpty(Stack* ps)
{assert(ps);if (0 == ps->_top)return 1;elsereturn 0;
}void StackDestroy(Stack* ps)
{assert(ps);ps->_capacity = 0;ps->_top = 0;free(ps->_a);ps->_a = NULL;
}
typedef struct Myqueue
{Stack Push;Stack Pop;
}Myqueue;void MqInit(Myqueue* pq)
{assert(pq);StackInit(&(pq->Push));StackInit(&(pq->Pop));
}void MqPush(Myqueue* pq,STDataType x)
{assert(pq);StackPush(&(pq->Push), x);
}void MqPop(Myqueue* pq)
{while (!StackEmpty(&(pq->Push))){StackPush(&(pq->Pop), StackTop(&(pq->Push)));StackPop(&(pq->Push));}StackPop(&(pq->Pop));while (!StackEmpty(&(pq->Pop))){StackPush(&(pq->Push), StackTop(&(pq->Pop)));StackPop(&(pq->Pop));}
}STDataType MqTop(Myqueue* pq)
{// 把数据从push弄到popwhile (!StackEmpty(&(pq->Push))){StackPush(&(pq->Pop), StackTop(&(pq->Push)));StackPop(&(pq->Push));}STDataType ret = pq->Pop._a[pq->Pop._top-1];// 再把数据弄回去while (!StackEmpty(&(pq->Pop))){StackPush(&(pq->Push), StackTop(&(pq->Pop)));StackPop(&(pq->Pop));}return ret;
}int MqEmpty(Myqueue* pq)
{if (pq->Push._top == 0)return 1;return 0;
}int main()
{Myqueue q;MqInit(&q);MqPush(&q, 1);MqPush(&q, 2);MqPush(&q, 3);MqPush(&q, 4);MqPush(&q, 5);while (!MqEmpty(&q)){printf("%d ", MqTop(&q));MqPop(&q);}return 0;
}

这样就可以直接实现了

整体来说,栈和队列的相互实现的意义不算很大,但是可以很好的更加深入的理解栈和队列的原理

相关文章:

数据结构:栈和队列的实现和图解二者相互实现

文章目录 写在前面栈什么是栈栈的实现 队列什么是队列队列的实现 用队列实现栈用栈模拟队列 写在前面 栈和队列的实现依托的是顺序表和链表&#xff0c;如果对顺序表和链表不清楚是很难真正理解栈和队列的 下面为顺序表和链表的实现和图解讲解 手撕图解顺序表 手撕图解单链表 …...

深入理解C++命名空间

文章目录 1. 命名空间的概念2. 解决命名冲突3. 嵌套命名空间4. 使用命名空间别名总结 在C编程中&#xff0c;命名空间&#xff08;Namespace&#xff09;是一种非常有用的工具&#xff0c;它可以帮助我们组织和管理代码&#xff0c;避免命名冲突。本文将深入介绍C命名空间的概念…...

<MySQL>建表SQ和CRUD SQ脚本案例二

1. MySQL 建表SQ脚本案例&#xff1a; 地域表 CREATE TABLE xxx_region_list_dic (seqId INT(11) NOT NULL AUTO_INCREMENT,sortId INT(11) DEFAULT NULL,name VARCHAR(255) NOT NULL COMMENT 地域,code VARCHAR(25) NOT NULL COMMENT 编码,isEnable VARCHAR(25) DEFAULT NULL…...

webpack基础配置

webpack基础 webpack 处理css兼容问题webpack 处理css闪屏问题webpack 优化压缩css代码总结webpack 两种开发模式webpack 基本的功能webpack配置 5概念devServer 生产环境webpack配置实例开发环境webpack配置实例webpack优化 webpack 处理css兼容问题 下载loader 引入 package…...

宝塔面板Django项目部署(无数据库版)

近日在学习使用宝塔面板部署Django开发的web项目&#xff0c;走了不少弯路花了3天的时间才完成下面的文字&#xff0c;希望这篇文字能给正在摸索中的人带去点帮助。 一、安装宝塔面板 打开宝塔面板的官方网站(https://www.bt.cn/new/index.html).点击" " 会看到: 当…...

windows默认编码格式修改

1.命令提示符界面输入 chcp 936 对应 GBK 65001 对应 UTF-8 2.临时更改编码格式 chcp 936(或65001) 3.永久更改编码格式 依次开控制面板->时钟和区域->区域->管理->更改系统区域设置&#xff0c;然后按下图所示&#xff0c;勾选使用UTF-8语言支持。然后重启电脑。此…...

原生js vue react通用的递归函数

&#x1f642;博主&#xff1a;锅盖哒 &#x1f642;文章核心&#xff1a;原生js vue react通用的递归函数 目录大纲 1.递归函数的由来 2.代码逻辑 1.递归函数的由来 递归函数的由来可以追溯到数学中的递归概念和数学归纳法。 在数学中&#xff0c;递归是指通过定义基本情况和…...

vue指令-v-text和v-html

vue指令-v-text和v-html 1、目标2、语法 1、目标 更新DOM对象的innerText/innerHTML 2、语法 v-text“Vue数据变量" v-html“Vue数据变量"注意&#xff1a;会覆盖插值表达式 示例&#xff1a; <template><div id"app"><div><p v…...

quartus工具篇——PLL IP核的使用

quartus工具篇——PLL IP核的使用 1、PLL简介 PLL(Phase-Locked Loop,相位锁环)是FPGA中非常重要的时钟管理单元,其主要功能包括: 频率合成 - PLL可以生成比输入时钟频率高的时钟信号。频率分频 - PLL也可以输出分频后的较低频率时钟。减小时钟抖动 - PLL可以过滤输入时钟中…...

[Angular] Import TranslateModule in Angular 16

1.Background Angular 更新至V16版后&#xff0c;支援 standalone&#xff0c;故移除了 NgModule&#xff0c;而TranslateModule 又要在AppModule中 import&#xff0c;那该如何做呢&#xff1f; 2.NPM packages installation npm install ngx-translate/core npm install n…...

Web自动化测试高级定位xpath

高级定位-xpath 目录 xpath 基本概念xpath 使用场景xpath 语法与实战 xpath基本概念 XPath 是一门在 XML 文档中查找信息的语言XPath 使用路径表达式在 XML 文档中进行导航XPath 的应用非常广泛XPath 可以应用在UI自动化测试 xpath 定位场景 web自动化测试app自动化测试 …...

2023河南萌新联赛第(二)场:河南工业大学 F - 最短距离

2023河南萌新联赛第&#xff08;二&#xff09;场&#xff1a;河南工业大学 F - 最短距离 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 给定一棵包含 n n n 个顶点的树…...

前端文件上传实践与后端处理——文件分块上传

文件上传是现代Web应用程序中常见的功能之一。在这篇博客中&#xff0c;我们将探讨一个简单但完整的前端文件上传实践&#xff0c;同时提供一个后端示例&#xff0c;演示如何处理上传的文件。我们将使用JavaScript作为前端语言&#xff0c;并结合Node.js作为后端环境。让我们开…...

SFP6012A-ASEMI代理海矽美快恢复二极管参数、尺寸、规格

编辑&#xff1a;ll SFP6012A-ASEMI代理海矽美快恢复二极管参数、尺寸、规格 型号&#xff1a;SFP6012A 品牌&#xff1a;ASEMI 封装&#xff1a;TO-247AC 恢复时间&#xff1a;100ns 正向电流&#xff1a;60A 反向耐压&#xff1a;1200V 芯片大小&#xff1a;102MIL*2…...

githack的安装步骤+一次错误体验

一.githack的安装步骤 1.要在Kali Linux上安装GitHack工具&#xff0c;您可以按照以下步骤操作&#xff1a; 打开终端并使用以下命令克隆GitHack存储库&#xff1a; git clone https://github.com/lijiejie/GitHack.git2.进入GitHack目录&#xff1a; cd GitHack3.安装依赖项…...

【Spring框架】SpringBoot创建和使用

目录 什么是SpringBoot&#xff1f;SpringBoot优点创建SpringBootSpringBoot使用 什么是SpringBoot&#xff1f; Spring 的诞⽣是为了简化 Java 程序的开发的&#xff0c;⽽ Spring Boot 的诞⽣是为了简化 Spring 程序开发的。 SpringBoot优点 1.起步依赖(创建的时候就可以方…...

【C语言项目】多臂井径电子测井成像项目(一)

目录 1、目的和意义2、本章概述3、串口R2324、OpenGL5、开发环境6、环境配置6.1、VS安装OpenGL6.2、虚拟串口生成工具 7、成品速览参考文献 1、目的和意义 本项目为获取矿藏地层的油气当量和及时精确地测量含油、含气层的压力及温度值的需求&#xff0c;辅助生产管理人员完成对…...

力扣 56. 合并区间

题目来源&#xff1a;https://leetcode.cn/problems/merge-intervals/description/ C题解&#xff1a;根据左区间排序&#xff0c;更新每一段的右区间最大值&#xff0c;直到间断。 class Solution { public:static bool cmp(vector<int> & a, vector<int> &a…...

前端开发Vue3.0 标签setup语法『UI组件库』之『模态框』【业务提升必备】

封装模态框需要定义的参数 title //弹窗标题 show // 是否显示弹窗 width // 弹窗宽度 height // 弹窗高度 borderRadius // 弹窗圆角 headerColor // 弹窗顶部颜色 contentText // 内容文本 contentTextCorder //内容文本颜色 position // 标题的位置 …...

在CSDN学Golang云原生(Kubernetes二开)

一&#xff0c;通过client-go管理集群资源 Kubernetes提供了client-go库&#xff0c;该库可以让开发人员使用Golang编写的应用程序与Kubernetes API进行交互。通过client-go&#xff0c;你可以创建、更新和删除Kubernetes资源&#xff0c;并查询集群状态等信息。 以下是一个示…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

StarRocks 全面向量化执行引擎深度解析

StarRocks 全面向量化执行引擎深度解析 StarRocks 的向量化执行引擎是其高性能的核心设计&#xff0c;相比传统行式处理引擎&#xff08;如MySQL&#xff09;&#xff0c;性能可提升 5-10倍。以下是分层拆解&#xff1a; 1. 向量化 vs 传统行式处理 维度行式处理向量化处理数…...