【数据结构】“栈”的模拟实现

在这里插入图片描述

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 :阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹C语言进阶
🚩 不能则学,不知则问,耻于问人,决无长进
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍

文章目录

  • ⭐️一、什么是栈
  • 💬二、栈的分类
  • 📅三、用动态数组实现栈
    • 1.栈的结构体定义
    • 2.初始化
    • 3.栈的销毁
    • 4.压栈
    • 5.出栈
    • 6.获取栈顶元素
    • 7.获取栈内元素
    • 判断栈是否为空

⭐️一、什么是栈

:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。

🔸压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
🔸出栈:栈的删除操作叫做出栈。出数据也在栈顶

在这里插入图片描述

💬二、栈的分类

1️⃣ Ⅰ 顺序存储结构
在这里插入图片描述
实用性不高。
2️⃣ Ⅱ 链式存储结构
在这里插入图片描述

📅三、用动态数组实现栈

使用动态内存管理函数,实现数组动态化。有关动态内存函数的详细讲解可点击查看
👉 内存函数详解

1.栈的结构体定义

注意:这里我们将栈顶初始化是-1。你也可以是0;
代码:

typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;

2.初始化

代码:

//初始化
void STInit(ST* p)
{p->a = NULL;p->capacity = 0;p->top = 0;
}

3.栈的销毁

代码:

//栈的销毁
void STDesdroy(ST* p)
{assert(p);free(p->a);p->a = NULL;p->capacity = p->top = 0;
}

4.压栈

代码:

//压栈
void STPush(ST* p, STDataType x)
{assert(p);//开辟空间if (p->capacity = p->top){int newcapacity = p->capacity == 0 ? 4 : p->capacity * 2;//开辟空间个数 STDataType* tmp = (STDataType*)realloc(p->a, sizeof(STDataType) * newcapacity);//开辟if (tmp == NULL){perror("realloc fail\n");}p->a = tmp;//将开辟好的空间指回原指针p->capacity = newcapacity;}p->a[p->top] = x;p->top++;
}

5.出栈

代码:

//出栈
void STPop(ST* p)
{assert(p);assert(p->top >= 0);p->top--;
}

6.获取栈顶元素

//获取栈顶元素
STDataType STTop(ST* p)
{assert(p);assert(p->top > 0);return p->a[p->top];
}

7.获取栈内元素

//大小
int STSize(ST* p)
{assert(p);return p->top;
}

判断栈是否为空

代码:

//是否为空
bool STisEmpty(ST* p)
{if (p->top == 0){return false;}return true;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 索引 详解(保姆级教程)

一、索引概述 索引是帮助 MySQL 高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上…

本地oracle登录账号锁定处理,the account is locked

1.打开cmd命令窗口 2.打开sqlplus: sqlplus /nolog(加/nolog是不登录服务器的意思,不加就需要输账号密码) 3.切换到管理员:conn / as sysdba; 第2步第3步可以合并,直接使用sysdba登录:sqlplus / as sysdba; 4.解锁账号&#x…

Python web实战之Django 的 WebSocket 支持详解

关键词:Python, Django, WebSocket, Web 如何使用 Django 实现 WebSocket 功能?本文将详细介绍 WebSocket 的概念、Django 的 WebSocket 支持以及如何利用它来创建动态、响应式的 Web 应用。 1. WebSocket 简介 1.1 什么是 WebSocket? 在 W…

阿里云FRP内网穿透挂载多台服务器

1. FRP介绍 FRP (Fast Reverse Proxy) 是比较流行的一款。FRP 是一个免费开源的用于内网穿透的反向代理应用,它支持 TCP、UDP 协议, 也为 http 和 https 协议提供了额外的支持。你可以粗略理解它是一个中转站, 帮你实现 公网 ←→ FRP(服务器…

OpenCV importerror:dll load failed

从预编译的二进制文件安装OpenCV,从github下载opencv-4.8.0-windows.exe 编译好的文件。按照官方文档拖入cv2.pyd文件。 https://docs.opencv.org/4.8.0/d5/de5/tutorial_py_setup_in_windows.html 使用pycharm运行时,出现报错,importerror…

ITK-SNAP医学影像处理软件无法打开问题

安装ITK-SNAP后成功打开了一次之后再次打开就一直显示无法打开的提示, 在检查全路径为英文和其他版本的ITK-SNAP仍然无法打开; 解决办法: 根据报错的提示的路径,找到UserPreferences.xml 文件,将xml文件删掉,然后就可以…

好用的networkx绘图包

1. NetworkX简介 NetworkX 是一个用于创建、操作和研究复杂网络的 Python 库。它可以创建、分析和可视化各种类型的网络(包括有向图和无向图),例如社交网络、Web图、生物网络等。 NetworkX 提供了许多图的算法和分析工具,比如节点的度、网络的直径、最短…

【linux】2 软件管理器yum和编辑器vim

目录 1. linux软件包管理器yum 1.1 什么是软件包 1.2 关于rzsz 1.3 注意事项 1.4 查看软件包 1.5 如何安装、卸载软件 1.6 centos 7设置成国内yum源 2. linux开发工具-Linux编辑器-vim使用 2.1 vim的基本概念 2.2 vim的基本操作 2.3 vim正常模式命令集 2.4 vim末行…

GT Code - 图译算法编辑器(集成QT、C++、C、Linux、Git、java、web、go、高并发、服务器、分布式、网络编程、云计算、大数据项目)

目录 项目概述 发文意义 项目介绍 功能分析 设计概要 功能展示 项目文档 项目概述 “GT Code 图译算法编辑器”是一款跨平台、轻量级的代码编辑器,主要面向软件开发人员,它实现了编辑、编译、绘制代码流程图、生成调试演示动画等功能,以…

透过源码理解Flutter中widget、state和element的关系

1、framework源码组成 Flutter中widget、state、element的源码位于framework.dart中,整个文件6693行(版本Flutter 3.12.0-14.0.pre.28)。整个代码可划分为若干部分,主要包括key、widget、state、element四部分。 1.1 key 关于key的代码65行到272行&am…

如何让CSDN学习成就个人能力六边形全是100分:解析个人能力雷达图的窍门

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

142. 环形链表 II

题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内…

运维监控学习笔记8

在服务器端,我们添加了nginx-server的主机: 在解决Error问题的过程中,我还通过zabbix_get这个命令进行了测试,发现是没有的,后来确认是在web页面配置的过程中,我输错了密码。 yum install zabbix-getzabbi…

应急响应-Webshell

文章目录 一、Webshell概述什么是WebshellWebshell分类基于编程语言基于文件大小/提供的功能多少 Webshell 检测方法 二、常规处置方法三、技术指南1、初步预判2、 Webshell排查3、Web日志分析(查找攻击路径及失陷原因)4、系统排查4.1 Windows4.2 Linux …

淘宝API接口的实时数据和缓存数据区别

电商API接口实时数据是指通过API接口获取到的与电商相关的实时数据。这些数据可以包括商品库存、订单状态、销售额、用户活跃度等信息。 通过电商API接口,可以实时获取到电商平台上的各种数据,这些数据可以帮助企业或开发者做出及时的决策和分析。例如&…

SAP MM学习笔记23-购买发注的账户分配类型(勘定Category)

SAP中控制财务凭证过账科目的是 账号分配类型(勘定Category)栏目。 ・账号分配类型(勘定Category)有: 1,K 原价Center(成本中心。用于消耗物料采购 的过账) 2,E 得意先…

医疗PACS源码,支持三维多平面重建、三维容积重建、三维表面重建、三维虚拟内窥镜

C/S架构的PACS系统源码,PACS主要进行病人信息和影像的获取、处理、存储、调阅、检索、管理,并通过网络向全院提供病人检查影像及诊断报告;各影像科室之间共享不同设备的病人检查影像及诊断报告;在诊断工作站上,调阅HIS中病人的其它…

服务器数据恢复-HP EVA存储常见故障的数据恢复流程

EVA存储原理: EVA系列存储是以虚拟化存储为实现目的的中高端存储设备,内部的结构组成完全不同于其他的存储设备,RAID在EVA内部称之为VRAID。 EVA会在每个物理磁盘(PV)的0扇区写入签名,签名后PV会被分配到不…

2023企业微信0day漏洞复现以及处理意见

2023企业微信0day漏洞复现以及处理意见 一、 漏洞概述二、 影响版本三、 漏洞复现小龙POC检测脚本: 四、 整改意见 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#x…

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot

1.环境要求 以下服务器的操作系统均为Centos7 服务器A:Gitlab服务器B:GitlabRunner、Docker、docker-compose、Java1.8、maven3.6.3、git ps:这里可以把服务器B的GitlabRunner、Java1.8、maven3.6.3、git单独提出来,独立部署&a…