什么是堆栈?c语言实现栈上的pop和push操作

news2025/1/7 7:32:50

什么是堆栈?c语言实现栈上pop和push操作的算法

    • 堆栈(stack)
    • 实现栈上pop和push操作
    • 解释

堆栈(stack)

堆栈(stack)是一种数据结构,它具有后进先出(Last-In-First-Out)的特性,意味着最后加入堆栈的元素最先被取出。堆栈有两个基本操作:压入(push)新元素到堆栈的顶部,弹出(pop)栈顶的元素。
在这里插入图片描述

实现栈上pop和push操作

在C语言中,使用数组实现堆栈数据结构。以下是栈上pop和push操作的算法:

压入元素:

void push(int stack[], int *top, int val, int size) {
    if (*top == size - 1) { // 检查栈是否已满
        printf("Stack Overflow\n");
        return;
    }
    *top += 1; // 栈指针加一
    stack[*top] = val; // 将新元素压入栈顶
}

弹出元素:

int pop(int stack[], int *top) {
    if (*top == -1) { // 检查栈是否已空
        printf("Stack Underflow\n");
        return -1;
    }
    int val = stack[*top]; // 获取栈顶元素
    *top -= 1; // 栈指针减一
    return val; // 返回栈顶元素
}

这些算法假设堆栈的最大容量为size,并且使用一个指针top追踪堆栈的顶部元素索引。注意这些算法并未对堆栈中的数据进行任何初始化或清除工作,因此使用时需要先初始化堆栈。

解释

下面来详细讲解一下这些C语言代码。

首先是push函数:

void push(int stack[], int *top, int val, int size) {
    if (*top == size - 1) { // 检查栈是否已满
        printf("Stack Overflow\n");
        return;
    }
    *top += 1; // 栈指针加一
    stack[*top] = val; // 将新元素压入栈顶
}
  • 这个函数的作用是将一个整数值val压入栈中。参数stack是一个整数数组,存放堆栈的元素,*top是一个指向整数的指针,用于记录栈顶的元素的索引。size是堆栈的最大容量。
  • 函数中的第一行代码,if (*top == size - 1),用于检查栈是否已满。如果栈已满,我们会输出错误信息,并返回,不执行下面的代码。如果栈未满,则执行下面的代码将新元素压入栈顶。
  • *top += 1;这行代码将指向栈顶的指针向上移动一个位置。由于C语言数组的索引是从0开始的,因此下一个元素的索引就是*top + 1,但是我们希望在这个索引之前将val压入栈顶,因此我们必须先将*top加上1,再将val压入栈顶,就像这一行代码所做的那样:stack[*top] = val;

下面是pop函数:

int pop(int stack[], int *top) {
    if (*top == -1) { // 检查栈是否已空
        printf("Stack Underflow\n");
        return -1;
    }
    int val = stack[*top]; // 获取栈顶元素
    *top -= 1; // 栈指针减一
    return val; // 返回栈顶元素
}
  • 这个函数的作用是从栈中弹出一个整数值,这是一个pop操作。参数stack*top与之前的push函数一样,分别是一个整数数组和一个指向整数的指针,用于记录栈顶的元素的索引。
  • if (*top == -1)这行代码用于检查栈是否为空。如果栈为空,我们会输出错误信息并返回。否则,我们将栈顶元素弹出,并将指针向下移动一个位置。这就是int val = stack[*top];*top -= 1;代码所做的事情。
  • 最后,return val;返回弹出的栈顶元素。

总之,这两个函数共同实现了一个栈的数据结构,可以实现压栈(push)和弹栈(pop)操作。在使用这些函数时,请先初始化堆栈数组,并确保不会超出堆栈的最大容量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音seo矩阵系统源码开发部署思路

抖音SEO矩阵系统源码开发和部署是一项复杂而又关键的任务。在开发阶段,我们需要根据抖音的搜索规则和算法,结合用户搜索意图和关键词,进行深入的研究和分析,以建立一个优秀的SEO矩阵系统。 在部署方面,我们需要遵循以…

完全零基础,如何学习渗透?

网络渗透这一行,做个脚本小子,使使工具啥的,个把月就学会了,这不难。 很多人把网络渗透简单的理解成就是搞网站,这是大错特错的! 不过这也难怪,Web安全那三招两式,最好教也最好学&…

还在找wma格式怎么转换mp3?

在一个遥远的国度里,有一位名叫小芳的歌手,她声音甜美动人,深受人们的喜爱。然而,她的音乐制作团队告诉她,她的歌曲只能以wma格式发布。但是,她的粉丝们大多数使用的是mp3格式的音乐播放器,这让…

【Java】JVM(五)

垃圾回收机制 判断对象的存活 在堆里面存放着几乎所有的对象实例,垃圾回收器在对对进行回收前,要做的事情就是确定这些对象中哪些还是“存活”着,哪些已经“死去”(死去代表着不可能再被任何途径使用得对象了) 可达…

【pytest学习总结2.3】 - 如何使用固定装置fixtures(2)

目录 2.3.8 使用mark给固定装置传递数据 2.3.9 将固定装置工厂化 2.3.10 参数化固定装置 2.3.11 使用带有参数化固定装置的标记 2.3.12 使用来自固定装置功能中的固定装置 - 模块化 2.3.13 按固定装置实例自动分组测试 2.3.14 在类和模块中使用usefixtures 2.3.15 固定…

