因为最近在学栈,那我就整理了一下,希望大家能喜欢~
根据百度百科,栈的含义是:
错了错了,这个是汉字意义…
这个才是:
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈是一个先进后出的数据结构,也就是说,先压进去的东西,会在后面弹出来。
我们可以把它想象成一个桶,我们要往里放东西,而先放下去的东西要在盖在上面的东西全都拿掉以后才能拿出来。
图解:
然后我们来看一下STL里的栈。
(大家可以在我这篇STL的笔记里找到其他数据结构的用法,包括栈也是我从这里弄过来的,到时候会把那篇分享弄得好看一点)
stack(栈)
常用函数:
size(); 这个栈的长度
empty(); 返回这个栈是否为空
push(); 向栈顶插入一个元素
top(); 返回栈顶元素
pop(); 弹出栈顶元素
在调用STL库中的栈时,要记得导入头文件:
#include <stack>
然后在调用时就直接在栈的名称后面点一个点,然后输入函数就行了。
例:
s.size();
if(s.empty()) blablabla;
s.push(1);
cout<<s.top()<<endl;
s.pop();
好了,现在就是我们手写栈的隆重登场了~
这里放上我手写的栈:
struct Stack{
/*
这个是STL栈的东西,我从我的第一篇分享截过来的
stack(栈)
常用函数:
size(); 这个栈的长度
empty(); 返回这个栈是否为空
push(); 向栈顶插入一个元素
top(); 返回栈顶元素
pop(); 弹出栈顶元素
*/
int length,a[N]; //length为当前栈的长度,a为所有值
void create(){ //创建一个栈
length = 0;
}
int size(){ //返回这个栈的长度
return length;
}
int empty(){ //判断当前这个栈是否为空
if(length == 0) return true;
else return false;
}
void push(int x){ //向栈顶插入一个数x
a[++ length] = x;
}
int top(){ //返回栈顶
return a[length];
}
void pop(){ //从栈顶弹出一个数
if(length) length --;
}
//加后面这两个函数的原因是有的题目可能会要返回最小值或最大值,如果用STL就比较麻烦,所以这里就给大家写上了
int min_value(){ //返回当前栈的最小值(这个是自己加的,STL里面没有哦)
int minn = 0x3f3f3f3f;
for(int i = 1;i <= length;i ++){
minn = min(minn,a[i]);
}
return minn;
}
int max_value(){ //返回当前栈的最大值(这个是自己加的,STL里面没有哦)
int maxx = -0x3f3f3f3f;
for(int i = 1;i <= length;i ++){
maxx = max(maxx,a[i]);
}
return maxx;
}
int seek(int n){ //查找第n个数是什么(这个是自己加的,STL里面没有哦,刚刚在刷题的时候突然感觉这个东西好像挺经常出的)
return a[n];
}
}s; //这里记得加上栈的名称
我有写了一篇分享来讲我手写的栈,点击链接食用更加(附有调用事例哦~)
这里是栈的几个实际运用(到时候会增加):
这题是要括号匹配,我大概看了一下,这个要匹配的括号种类比较多,然后就选了这题:
题目链接:3693. 括号匹配
题解链接
然后呢,这种括号匹配的题目有很多扩展类型,我整理了两个,也都在题解里哦~这个是比较常考的一个栈的应用,就是求表达式的:
题目链接:151. 表达式计算4
题解链接
另外在这说一嘴,就是其他的表达式求和的题目大家都可以去做做,都是应用到了栈,那这个表达式4呢是把很多种运算综合了,学会了这道其他就都没什么大问题了这道是用了两个栈来实现的,也很常考:
参考资料:
关于栈的分享:
求个赞~
讲个队列
到时候我老师讲的时候一定弄
o
我估摸着老师估计想把数据结构都讲了,到时候我就出个数据结构的分享
我们老师不知道咋了,DP上的好好的突然去讲栈.....az
az
你的愿望即将实现,下一节课肯定讲的是队列
艹,变成讲单调栈了,不过下一次应该是队列
。我们也正在学单调栈,偶尔会穿插
hh
我们正在学队列
额
没事,下一次我应该就学队列了,明天QWQ
听一首歌鸭鸭鲸笑死我自己刚画好了忘记把图放上去了
你居然看到了
你是怎么看到的啊
F12大法
《狂补语文》
额,你是说我语文不好吗,
我语文还行啊,至少班上第一