数据结构基础 之 栈

本文详细介绍了栈(stack)的数据结构及其在编程中的应用,包括栈的初始化方法、插入、删除、判断空栈和获取栈顶元素的操作,以及针对ACwing平台的一道相关题目和AC代码解析。通过实际操作演示,帮助读者理解栈的先进后出特性并掌握相关编程技巧。
摘要由CSDN通过智能技术生成

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

图解:(栈的物理模型可以抽象为单开口的桶状结构)
在这里插入图片描述
(因为栈是单开口的结构所以有着 先进后出 的特点)

初始化

使用数组来模拟栈的过程

定义一个变量来记录当前栈顶元素的下标

int stk[N], tt;         // stk 模拟栈,tt 记录栈顶下标

基本操作

插入

"向栈内插入一个数"

操作步骤

栈顶下标 tt 增大,然后将值赋值到 stk[tt] 即可

图解:
在这里插入图片描述
代码表示:

void insert(int x){
	stk[ ++ tt ] = x;
}

删除

"删除栈顶元素"

操作步骤

栈顶下标 tt 减小一位即可

图解:
在这里插入图片描述
代码表示:

void pop(){
	tt --;
}

判断栈是否为空

操作步骤

直接判断 tt 是否为 0 即可,如果为 0,那么说明栈顶位置在 0,即说明栈为空。

代码表示:

bool Empty(){
	if(tt == 0) return true;
	return false;
}

取出栈顶元素的值

操作步骤

因为tt就是栈顶元素的下标,所以直接返回stk[tt]即可

代码表示:

int query(){
	return stk[tt];
}

题目

题目链接

栈:https://www.acwing.com/problem/content/830/

AC代码

学算法就上AcWing!!!
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 100010;

int stk[N], tt;         // stk 模拟栈,tt 记录栈顶下标

void insert(int x)
{
    stk[ ++ tt] = x;
}

void pop()
{
    tt --;
}

bool empty()
{
    if ( tt > 0 ) 
        return false;
    return true;
}

int query()
{
    return stk[tt];
}

int main()
{
    int t;
    cin >> t;
    while (t -- )
    {
        string op;
        cin >> op;
        if(op == "push"){
            int n;
            cin >> n;
            insert(n);
        }
        else if(op == "pop")
            pop();
        else if(op == "empty")
        {
            if(empty())
                cout << "YES" << endl;
            else
                cout << "NO" << endl;
        }
        else
        {
            cout << query() << endl;
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值