台州住房和城乡建设部网站,网站域名与网站首页网址,wordpress免费主题怎么用,江苏州 网站制作今天来讲讲栈 栈是什么#xff1f;
老样子#xff0c;先来看一道题#xff1a;
【栈】栈的基本操作
描述 栈的定义#xff1a;栈是一种特殊的表这种表只在表头进行插入和删除操作。因此#xff0c;表头对于栈来说具有特殊的意义#xff0c;称为栈顶。相应地#xff0…今天来讲讲栈 栈是什么
老样子先来看一道题
【栈】栈的基本操作
描述 栈的定义栈是一种特殊的表这种表只在表头进行插入和删除操作。因此表头对于栈来说具有特殊的意义称为栈顶。相应地表尾称为栈底。不含任何元素的栈称为空栈。 栈的逻辑结构假设一个栈 SS 中从顶到底的元素为 a_n,a_{n-1},\ldots,a_1an,an−1,…,a1则称 a_1a1 为栈底元素a_nan 为栈顶元 素。栈中的元素按 a_1,a_2,..,a_{n-1},a_na1,a2,..,an−1,an 的次序进栈。在任何时候出栈的元素都是栈顶元素。换句话说栈的修改是按后进先出的原则进行的。因此栈又称为后进先出 (Last In First Out) 表简称为 LIFO 表。所以只要问题满足 LIFO 原则就可以使用栈。 举个生活中的例子比如洗碗先洗的碗在底层后面洗的碗会叠在先洗的碗的上面。这样在使用的时候最后洗的碗就会先拿。 在程序实现上栈也是用数组来存放的需要一个数组下标变量来控制数据在数组的存入和读取等操作。 由于 C 的 STL 本身提供了栈这种数据结构你只要学会使用 STL 的栈操作就行了。 后面学的递归回溯算法递归会调用系统栈是来实现这个是递归内部实现我们不用去操作只是理解栈这个结构会帮助我们更好地理解递归这个算法。当然栈本身在一些题目上也会用到。 首先看一下 C 栈的方法的基本用法 push()向栈内压入一个成员 pop()从栈顶弹出一个成员 empty()如果栈为空返回true否则返回false top()返回栈顶但不删除成员 size()返回栈内元素的大小 普通栈的操作 #includeiostream
#includestack //使用栈需要的头文件
using namespace std;
int x;
int main(){stack intstk; //定义一个整数类型的栈变量 //入栈for(int i0;i50;i){cinx;stk.push(x); // 数据入栈 }cout栈的大小:stk.size()endl;while(!stk.empty()){coutstk.top()endl; //取出栈顶数据 stk.pop(); //删除栈顶数据就是出栈 }cout栈的大小:stk.size()endl;return 0;
}结构体栈的使用 #includeiostream
#includestack //使用栈需要的头文件
using namespace std;
struct people{int sg,tz;char xb;
};
people x;
int n;
int main(){stack people stk; //定义一个结构体类型的栈变量 //入栈cinn;for(int i0;in;i){cinx.sgx.tzx.xb; stk.push(x); // 结构体数据入栈 }cout栈的大小:stk.size()endl;while(!stk.empty()){x stk.top(); //取出栈顶数据coutx.sg x.tz x.xbendl; //取出栈顶数据 stk.pop(); //删除栈顶数据就是出栈 }cout栈的大小:stk.size()endl;return 0;
} 现给定一组栈的操作入栈与出栈要求按顺序输出出栈的数和最终留在栈里的数。
输入 一行若干个正整数以0结尾。
操作有如下几种
1 x表示将 x 入栈2表示将栈顶弹出。
输出 第一行按顺序输出出栈的数无则输出空行
如果出现栈满并且还有数据进栈则单行输出the stack is full!
如果出现栈空并且还有数据出栈则单行输出the stack is empty!
最后一行如果栈里还有数据则输出栈里的数注意出现栈满情况时也要输出栈里剩余的数。
输入样例 1
1 3 1 2 2 1 1 2 0
输出样例 1
2 1
3输入样例 2
1 3 2 2 1 3 1 4 1 5 1 6 0
输出样例 2
3the stack is empty!
提示
对于 100% 的数据栈的最大容量为 300每次需要入栈的正整数小于等于 10^9。
来源
lzy
首先我来讲一下展示怎么样的东西
这里有一个羽毛球筒
| | | | | | | | —
现在我把一号球放进去
| | | | | | |1| —
现在我把二号球放进去
| | | | |2| |1| —
现在我们要取出一个球我们只能先取出2再取出1先进入的数字反而最后出来也就是先进后出考试经常考哦
| | ——2取出 | | | | |1| — | | ——2取出 | | ——1取出 | | | | —
这就是栈像一个羽毛球筒 栈怎么写
定义是这样的
stackint q;
//其中里的数据类型代表q的类型
//比如现在q为int型
//如果把int改为longlongq就是longlong型
其他的操作室这样的
q.size()//求q的大小元素个数比如栈里有1和2元素个数就是2
!q.empty()//判断q是否为空空就是没有元素如果空了就返回1真否则返回2假
q.top();//获取栈顶的数字比如刚刚的羽毛球筒放了1和2用这个就会返回2
q.pop();//弹出栈顶把栈顶删掉将最后一个放入的2拿出就可以用这个
q.push(x);//入栈也就是把x跟球一样放进栈里
//注意了不管你怎么用都要加个括号
//q.size()这种返回数字的东西是可以当数字来用的
//比如if(q.size()300) ,就是判断q的元素个数是不是等于300
//aq.top();就是a栈顶的那个数字
所以我们就可以解出最开始的那道题了
#includebits/stdc.h
using namespace std;
int main(){stackint q;//定义 long long a,x;//定义a读的是前面的1或2 do{cina;//读入 if(a1){//a1说明要入栈 if(q.size()300){//如果说栈已经满了 coutendlthe stack is full!endl;//输出 while(!q.empty()){//循环栈没空就一直循环 coutq.top() ;//输出栈顶 q.pop();//弹出栈顶为下一次的输出做准备 } return 0;}//否则就可以正常入栈了 cinx;//读入 q.push(x);//入栈 }else if(a2){//如果要弹出 if(q.empty()){//如果栈空了就弹不了了 coutendlthe stack is empty!;//输出 return 0;}coutq.top() ;//否则输出栈顶 q.pop();//弹出栈顶 }}while(a!0);//a0就是要停止输入了 coutendl;while(q.size()!0){//循环只要栈的元素个数0就一直循环 coutq.top() ;//输出 q.pop();//弹出 }return 0;
} 你知道我写了多久吗写了20分钟。这还不值得你给我点个赞吗