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

链式栈和线性栈

1. 线性栈(顺序栈)

结构定义‌:
#include <iostream>
using namespace std;#define MAX_SIZE 100  // 预定义最大容量// 线性栈结构体
typedef struct {int* data;        // 存储数据的数组int top;          // 栈顶指针(初始化为-1)int capacity;     // 当前栈的最大容量
} SeqStack;// 初始化栈
void InitSeqStack(SeqStack& S) {S.data = new int[MAX_SIZE];S.top = -1;S.capacity = MAX_SIZE;
}// 销毁栈(释放内存)
void DestroySeqStack(SeqStack& S) {delete[] S.data;S.top = -1;S.capacity = 0;
}

常见操作‌:
// 入栈
bool PushSeqStack(SeqStack& S, int x) {if (S.top == S.capacity - 1) {// 栈满时自动扩容(示例中扩容为原大小的2倍)int newCapacity = S.capacity * 2;int* newData = new int[newCapacity];for (int i = 0; i <= S.top; i++) {newData[i] = S.data[i];}delete[] S.data;S.data = newData;S.capacity = newCapacity;}S.data[++S.top] = x;  // 栈顶指针先增1,再赋值return true;
}// 出栈
bool PopSeqStack(SeqStack& S, int& x) {if (S.top == -1) {cout << "栈空,无法出栈!" << endl;return false;}x = S.data[S.top--];  // 先取栈顶元素,再减1return true;
}// 取栈顶元素
bool GetTopSeqStack(SeqStack& S, int& x) {if (S.top == -1) return false;x = S.data[S.top];return true;
}// 判空
bool IsEmptySeqStack(SeqStack& S) {return S.top == -1;
}

2. 链栈

结构定义‌:
#include <iostream>
using namespace std;// 链栈节点结构体
typedef struct LinkNode {int data;struct LinkNode* next;
} LinkNode;// 链栈结构体(通过头指针管理)
typedef struct {LinkNode* top;   // 栈顶指针
} LinkStack;// 初始化栈
void InitLinkStack(LinkStack& S) {S.top = NULL;    // 初始化为空栈
}// 销毁栈(释放所有节点)
void DestroyLinkStack(LinkStack& S) {LinkNode* p = S.top;while (p) {LinkNode* tmp = p;p = p->next;delete tmp;}S.top = NULL;
}
常见操作‌:
// 入栈
bool PushLinkStack(LinkStack& S, int x) {LinkNode* newNode = new LinkNode;if (!newNode) {cout << "内存分配失败!" << endl;return false;}newNode->data = x;newNode->next = S.top;  // 新节点指向原栈顶S.top = newNode;        // 更新栈顶指针return true;
}// 出栈
bool PopLinkStack(LinkStack& S, int& x) {if (!S.top) {cout << "栈空,无法出栈!" << endl;return false;}LinkNode* tmp = S.top;    // 保存栈顶节点x = tmp->data;           // 取栈顶数据S.top = S.top->next;     // 更新栈顶指针delete tmp;              // 释放旧栈顶节点return true;
}// 取栈顶元素
bool GetTopLinkStack(LinkStack& S, int& x) {if (!S.top) return false;x = S.top->data;return true;
}// 判空
bool IsEmptyLinkStack(LinkStack& S) {return S.top == NULL;
}

3. 对比总结

特性线性栈(顺序栈)链栈
存储结构数组(连续内存)链表(离散内存)
内存分配静态预分配(可动态扩容)动态分配节点(按需增减)
入栈操作data[++top] = x(可能需扩容)创建新节点并调整指针
出栈操作top--(无需释放内存)释放节点内存
空间复杂度O(n)O(n)(预分配空间)O(n)O(n)(每个节点含指针域)
内存管理整体一次性分配/释放逐个节点分配/释放
适用场景数据量固定或可预估数据量动态变化,内存需求不确定

通过代码对比可以清晰看出:

  • 线性栈‌适合‌确定容量‌或需要‌快速随机访问‌的场景(如函数调用栈)。
  • 链栈‌适合‌动态数据量‌或需要‌灵活内存管理‌的场景(如递归算法)。

相关文章:

链式栈和线性栈

‌1. 线性栈&#xff08;顺序栈&#xff09;‌ ‌结构定义‌&#xff1a; #include <iostream> using namespace std;#define MAX_SIZE 100 // 预定义最大容量// 线性栈结构体 typedef struct {int* data; // 存储数据的数组int top; // 栈顶指针&…...

消息中间件RabbitMQ:简要介绍及其Windows安装流程

一、简要介绍 定义&#xff1a;RabbitMQ 是一个开源消息中间件&#xff0c;用于实现消息队列和异步通信。 场景&#xff1a;适用于分布式系统、异步任务处理、消息解耦、负载均衡等场景。 比喻&#xff1a;RabbitMQ 就像是快递公司&#xff0c;负责在不同系统间安全快速地传递…...

足球 AI 智能体技术解析:从数据采集到比赛预测的全链路架构

一、引言 在足球运动数字化转型的浪潮中&#xff0c;AI 智能体正成为理解比赛、预测赛果的核心技术引擎。本文从工程实现角度&#xff0c;深度解析足球 AI 的技术架构&#xff0c;涵盖数据采集、特征工程、模型构建、实时计算到决策支持的全链路技术方案&#xff0c;揭示其背后…...

VTK知识学习(53)- 交互与Widget(四)

1、测量类Widget 1&#xff09;概述 与测量相关的主要 Widget如下&#xff1a; vtkDistanceWidget:用于在二维平面上测量两点之间的距离。vtkAngleWidget:用于二维平面的角度测量。vtkBiDimensionalWidget:用于测量二维平面上任意两个正交方向的轴长。 按照前面提到的步骤创…...

基础服务系列-Windows10 安装AnacondaJupyter

下载 https://www.anaconda.com/products/individual 安装 安装Jupyter 完成安装 启动Jupyter 浏览器访问 默认浏览器打开&#xff0c;IE不兼容&#xff0c;可以换个浏览器 修改密码 运行脚本...

使用c++调用deepseek的api(附带源码)

可以给服务器添加deepseek这样就相当于多了一个智能ai助手 deepseek的api申请地址使用格式测试效果源码 deepseek的api申请地址 这边使用硅基流动的api&#xff0c;注册就有免费额度 硅基流动: link 使用格式 api的调用格式&#xff0c;ds的api调用就是用固定协议然后发送到…...

HarmonyOS-ArkUI: animateTo 显式动画

什么是显式动画 啊, 尽管有点糙,但还是解释一下吧, 显式动画里面的“显式”二字, 是程序员在代码调用的时候,就三令五申,明明白白调用动画API而创建的动画。 这个API的名字就是: animateTo。这就是显式动画。说白了您可以大致理解为,显式动画,就是调用animateTo来完成…...

Spring AI MCP

MCP是什么 MCP是模型上下文协议&#xff08;Model Context Protocol&#xff09;的简称&#xff0c;是一个开源协议&#xff0c;由Anthropic&#xff08;Claude开发公司&#xff09;开发&#xff0c;旨在让大型语言模型&#xff08;LLM&#xff09;能够以标准化的方式连接到外…...

Kubernetes 创建 Jenkins 实现 CICD 配置指南

Kubernetes 创建 Jenkins 实现 CICD 配置指南 拉取 Jenkins 镜像并推送到本地仓库 # 从官方仓库拉取镜像&#xff08;若网络不通畅可使用国内镜像源&#xff09; docker pull jenkins/jenkins:lts-jdk11# 国内用户可去下面地址寻找镜像源并拉取&#xff1a; https://docker.a…...

01_Flask快速入门教程介绍

一、课程视频 01_Flask快速入门教程介绍 二、课程特点 讲课风格通俗易懂&#xff0c;理论与实战相结合 教程&#xff1a;视频 配套文档 配套的代码 最新本版&#xff0c;Python版本是3.12&#xff0c;Flask版本是3.10 即使是从没接触过Flsk的小白也看得懂学得会 三、适用人…...

SSH反向代理

SSH反向代理 一、过程 1、 确保树莓派和阿里云服务器的 SSH 服务正常运行 检查树莓派的ssh服务 sudo systemctl status ssh如果未启用&#xff0c;请启动并设置开机自启&#xff1a; sudo systemctl enable ssh sudo systemctl start ssh检查阿里云服务器的SSH服务 sudo …...

第 5 篇:初试牛刀 - 简单的预测方法

第 5 篇&#xff1a;初试牛刀 - 简单的预测方法 经过前面四篇的学习&#xff0c;我们已经具备了处理时间序列数据的基本功&#xff1a;加载、可视化、分解以及处理平稳性。现在&#xff0c;激动人心的时刻到来了——我们要开始尝试预测 (Forecasting) 未来&#xff01; 预测是…...

深度学习中的归一化技术:从原理到实战全解析

摘要&#xff1a;本文系统解析深度学习中的归一化技术&#xff0c;涵盖批量归一化&#xff08;BN&#xff09;、层归一化&#xff08;LN&#xff09;、实例归一化&#xff08;IN&#xff09;、组归一化&#xff08;GN&#xff09;等核心方法。通过数学原理、适用场景、优缺点对…...

流量抓取工具(wireshark)

协议 TCP/IP协议簇 网络接口层&#xff08;没有特定的协议&#xff09;PPPOE 物理层数据链路层 网络层: IP(v4/v6) ARP&#xff08;地址解析协议) RARP ICMP(Internet控制报文协议) IGMP传输层&#xff1a;TCP(传输控制协议&#xff09;UDP&#xff08;用户数据报协议)应用层…...

【原创】Ubuntu20.04 安装 Isaac Gym 仿真器

Isaac Gym 是 NVIDIA 开发的一个基于GPU的机器人仿真平台。其高效的 GPU 加速能力和大规模并行仿真性能&#xff0c;成为强化学习训练和机器人控制研究的重要选择。 本文将介绍 Isaac Gym 的安装过程【简易】。 1.配置环境 Ubuntu20.04 安装 NVIDIA 显卡驱动 Ubuntu20.04 安…...

AI 速读 SpecReason:让思考又快又准!

在大模型推理的世界里&#xff0c;速度与精度往往难以兼得。但今天要介绍的这篇论文带来了名为SpecReason的创新系统&#xff0c;它打破常规&#xff0c;能让大模型推理既快速又准确&#xff0c;大幅提升性能。想知道它是如何做到的吗&#xff1f;快来一探究竟&#xff01; 论…...

从“堆料竞赛”到“体验深耕”,X200 Ultra和X200s打响手机价值升维战

出品 | 何玺 排版 | 叶媛 vivo双旗舰来袭&#xff01; 4月21日&#xff0c;vivo X系列春季新品发布会盛大开启&#xff0c;带来了一场科技与创新的盛宴。会上&#xff0c;消费者期待已久的X200 Ultra及X200s两款旗舰新品正式发布。 vivo两款旗舰新品发布后&#xff0c;其打破…...

Macbook IntelliJ IDEA终端无法运行mvn命令

一、背景 idea工具里执行Maven命令mvn package&#xff0c;报错提示 zsh: command not found: mvn。 macOS&#xff0c;默认使用的是zsh&#xff0c;环境变量通常配置在 ~/.zshrc 文件中。 而我之前一直是配置在~/.bash_profile文件中。 二、环境变量 vi ~/.zshrc设置MAVE…...

CentOS 7进入救援模式——VirtualBox虚拟机

​ 目录 1. 在`VirtualBox`环境下,开机按F12,进入`VirtualBox temporary boot device selection `界面,按`c`键,选中`CD-ROM `回车。2. 选中`Troubleshooting`(故障排除),进入`Troubleshooting`界面3. 接下来会显示救援模式菜单,通常选择`"1) Continue"`(除非您…...

AI软件栈:LLVM分析(六)

LLVM后端代码生成的关键步骤 文章目录 指令选择指令调度寄存器分配 指令选择 完成从基于LLVM IR的DAG转换为基于特定目标平台的DAG&#xff08;注意&#xff0c;此时描述格式依然是DAG形态&#xff09;基于TabGen完成指令重映射&#xff08;典型的处理包括&#xff1a;指令拆散…...

【第十六届 蓝桥杯 省 C/Python A/Java C 登山】题解

题目链接&#xff1a;P12169 [蓝桥杯 2025 省 C/Python A/Java C] 登山 思路来源 一开始想的其实是记搜&#xff0c;但是发现还有先找更小的再找更大的这种路径&#xff0c;所以这样可能错过某些最优决策&#xff0c;这样不行。 于是我又想能不能从最大值出发往回搜&#xf…...

Github 热点项目 Jumpserver开源堡垒机让服务器管理效率翻倍

Jumpserver今日喜提160星&#xff0c;总星飙至2.6万&#xff01;这个开源堡垒机有三大亮点&#xff1a;① 像哆啦A梦的口袋&#xff0c;支持多云服务器一站式管理&#xff1b;② 安全审计功能超硬核&#xff0c;操作记录随时可回放&#xff1b;③ 网页终端无需装插件&#xff0…...

5V 1A充电标准的由来与技术演进——从USB诞生到智能手机时代的电力革命

点击下面图片带您领略全新的嵌入式学习路线 &#x1f525;爆款热榜 88万阅读 1.6万收藏 一、起源&#xff1a;USB标准与早期电力传输需求 1. USB的诞生背景 1996年&#xff0c;由英特尔、微软、IBM等公司组成的USB-IF&#xff08;USB Implementers Forum&#xff09;发布了…...

驱动开发硬核特训 · Day 16:字符设备驱动模型与实战注册流程

&#x1f3a5; 视频教程请关注 B 站&#xff1a;“嵌入式 Jerry” 一、为什么要学习字符设备驱动&#xff1f; 在 Linux 驱动开发中&#xff0c;字符设备&#xff08;Character Device&#xff09;驱动 是最基础也是最常见的一类驱动类型。很多设备&#xff08;如 LED、按键、…...

外网如何连接内网中的mysql数据库服务器

一、MySQL 产品简介 mysql是一款数据库产品&#xff0c;它主要用于存储、管理和检索数据&#xff0c;对用户的数据进行存储管理 二、运维人员遇到的问题 当内网服务器部署好mysql数据库后&#xff0c;外网如何安全的访问数据库进行增删改查&#xff0c;是运维人员遇到的一个…...

你的大模型服务如何压测:首 Token 延迟、并发与 QPS

写在前面 大型语言模型(LLM)API,特别是遵循 OpenAI 规范的接口(无论是 OpenAI 官方、Azure OpenAI,还是 DeepSeek、Moonshot 等众多兼容服务),已成为驱动下一代 AI 应用的核心引擎。然而,随着应用规模的扩大和用户量的增长,仅仅关注模型的功能是不够的,API 的性能表…...

4月谷歌新政 | Google Play今年对“数据安全”的管控将全面升级!

大家好&#xff0c;我是牢鹅&#xff01;每年的Q2季度是Google Play重要政策更新的时间节点&#xff0c;一般都伴随着重磅政策的更新&#xff0c;今年也不例外。4月10日&#xff0c;谷歌政策迎来2025年第二次更新&#xff0c;本次政策更新内容相较3月政策更新&#xff0c;不管是…...

第十四届蓝桥杯 2023 C/C++组 有奖问答

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 核心思路&#xff1a; 思路详解&#xff1a; 代码&#xff1a; 代码详解&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 蓝桥云课 有奖问答 思路&…...

【Redis】SpringDataRedis

Spring Data Redis 使得开发者能够更容易地与 Redis 数据库进行交互&#xff0c;并且支持不同的 Redis 客户端实现&#xff0c;如 Jedis 和 Lettuce。Spring Data Redis 会自动选择一个客户端&#xff0c;通常情况下&#xff0c;Spring Boot 默认使用 Lettuce 作为 Redis 客户端…...

XAttention

XAttention: Block Sparse Attention with Antidiagonal Scoring 革新Transformer推理的高效注意力机制资源​​ ​​论文链接​​&#xff1a;XAttention: Block Sparse Attention with Antidiagonal Scoring ​​代码开源​​&#xff1a;GitHub仓库 XAttention是韩松团队提…...

07.Python代码NumPy-排序sort,argsort,lexsort

07.Python代码NumPy-排序sort&#xff0c;argsort&#xff0c;lexsort 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是NumPy的使用语法。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性&#xff0c;希望…...

无人机飞控运行在stm32上的RTOS实时操作系统上,而不是linux这种非实时操作系统的必要性

飞控程序需要运行在STM32等微控制器&#xff08;MCU&#xff09;的实时操作系统&#xff08;RTOS&#xff09;而非Linux等非实时操作系统&#xff08;如通用Linux内核&#xff09;&#xff0c;主要原因在于实时性、资源占用、硬件适配性以及系统可靠性等方面的实质性差异。以下…...

Leetcode - 周赛446

目录 一、3522. 执行指令后的得分二、3523. 非递减数组的最大长度三、3524. 求出数组的 X 值 I四、3525. 求出数组的 X 值 II 一、3522. 执行指令后的得分 题目链接 本题就是一道模拟题&#xff0c;代码如下&#xff1a; class Solution {public long calculateScore(String…...

Linux——系统安全及应用

目录 一&#xff1a;账号安全控制 1&#xff0c;基本安全措施 系统账号清理 密码安全控制 命令历史&#xff0c;自动注销 2&#xff0c;用户切换与提权 su命令的用法 PAM认证 3&#xff0c;sudo命令——提升执行权限 在配置文件/etc/sudoers中添加授权 通过sudo执行…...

随机面试--<二>

编译安装软件的流程 1-安装所需源代码 2-配置安装环境 3-进行相关设置 4-编译 5-安装 nginx安装新模块的流程 1-准备与原nginx版本相同的源码包&#xff0c;准备模块安装包 2-准备编译安装环境 3-配置参数 来源于nginx -V配置原模块 以及--add-module 增加模块 4-mak…...

LeetCode面试经典 150 题(Java题解)

一、数组、字符串 1、合并两个有序数组 从后往前比较&#xff0c;这样就不需要使用额外的空间 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int l mn-1, i m-1, j n-1;while(i > 0 && j > 0){if(nums1[i] > nums2[j])…...

【技术追踪】Differential Transformer(ICLR-2025)

Differential Transformer&#xff1a;大语言模型新架构&#xff0c; 提出了 differential attention mechanism&#xff0c;Transformer 又多了一个小 trick~ 论文&#xff1a;Differential Transformer 代码&#xff1a;https://github.com/microsoft/unilm/tree/master/Diff…...

报告系统状态的连续日期 mysql + pandas(连续值判断)

本题用到知识点&#xff1a;row_number(), union, date_sub(), to_timedelta()…… 目录 思路 pandas Mysql 思路 链接&#xff1a;报告系统状态的连续日期 思路&#xff1a; 判断连续性常用的一个方法&#xff0c;增量相同的两个列的差值是固定的。 让日期与行号 * 天数…...

【C++类和数据抽象】类的作用域

目录 一、类的作用域基本概念 1.1 什么是类的作用域 1.2 作用域层次体系 1.3 类作用域的特点 1.4 基本访问规则 二、访问控制三剑客 2.1 public&#xff1a;开放接口 2.2 private&#xff1a;数据封装 2.3 protected&#xff1a;继承通道 2.4 跨作用域访问示例 三…...

【区块链技术解析】从原理到实践的全链路指南

目录 前言&#xff1a;技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现&#xff08;10个案例&#xff09;案例1&#xff1a;创建简单区块链案例2&#xff1a;工作…...

LangGraph(一)——QuickStart样例中的第一步

目录 1. LangGraph简介2. 使用uv初始化项目3. 官网QuickStart——第一步&#xff1a;构建一个ChatBot(仅关注Graph的构建即可)3.1 配置大模型API_KEY3.2 初始化StateGraph3.3 添加chatbot node3.4 添加edges3.5 可视化StateGraph3.6 构建聊天循环 参考 1. LangGraph简介 LangGr…...

spring security +kotlin 实现oauth2.0 认证

基于OAuth 2.0的认证功能实现&#xff08;Kotlin Spring Security&#xff09; 以下是使用 AbstractAuthenticationProcessingFilter、AuthenticationProvider、AbstractAuthenticationToken 和 AuthenticationSuccessHandler 实现 OAuth 2.0 认证的完整代码设计。 1. 自定义…...

服务器监控软件推荐

以下是几款常用的服务器监控软件推荐&#xff0c;涵盖开源和商业方案&#xff0c;适用于不同规模和需求&#xff1a; 一、开源免费方案 Prometheus Grafana 特点&#xff1a;时序数据库 可视化仪表盘&#xff0c;支持多维度监控和告警。适用场景&#xff1a;云原生、Kubernet…...

在kali中安装AntSword(蚁剑)

步骤一、下载压缩包 源码&#xff1a;https://github.com/AntSwordProject/antSword&#xff0c;下载压缩包。 加载器&#xff1a;https://github.com/AntSwordProject/AntSword-Loader&#xff0c;根据系统选择压缩包&#xff08;kali选择AntSword-Loader-v4.0.3-linux-x64&…...

【论文速递】2025年06周 (Robotics/Embodied AI/LLM)

目录 SMOLLM2&#xff1a;当Smol变得大 - 以数据为中心的小语言模型英文摘要中文摘要 OmniHuman-1&#xff1a;重新考虑一阶段的人类动画模型的扩展英文摘要中文摘要 S1&#xff1a;简单的测试时间缩放英文摘要中文摘要 直接对齐算法间的差异日渐模糊英文摘要中文摘要 VideoJAM…...

相机标定(输出相机内参和畸变参数)

相机标定 这里我用笔记本电脑自带的摄像头进行相机标定 仅作示例&#xff0c;实际工程中要用对应的摄像头进行标定 同时代码也要相应的修改&#xff0c;不过修改的主要是相机的初始化 粗略的说就是打开相机那部分要修改&#xff08;依据实际情况相应修改&#xff09; 最终的结果…...

Linux-编辑器的使用

实验三 Linux编辑器的使用 一、实验目的 学习使用vi编辑器建立、编辑和保存文本文件。 二、实验内容 1.进入和退出vi。 2.Vi不同工作模式的切换。 3.文本文件基本编辑&#xff08;光标移动、文本输入、复制、移动、删除、查找、替换&#xff09;。 4.文本文件的保存和备份。…...

Android开发中的复制和粘贴

Android 提供了一个强大的基于剪贴板的框架&#xff0c;用于复制和粘贴。它支持简单和复杂的数据类型&#xff0c;包括文本字符串、复杂数据结构、文本和二进制流数据&#xff0c;以及应用资源。简单的文本数据直接存储在剪贴板中&#xff0c;而复杂的数据则存储为引用&#xf…...

使用 inobounce 解决 iOS 皮筋效果导致的无法下拉刷新

使用 inobounce 解决 iOS 皮筋效果导致的无法下拉刷新 在移动端 H5 页面开发中&#xff0c;iOS 设备的“皮筋效果”&#xff08;Rubber Band Effect&#xff09;是一个常见的挑战。当用户在页面顶部下拉或底部上拉时&#xff0c;iOS 会触发整个页面的回弹效果&#xff0c;这不…...

特征选择与类不平衡处理

特征选择与类不平衡处理技术 一、特征选择方法 1. 过滤法&#xff08;Filter Methods&#xff09; 原理&#xff1a; 基于统计学方法或特征本身的分布特性独立于模型进行特征筛选&#xff0c;通过计算特征与目标变量的相关性或特征的发散性进行排序选择。 典型方法&#xf…...