四.安防摄像机的WDR(HDR) 性能

四.安防摄像机的WDR(HDR) 性能 4.0 概述 WDR就是宽动态,wide dynamic range,或者HDR,high dynamic range,本质上是一回事,没任何区别。那么,到底什么是宽呢?很简单,搞不定的,就是太宽了,比如 摄像机装在室内,室内正常照度500lux,玻璃门外就是10000lux,室内外…

单机取证-鉴于信息安全管理与评估赛项-计算机单机取证特别说明-例题详解-Autopsy使用

芜湖~ 本期针对全国职业技能大赛-信息安全管理与评估赛项分析一下单机取证这个大项 并且取一例题 进行例题讲解 分享一些思路和逻辑 目录 题目 前言分析 .E01 ⽂件 DD 镜像和 E01 镜像的主要区别 如何打开和查看 E01 ⽂件扩展名? 常用工具使用-Autopsy 正…

现在这个年代,还有必要进行JVM调优吗?

导言 随着技术的不断发展,软件开发行业也在日新月异地进步。在过去的几十年里,Java语言和Java虚拟机(JVM)在开发企业级应用方面扮演了重要角色。然而,随着硬件和软件的进步,以及JVM本身的改进,…

Linux驱动学习(4) MTD字符驱动和块驱动1

系列文章目录 Linux驱动学习(4) 文章目录 目录 目录 系列文章目录 文章目录 前言 一、MTD是什么? 二、MTD子系统架构 1.Linux文件存储基本架构: ​ 2.MTD子系统基本架构: 总结 前言 MTD设备在嵌入式设备中…

2023网安面试题164道(附答案)

最近有不少小伙伴跑来咨询: 想找网络安全工作,应该要怎么进行技术面试准备?工作不到 2 年,想跳槽看下机会,有没有相关的面试题呢? 为了更好地帮助大家高薪就业,今天就给大家分享两份网络安全工…

【pytest学习总结2.2 】- 如何在测试中编写断言?

目录 2.2 如何在测试中编写断言 2.2.1 assert 断言 2.2.2 断言预期的异常 2.2.3 断言预期警告 【后续内容更新】 2.2.4 断言上下文 2.2.5 为失败的断言定义您自己的解释 2.2.6 断言的详细内容 🎁更多干货 完整版文档下载方式: 2.2 如何在测试中…

C++ 哈希思想 unordered_set unordered_map

文章目录 哈希思想常用的哈希函数哈希冲突解决方案哈希代码实现(C 源码)unordered_set & unordered_map 容器**unordered_set & unordered_map模拟实现**(C 源码) 哈希思想 抽象感受哈希的优点 如果我现在抛出一个问题&a…

Python+OpenCV 实现图像位平面分层进行图像信息隐藏

引言 闲言:这篇博客回归了传统图像处理领域,主要是在研究生的数字图像处理课程上接触到了新的知识–图像位平面,觉得还挺有意思的,可以用来做信息隐藏,索性记录一下。因为拖延的缘故,到学期末才赶出来一篇&…

计算机毕业论文内容参考|基于Android的旅游攻略APP的设计与实现

文章目录 导文摘要:前言:绪论:1. 课题背景:2. 国内外现状与趋势:3. 课题内容:相关技术与方法介绍:系统分析:系统设计:系统实现系统测试总结与展望本文总结后续工作展望导文 计算机毕业论文内容参考|基于Android的旅游攻略APP的设计与实现 摘要: 本文基于Android平台…

python单元测试框架Unittest详解

前言 我们今天来聊聊Python中的单元测试框架unittest,大家都知道在Python中比较热门的测试框架除了pytest就是unittest,我之前有讲过pytest所以今天想讲unittest。喜欢的可以点点关注哟。 Unittest详解 Unittest是Python内部自带的一个单元测试的模块&…

mysql——初步认识

数据库是什么? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库 说人话 就是 数据库是一个电子仓库,里面存了一些数据 我们要学习的mysql就是数据库中的一种,并且是一种关系型数据库,当然有…

ASEMI快恢复二极管MUR20100DCR的性能与应用

编辑-Z 本文主要介绍了MUR20100DCR二极管的性能与应用。我们将对MUR20100DCR二极管的基本性能、不同领域的应用和优势与不足进行分析。 1、MUR20100DCR二极管的基本性能 MUR20100DCR二极管是一种高性能的超快速二极管,具有高电压、高电流和低漏电流等特点。它采用…

基于Python所写的企业编码生成系统

点击以下链接获取源码资源: https://download.csdn.net/download/qq_64505944/87950401?spm1001.2014.3001.5503 在PyCharm中运行《企业编码生成系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时&…

那些曾经考过的turtle绘图题(11~15)

【编程实现绘图 -11】 利用random库和turtle库,在屏幕上绘制4个小雪花,雪花半径随机,坐标由列表points给出,雪花颜色为红色,效果如图所示 points = [[0,0], [50, 40], [70, 80], [-40, 30]] # 样例代码 from turtle import * # 导入turtle库 import random pensize(4) …

【深入探讨】区块链的历史与现状

发表时间:2023年5月18日 最近,BSV比特币协会在德克萨斯州奥斯汀举办了首届Unbound Perspectives Live Summit活动。本次活动采取非公开形式,大约有100人受邀参会。 与会者包括了Unbounded Capital公司的有限合伙人、知名风险投资和对冲基金经…