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

栈的实现

一.概念与结构

栈,是一种特殊的线性表,只允许在固定的一端进行插入删除元素的操作,进行数据插入删除操作的一端称为栈顶,另一端称为栈底。栈中的数据遵循后进先出的原则。

722597dabfe14c7ba938e50e64db9a14.png

 如图一个杯子一样遵循严格的顺序。

二.栈的实现

2.1栈的数据结构

指向栈顶的top,栈的容量大小capacity,以及栈arr。

63aa0186907b40c59fa9eff75bfeaaa0.png

 下面我们要实现的功能

0e6525b792404d1f9757ea6f6da8be0d.png

 2.2初始化与销毁

首先判断传来的指针是否为空,然后将数组至为null,top和capacity至为0。

销毁若arr不为空则free,将其至为null,top和capacity至为0。

b811a9ea5e964fe496d2aabd534f6e0e.png

2.3入栈与出栈

出栈只需判断栈是否为空,top➖➖。

入栈,首先判断是否为空。若空间足够则直接插入数据,top++。若空间不够则需要重新开辟空间,用newcapacity接收,若空间为0则开辟4,若不为0就开辟两倍的空间。随后将数组增容,用tmp来接收,realloc newcapacity个空间。

最后将tmp给arr,newcapacity给capacity。

0f32c9843c4f48feb5ab048854594790.png

 

2.4取栈顶元素

返回arr【top】然后top➖➖。


http://www.kler.cn/a/376644.html

相关文章:

  • cv.dnn.blobFromImage参数详解
  • WebGPU跨平台应用开发
  • 【表格解决问题】EXCEL行数过多,WPS如何按逐行分别打印多个纸张中
  • Spring AI : 让ChatGPT成为你构建应用的核心亮点
  • Mybatisplus多表关联分页查询有多种实现方式
  • C++STL——list
  • 操作系统-多线程案例
  • Muse-Ant-Desgin-Vue 改造成 Vite+Vue3
  • 023集——CAD 窗体交互、多段线进行翻转、错误提示(CAD—C#二次开发入门)
  • Milvus - 基于角色的访问控制(RBAC)
  • transformers 框架使用详解,bert-base-chinese
  • 网页自动化测试和爬虫:Selenium库入门与进阶
  • C++教程(004):程序流程结构之选择结构
  • GB/T 28046.3-2011 道路车辆 电气及电子设备的环境条件和试验 第3部分:机械负荷(1)
  • 免费插件集-illustrator插件-Ai插件-闭合开放路径
  • 设计师赵霂萱:以卓越设计让 Harmony Garden Workspace 荣膺国际大奖
  • Java 集合一口气讲完!(上)||o(*°▽°*)o|Ю [有人吗?]
  • JAVA 基础-多态
  • 2024年第四届“网鼎杯”网络安全大赛-赛前模拟训练
  • DNS服务部署
  • Java网络通信
  • 从0开始学python-day17-数据结构2
  • layui 实现 城市联动
  • git cherry-pick用法详解
  • 顺序表和链表(一)
  • jmeter结合ansible分布式压测--准备工作