周二上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~