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

栈的实现.

         这是C++算法基础-数据结构专栏的第二十一篇文章,专栏详情请见此处


引入

        栈是一种常用的一种线性数据结构。它的使用非常广泛,例如在函数调用中用于保存局部变量、在表达式求值中用于保存操作数等。

        下面我们就来讲栈的实现。

定义

        栈(stack)的修改与访问是按照后进先出的原则进行的,因此栈通常被称为是后进先出(last in first out)表,简称 LIFO 表。

过程

        栈就像一个桶,只有一个开口,你往里放东西,等到你要拿东西的时候,第一个拿出来的一定是最后一个放进去的,这就叫先进后出。

        我们接下来要学习五种栈的最主要操作:构建,插入(写入)数据、删除数据、取栈顶值、判断栈是否为空

        构建栈

        我们先定义一个数组stk[],用来表示,接着还需要一个变量tt,用来表示栈顶

        向栈顶插入(写入)数据

        先在栈顶进行数据赋值,然后将tt++

        从栈顶弹出数据

        直接tt--,使栈减少一层。

Q:将栈减少一层,栈中还有刚刚的数据,直接做会不会有问题呢?

A:没有关系,将栈顶减少一层,就无法访问刚才的数据了,若后来插入数据,数据会被覆盖掉。所以,直接操作栈顶就可以实现了。

        取栈顶值

        输出stk[tt]的值即可。

        判断栈是否为空

        判断栈顶的位置,若tt==0,说明栈为空,反之也成立。

性质

        时间复杂度

        上述关于栈的操作,时间复杂度都是O(1)的。

代码

        下面给出栈的实现代码:

int stk[N],tt=0;void push(int x){stk[++tt]=x;
}void pop(){tt--;
}int top(){return stk[tt];
}bool empty(){if(tt==0) return 1;elsereturn 0;
}
        代码解释

        第一行的各种变量和数组已经在前面讲解了,这里不再详细讲解;push()函数的作用是向栈顶插入(写入)数据;pop()函数的作用是从栈顶弹出数据;top()函数的作用是取栈顶值;empty()函数的作用是判断栈是否为空。


上一篇-双链表的实现    C++算法基础专栏文章    下一篇-表达式求值问题的实现


每周六更新一篇文章,内容一般是自己总结的经验或是在其他网站上整理的优质内容

点个赞,关注一下呗~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 主线Buildroot开发
  • Kafka运行机制(二):消息确认,消息日志的存储和回收,生产者消息分区
  • Postman接口自动化测试:从入门到实践!
  • 物联网(IoT)设备渗透文章二:智能家居中控系统的渗透与利用
  • C++ 设计模式——观察者模式
  • 【CAN总线测试】——CAN数据链路层测试
  • RK平台一个系统固件兼容多款屏幕
  • 虚幻5|AI行为树,跟随task(非行为树AI)
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • 内存管理篇-03物理内存管理-32位
  • MySQL 的子查询(Subquery)
  • 单例模式 详解
  • 计算机毕业设计opencv+pytorch疲劳驾驶检测系统 自动驾驶 面部多信息特征融合的疲劳驾驶检测系统 驾驶员疲劳驾驶风险检测 深度学习 机器学习 大数据
  • Educational Codeforces Round 169 (Rated for Div. 2)
  • Java语言程序设计——篇十七(1)
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【347天】每日项目总结系列085(2018.01.18)
  • angular2开源库收集
  • canvas 高仿 Apple Watch 表盘
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • emacs初体验
  • JavaScript 奇技淫巧
  • Netty源码解析1-Buffer
  • oldjun 检测网站的经验
  • Otto开发初探——微服务依赖管理新利器
  • PHP的类修饰符与访问修饰符
  • SQLServer之创建显式事务
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 回顾2016
  • 精彩代码 vue.js
  • 聚簇索引和非聚簇索引
  • 面试总结JavaScript篇
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 什么软件可以剪辑音乐?
  • 怎么将电脑中的声音录制成WAV格式
  • mysql面试题分组并合并列
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​如何在iOS手机上查看应用日志
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (Ruby)Ubuntu12.04安装Rails环境
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十) 初识 Docker file
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (自用)仿写程序
  • ***通过什么方式***网吧
  • .form文件_一篇文章学会文件上传
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET的数据绑定
  • .NET下的多线程编程—1-线程机制概述
  • .Net中间语言BeforeFieldInit