【数据结构】顺序栈及其基本操作

news2025/1/4 15:44:53
  • 顺序栈
    • 栈的数组实现(创建)
      • 栈的初始化
      • 栈的增加(压栈)
      • 栈的删除(弹栈)
      • 栈的查询
      • 栈的判空和判满

1. 顺序栈

栈是一种数据结构,其主要特点是后进先出,相当于我们在瓶子里面放东西,后放进去的东西在上面,所以拿出来的时候自然是从上面取出来,所以后进去的先出来。

本文主要介绍的是栈的数组实现方法,即顺序栈。
基本操作有以下几种:

1.1. 栈的数组实现(创建)

栈的数组实现起来相对简单。在定义的时候,我们只需要定义一个结构体即可

#define MAXSIZE 10000
typedef struct
{
    char data[MAXSIZE]; // 创建最大长度的数组
    int top;          // 当前顶部元素的位置
} Stack;

栈的结构体中需要一个数组来存储元素,还需要一个变量来记录当前栈顶元素的位置。

1.1.1. 栈的初始化

栈的初始化只需要让top为-1即可。

void InitStack(Stack &S)
{
    S.top = -1;
}

1.1.2. 栈的增加(压栈)

压栈即将元素压入栈中,压栈的时候,我们需要给函数传递需要压栈的元素和栈本身。

在压栈之前我们还需要判断栈是否已经满,若未满即可进行压栈。

在压栈的过程中我们需要让top加一,即让栈顶元素的位置加一,然后让新的元素赋值到新的数组的top位置上。

void Push(Stack &S,char x)
{
    if(S.top==MAXSIZE-1)
    {
        printf("栈已满,无法插入元素!\n");
        return;
    }
    S.top++;
    S.data[S.top]=x;
}

1.1.3. 栈的删除(弹栈)

当我们需要弹栈的时候,只需要返回数组top位置的元素,然后让top减一即可。

int Pop(Stack &S)
{
    if(S.top!=-1)
    {
        return S.data[S.top--];
    }
}

1.1.4. 栈的查询

由于栈的特性,我们在查询的时候一般查询栈的栈顶元素。当我们需要查询栈顶元素的时候,只需要返回数组top位置的元素即可。如果需要对栈的其他元素进行查询,需要逐个遍历。

int GetTop(Stack S)
{
    if(S.top!=-1)
    {
        return S.data[S.top];
    }
}

1.1.5. 栈的判空和判满

栈的判空和比较简单,在判空时只需要判断top是否等于-1即可,在判满的时候只需要判断top是否等于MAXSIZE-1即可。

bool StackEmpty(Stack S)
{
    if(S.top==-1)
    {
        return true;
    }
}
bool StackFull(Stack S)
{
    if(top==MAXSIZE-1)
    {
        return true;
    }
}

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

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

相关文章

golang工程——protobuf使用及原理

相关文档 源码:https://github.com/grpc/grpc-go 官方文档:https://www.grpc.io/docs/what-is-grpc/introduction/ protobuf编译器源码:https://github.com/protocolbuffers/protobuf proto3文档:https://protobuf.dev/programmin…

【信创】麒麟v10(arm)-mysql8-mongo-redis-oceanbase

Win10/Win11 借助qume模拟器安装arm64麒麟v10 前言 近两年的国产化进程一直在推进,基于arm架构的国产系统也在积极发展,这里记录一下基于麒麟v10arm版安装常见数据库的方案。 麒麟软件介绍: 银河麒麟高级服务器操作系统V10 - 国产操作系统、银河麒麟、中…

Tomcat(HTTP服务器)下载以及认识

