stack(栈) 和queue(队列)的理解与掌握

周二上acm课的时候讲了栈(stack),这是一种后进先出的数据结构。从我的理解来看,特别像逢年过节的时候,我每次去奶奶家,我都能看到奶奶在烙饼,我感觉栈就非常像烙饼,进栈和出栈就像奶奶把烙好的饼堆上去和我吃饼,奶奶每次都把刚烙好的饼堆到最上面,我每次拿最上面的饼吃,在学习的时候我突然感觉可以这样理解。

可以举这样一个例子:奶奶依次把编号为1、2、3的饼堆在上面,然后我取出了3号饼吃掉,现在堆在最上面的就是2号饼,奶奶又把刚烙好的4、5号饼堆在上面,此时我如果想吃的话,就先从5号饼开始拿,然后是4号、2号、1号。

通过思考可以发现,越靠下的元素就越“牢固”,最上面的元素最容易被改变,也就是说,如果a比b早加入,那a比b就更容易后退出,这种数据结构就是栈(stack),是一种后进先出(Last In First Out,LIFO)的线性表。

义:stack<data_type> stack_name;

  如:stack <int> s;

操作:

  empty() -- 返回bool型,表示栈内是否为空 (s.empty() )

  size() -- 返回栈内元素个数 (s.size() )

  top() -- 返回栈顶元素值 (s.top() )

  pop() -- 移除栈顶元素(s.pop(); )

  push(data_type a) -- 向栈压入一个元素 a(s.push(a); )

写段小代码跑跑看看

#include<bits/stdc++.h>
using namespace std;
int main()
{
    //sync_with_stdio(false);
    stack<int>stack_s;
    stack_s.push(1);//一号饼堆上面
    stack_s.push(2);//二号饼堆上面
    stack_s.push(3);//三号饼堆上面
    stack_s.push(4);//四号饼堆上面
    cout<<"饼的个数为"<<stack_s.size()<<endl;
    cout<<"栈顶元素值(最上面的饼的编号)为"<<stack_s.top()<<endl;
    stack_s.pop();//吃掉最上面的饼
    cout<<"饼的个数为"<<stack_s.size()<<endl;
    if(stack_s.empty()) cout<<"盘子内为空"<<endl;
    else cout<<"盘子内不为空"<<endl;
    return 0;
}

运行结果为:

---------------------------------分割线---------------------------------

队列是一种先进先出(First In First Out,FIFO)的线性表。和栈相反,可以理解为:奶奶从下往上堆刚烙好的饼,我调皮就想从最下面的饼开始吃,也就是把最先堆上的饼吃掉。

再举上面的例子:奶奶依次把编号为1、2、3的饼堆在上面,然后我取出了1号饼吃掉,现在堆在最上面的还是3号饼,但是最下面的是2号饼,奶奶又把刚烙好的4、5号饼堆在上面,此时我如果想吃的话,就先从2号饼开始拿,然后是3号、4号、5号。

通过思考可以发现,越靠上的元素就越“牢固”,最下面的元素最容易被改变,也就是说,如果a比b早加入,那a比b就更容易先退出,这种数据结构就是队列(queue)。

义:queue <data_type> queue_name;

  如:queue <int> q;

操作:

  empty() -- 返回bool型,表示queue是否为空 (q.empty() )

  size() -- 返回queue内元素个数 (q.size() )

  front() -- 返回queue内的下一个元素 (q.front() )

  back() -- 返回queue内的最后一个元素(q.back() )

  pop() -- 移除queue中的一个元素(q.pop(); )

  push(data_type a) -- 将一个元素a置入queue(q.push(a); )

话不多说,上代码!

#include<bits/stdc++.h>
using namespace std;
int main()
{
    //sync_with_stdio(false);
    queue<int>queue_s;
    queue_s.push(1);
    queue_s.push(2);
    queue_s.push(3);
    queue_s.push(5);
    cout<<"第一个元素为"<<queue_s.front()<<endl;
    cout<<"最后一个元素为"<<queue_s.back()<<endl;
    queue_s.pop();//删掉第一个元素
    cout<<"元素个数为"<<queue_s.size()<<endl;
    cout<<"第一个元素为"<<queue_s.front()<<endl;
    cout<<"最后一个元素为"<<queue_s.back()<<endl;
    return 0;
}

运行结果为:

插播一句:

       据央视新闻,3月18日,中国社会科学院社会学研究所、社科文献出版社等机构共同发布《中国睡眠研究报告(2022)》。报告显示,过去十年国人的入睡时间晚了两个多小时,起床时间也晚了37分钟。睡眠平均时长从2012年的8.5小时缩减到2021年的7.06小时,睡眠时长减少1.5小时,仅35%的国人睡够8小时。北京朝阳医院呼吸睡眠中心主任郭兮恒表示:解决这些问题的话,一方面要保持一个良好的精神状态,情绪要乐观。再一方面就是生活要相对规律,建议大家应该在10点到11点这样的时间睡觉,最晚不要超过12点,睡眠时间最好能维持七到八个小时,睡醒以后精神状态饱满,就说明你的睡眠是健康的。

现在是1:37,该睡觉了,晚安各位ACMer~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轩Scott

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值