卡码网语言基础课 | 19. 洗盘子

一、思路

// 总共有5个盘子,进行三次操作
// 洗盘子1001,洗盘子1002,1006未洗的盘子加入
// 剩余盘子:1006 1003 1004 1005

// n代表初始盘子堆放区中盘子的数量
// m代表接下来将会有 m 次操作。
// 1表示出栈,2表示入栈

二、知识点

1、栈

栈这种结构只能在栈顶进行插入和删除操作,而且是先进后出(先进入栈的元素离栈顶比较远,后出来),允许进行插入和删除的那一端是栈顶,与之对应的另一端是栈底。

如果一个栈不包含任何元素,这个栈被称为空栈。

在计算机领域,栈的应用也十分广泛,比如浏览器的历史回退编写文档时的“撤销”操作

2、栈的使用

1)创建一个栈

通过stack数据类型 栈名称这样的形式来创建一个栈

2)添加元素

push(): 进栈操作,将新的元素放入到栈中,新的元素成为栈顶元素。

3)移除元素

pop(): 出栈操作,栈顶元素从栈中离开

4)获取栈顶元素

top(): 获取栈顶元素,但是不会移除它

5)判断栈是否为空

empty(): 判断栈是否为空栈,如果为空栈返回true, 否则或者false

6)获取栈的长度

size(): 获取栈的长度,即栈中元素的数量

// 引入stack头文件
#include <stack>

// 创建一个int类型的栈
stack<int> st;

// 往栈中添加元素,现在栈底元素是1,栈顶元素是100
st.push(1);
st.push(10);
st.push(100);

// 移除栈顶元素100,新的栈顶元素是10
st.pop();

// 获取栈顶元素10
int topNumber = st.top();

// 如果栈为空,返回true;否则返回false
bool isEmpty = st.empty();

// 获取栈的长度(元素数量)
int stackSize = st.size();

三、代码

#include <iostream>
#include <stack>

using namespace std;

int main() 
{
    int n, m, opt, val, num;
    // 创建一个栈
    stack<int> Sta;
    cin >> n;
    // 将输入的盘子编号使用push操作推到栈中
    while (n--)
    {
        cin >> val;
        Sta.push(val);
    }
    
    // 接收m,表示m次操作
    cin >> m;
    while (m--)
    {
        cin >> opt;
        // 注意这里要判断是否为空,如果已经为空栈就不能再移除元素了
        // 如果指令为1,并且栈不为空的话,才弹出栈顶元素
        // 接收操作的指令,1表示出栈,2表示入栈
        if (opt == 1 && !Sta.empty()) Sta.pop();
        else
        {
            cin >> num;
            Sta.push(num);
        }
    }

    // 如果栈为空,表示栈中无元素,即盘子已经被洗完了
    if (Sta.empty()) cout << "All the dishes have been washed." << endl;
    else cout << Sta.top() << endl;
    return 0;
}

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值