首页 > 其他分享 >栈的实现.

栈的实现.

时间:2024-08-24 12:26:38浏览次数:5  
标签:return 实现 tt 栈顶 取栈 为空 数据

         这是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;
    else
        return 0;
}
        代码解释

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


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


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

点个赞,关注一下呗~

标签:return,实现,tt,栈顶,取栈,为空,数据
From: https://blog.csdn.net/wyuchen123/article/details/140545685

相关文章

  • 实现多客户端与服务端的连接,并实现群聊效果
    1.创建客户端口packagecom.test4;importjava.io.IOException;importjava.net.Socket;importjava.util.ArrayList;publicclassKHD{publicstaticvoidmain(String[]args)throwsIOException{Socketlink=newSocket("127.0.0.1",6666)......
  • 051、Vue3+TypeScript基础,页面通讯之v-model在组件中手写实现
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//引入emitter用于全局事件总线//importemitterfrom'@/utils/emitter'constapp=createApp(App);//App.vue的根元素id为......
  • 如何使用 SQL Server 内置函数实现MD5加密
    目录前言一、MD5加密1、MD5加密的特点2、MD5加密的应用场景3、为什么MD5有用二、使用MD5三、MD5加密示例 四、SQL截取字符串substring总结最后前言在互联网时代,我们的数据基本都是在暴露在外面,数据安全变得越来越重要。我们经常需要保护一些个人信息,比如密码......
  • 折腾 Quickwit,Rust 编写的分布式搜索引擎(专为从对象存储中实现亚秒级搜索而设计)
    什么是Quickwit?Quickwit是首个能在云端存储上直接执行复杂的搜索与分析查询的引擎,并且具有亚秒级延迟。它借助Rust语言和分离计算与存储的架构设计,旨在实现资源高效利用、易于操作以及能够扩展到PB级数据量。Quickwit非常适合日志管理、分布式追踪以及通常为不可变数据......
  • 哈夫曼树和哈夫曼编码详解(包含Java代码实现)
    目录什么是哈夫曼树?如何构造哈夫曼树?构造过程代码实现哈夫曼树的结构构建哈夫曼树并计算WPL值测试代码什么是哈夫曼编码?如何构建哈夫曼编码?构建过程代码实现什么是哈夫曼树?哈夫曼树又称为最优树,是一类带权路径长度最短的树,在实际中有着广泛的应用。介绍哈夫曼树......
  • spring如何实现高可用高性能高并发
    在SpringBoot和SpringCloud中,可以通过以下方式实现高并发、高可用和高性能: 一、高并发 1. 异步处理-使用Spring的异步方法执行(@Async注解),将耗时的操作异步执行,不阻塞主线程,从而提高系统的并发处理能力。例如,对于一些数据处理、文件上传等操作,可以在后台异步进......
  • C#实现数据采集系统-数据反写(3)ModbusTcp写入数据模块开发
    写入报文分析//000100000006FF050001FF00写单个线圈//000100000006FF0600050023写单个寄存器//写多个寄存器//00060000000BFF1000020002040021002A//前7位相同,第八位功能码不同,九、十位写入地址,这是格式一样部分线圈......
  • 基于java教师课堂教学质量评价系统设计与实现
    课题背景高等学校的根本任务是培养人才,课堂教学是高校完成人才培养的重要环节,因此,教师教学质量的高低对学生掌握和运用知识的程度有着密不可分的作用,为了保证教师的教学质量,教学评价成为了各高校衡量教师教学质量的重要方式之一。目前,教师“听课”和学生“学期末教师课程评......
  • Java实现MQTT通信(发布订阅消息)
    文章目录前言一、相关pom依赖二、相关代码1.MQTT工具类2.MQTT回调函数3.订阅消息4.发布消息三、安装mosquitto1.mosquitto简介2.下载四、安装MQTT.fx1.MQTT.fx简介2.下载3.使用五、java订阅消息六、java发布消息前言MQTT是一种轻量级的物联网通信协议,基于客户端-......
  • springboot校园周边美食探索及分享平台的设计与实现
     运行环境环境说明:开发语言:java框架:springboot,vueJDK版本:JDK1.8数据库:mysql5.7+(推荐5.7,8.0也可以)数据库工具:Navicat11+开发软件:idea/eclipse(推荐idea)Maven包:Maven3.3.9+系统实现前台首页功能模块校园周边美食探索及分享平台,在系统首页可以查看首页、......