学习了一下栈
但是是懂但不完全懂,我不理解有啥用,但也是了解了一下。
入栈出栈头文件
#include<cstdio>
#include<iostream>
#include<stack>
+一句using namespace std;
定义:stack<类型>名称;
入栈的函数:名称.push(填压入的数)
出栈函数:名称.pop()(不填)
栈的长度 名称.size()(不填)
栈顶:名称.top()(不填)
奶牛为例写一下感觉:
栈不是从第一个开始直到不满足结束,然后再看第二个,而是,从头判断到最后,一次性判断结束。
先把第一个数压入栈,看第二个数和栈顶(第一个数)的关系,如果满足栈顶大于第二个数就说明符合,即他能被栈顶看到(第一个数大于第二个数,第二个成为栈顶),再将该数压入栈,继续判断如果满足栈顶大于该数,说明第二个能看到该数,同时第一个也能。就加上栈长;如果不能符合条件,即栈顶小于该数,说明栈顶看不到该数,即将栈顶删除,栈顶变成第一个数,判断栈顶和该数的关系,如果栈顶大就说明栈顶那个数能看到该数,就可以加栈长,否则继续删除,在这个情况中栈已经清空,清空后无须再删除。。只能在把该数压入栈。。。然后继续判断。
栈是每个数都与前边的数比较,如第三个数判断时:直接判断第一个数能不能看到,第二个能不能看到。所以时间就会大大减少。
说实话就暂时理解了这一个题。其他都没想法,不了解用栈的方式。。。