Tomcat是java程序员写网页后端所用到的一个经典工具 一. 搜索Tomcat找到官网,在Download下找到Tomcat8(虽然已经有了更新的版本,但经典版的更稳定) 二. 找到Core,点击zip便能下载Tomcat的压缩包(完全绿色&…

使用API Monitor工具巧妙探测C++程序中监听某端口的模块

目录 1、问题说明 2、API Monitor工具介绍 2.1、API Monitor主要用途 2.2、如何使用API Monitor工具 3、使用API Monitor监测程序对bind函数的调用,定位启用2620端口的模块 3.1、为啥要监控socket API函数bind 3.2、编写演示代码进行说明 3.3、使用API Moni…

COTS即Commercial Off-The-Shelf 翻译为“商用现成品或技术”或者“商用货架产品”

COTS 使用“不再做修理或改进”的模式出售的商务产品 COTS即Commercial Off-The-Shelf 翻译为“商用现成品或技术”或者“商用货架产品”,指可以采购到的具有开放式标准定义的接口的软件或硬件产品,可以节省成本和时间。 中文名 商用现成品或技术 外文…

垂直行业大模型“封神”背后,AI数据服务走入“深水区”

图源:Unsplash 文 | 智能相对论 作者 | 沈浪 由ChatGPT掀起的这股大模型浪潮,从通用领域席卷垂直领域。现阶段,越来越多的行业都在开发专用垂直细分赛道的大模型产品,以加速AI应用的场景化落地进程。 譬如,在电商领…

MASA MAUI iOS 文件下载与断点续传

文章目录 背景介绍方案及代码1、新建MAUI项目2、建立NSUrlSession会话连接3、使用NSUrlSessionDownloadTask 创建下载任务4、DidWriteData 监听下载5、DidFinishDownloading 完成下载6、CancelDownload (取消/暂停)下载7、ResumeDownload 恢复下载8、杀死进程-恢复下载 效果图总…

界面组件DevExpress WPF v23.2新功能预览 - 更轻量级的主题

本文主要描述了DevExpress WPF即将在几个月之后发布的v23.2中包含的新功能,持续关注我们获取更多最新资讯哦~ P.S:DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强…

手把手带你完成安卓登录修改的案例

新建一个空的项目 到这里我们的项目就搭建完成了,接下来就来编写app的页面 提前准备 1.新建一个 登录 的java和xml文件 2.同样的步骤新建一个忘记登录的页面 3.创建一个工具类,这个工具来主要是用来隐藏软键盘的 import android.app.Activity; import an…

【斯坦福cs324w】中译版 大模型学习笔记十 环境影响

环境影响 温室气体排放水足迹:数据中心使用水进行冷却;发电需要用水释放到环境中的化学物质很多是对人类有害的 如何计算数据中心能源消耗 简单表示形式 模型训练过程 参考资料 datawhale so-large-lm学习资料

AWS-Lambda之导入自定义包-pip包

参考文档: https://repost.aws/zh-Hans/knowledge-center/lambda-import-module-error-python https://blog.csdn.net/fxtxz2/article/details/112035627 单来说,以 " alibabacloud_dyvmsapi20170525 " 包为例 mkdir /tmp cd ./tmp mkdir python pip ins…

idea开发Springboot出租车管理系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 出租车管理系统是一套完善的完整信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发), 系统具有完整的源代码和数据…

Mysql基础【操作表中数据入门查询】

一、DML🍓 DML主要是对数据进行增(insert)删(delete)改(update)操作。 (一)、添加数据🥝 语法格式: insert into 表名 (字段名1,字段名2...&a…

2024年【MCM/ICM】美国大学生数学建模竞赛优秀论文(免费下载)

一、前言 美国大学生数学建模竞赛(MCM/ICM)由美国数学及其应用联合会主办,是最高的国际性数学建模竞赛,也是世界范围内最具影响力的数学建模竞赛,一般也指数学建模竞赛。赛题内容涉及经济、管理、环境、资源、生态、医…

APP开发费用估算方法

估算APP开发费用是一个重要的项目管理步骤,它有助于确定项目的总成本,并帮助您在项目规划阶段做出决策。APP开发费用估算的方法可以根据项目的规模、复杂性、功能和技术选择而异,以下是一些常见的APP开发费用估算方法,希望对大家有…

Vue3最佳实践 第五章 Vue 组件应用 1( Props )

本章带领大家理解组件、props、emits、slots、providers/injects,Vue 插件 等Vue组件使用的基础知识。 5.1 组件注册5.2 Props5.2.1 组件之间如何传值5.2.2 参数绑定 v-bind5.2.3 参数类型5.2.4 props 默认与必填5.2.5 验证设置5.2.6 useAttrs 属性设置 第一章 Vue3…

regexp 应用

今天同事拿出个小栗子 1 如果用like的话 1,22 的情况会被字符串2匹配到这样会有问题 这里需要用concat将uids处理下 比如第一条处理成,1,2,3, 的形式 去模糊匹配 ‘%,1,%’ 当然like这种模糊匹配不太建议使用 2 regexp 用法 单个值 &#x…

SpringBoot的excel模板导出

Word的模板导出(参考:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/fill) 创建有两个sheet的excel文件模板 将模板文件放入resource\templates/doc下使用 public void exportUavInfoExcel(HttpServletResponse response, CaseExportRPO cas…

如何更改注册表使系统暂停更新时间延长

1、创建一个文本文件,命名为:“stopupdate.reg”,然后用记事本或者代码编辑器打开,复制以下代码: Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings] "F…

气传导耳机有哪些好处?热门气传导耳机推荐

​随着气传导耳机的快速发展,在运动、办公等场合能够经常看到,带来了前所未有的舒适体验。作为一种新型耳机类型,相较传统入耳式耳机来说,更有利于耳道卫生,在听歌时还能保持对环境声的感知。面对市面上这么多气传导耳…