数据结构实验之栈八:栈的基本操作
来源:互联网 发布:感官游戏结局知乎 编辑:程序博客网 时间:2024/05/03 12:52
数据结构实验之栈八:栈的基本操作
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description
堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,push 和 pop。push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。
Input
首先输入整数t(1 <= t <= 10),代表测试的组数,以后是 t 组输入。
对于每组测试数据,第一行输入两个正整数 m(1 <= m <= 100)、n(1 <= n <= 1000),其中m代表当前栈的最大长度,n代表本组测试下面要输入的操作数。 而后的 n 行,每行的第一个字符可能是'P’或者'O’或者'A’;如果是'P’,后面还会跟着一个整数,表示把这个数据压入堆栈;如果是'O’,表示栈顶元素出栈;如果是'A',表示询问当前栈顶的值'。
Output
对于每组测试数据,根据其中的命令字符来处理堆栈;
(1)对所有的'P'操作,如果栈满输出'F',否则完成压栈操作;
(2)对所有的'A'操作,如果栈空,则输出'E',否则输出当时栈顶的值;
(3)对所有的'O'操作,如果栈空,则输出'E',否则输出栈顶元素的值,并让其出栈;
每个输出占据一行,每组测试数据(最后一组除外)完成后,输出一个空行。
Example Input
25 10AP 9AP 6P 3P 10P 8AP 2O2 5P 1P 3OP 5A
Example Output
E98F835
Hint
#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#define OK 1#define ERROR 0using namespace std;typedef int ElemType;typedef int status;class Stack{private: ElemType *base ,*top; int stacksize;public : status Init_Stack(Stack &s,int m); int Empty_Stack(Stack s); status Push(Stack &s,ElemType e); status Pop(Stack &s,ElemType &e); status Get_Top(Stack &s,ElemType &e); void Operate(Stack &s,int n);};status Stack::Init_Stack(Stack &s,int m){ s.base = (ElemType *)malloc (m*sizeof(ElemType)); if (!s.base) return ERROR; s.top = s.base; s.stacksize = m; return OK;}int Stack::Empty_Stack(Stack s){ if (s.top == s.base) return 1; else return 0;}status Stack::Push(Stack &s,ElemType e){ *s.top++ = e; return 1;}status Stack::Pop(Stack &s,ElemType &e){ if(Empty_Stack(s)) return ERROR; else { e = *--s.top; return OK; }}status Stack::Get_Top(Stack &s,ElemType &e){ if (Empty_Stack(s)) return ERROR; else { e = *(s.top-1); return OK; }}void Stack::Operate(Stack &s,int n){ char ch[10]; ElemType e; for(int i=0; i<n; i++) { scanf ("%s",&ch); if (ch[0]=='A') { if (Empty_Stack(s)) cout<<'E'<<endl; else { Get_Top(s,e); cout<<e<<endl; } } else if (ch[0]=='P') { cin>>e; if (s.top - s.base >= s.stacksize) { cout<<'F'<<endl; } else { Push(s,e); } } else if (ch[0]=='O') { if (Empty_Stack(s)) cout<<'E'<<endl; else { Pop(s,e); cout<<e<<endl; } } }}int main(){ int t; cin>>t; Stack s; while (t--) { int n,m; scanf ("%d %d",&m,&n); s.Init_Stack(s,m); s.Operate(s,n); cout<<endl; } return 0;}
0 0
- 数据结构实验之栈八:栈的基本操作 SDUT
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 数据结构实验之栈八:栈的基本操作
- 杭电ACM2004题(成绩转换)-----Java语言
- 学习2
- Qt 给主窗口添加背景但不覆盖控件
- 一个页面从输入URL到页面加载显示完成,这个过程都发生什么?
- Qlabel添加动图
- 数据结构实验之栈八:栈的基本操作
- 【计算机视觉】背景建模--Vibe 算法优缺点分析
- 【2016.10.6NOIP普及模拟】Power
- 网狐框架分析一
- AS 抽屉侧滑菜单
- 图类算法总结
- VC中stdafx.h的妙用
- Qt重绘标题栏
- 网狐 由于网络问题,您已经与服务器断开连接,请重新连接。。。