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’,否则输出栈顶元素的值,并让其出栈;
每个输出占据一行,每组测试数据(最后一组除外)完成后,输出一个空行。

Sample
Input
2
5 10
A
P 9
A
P 6
P 3
P 10
P 8
A
P 2
O
2 5
P 1
P 3
O
P 5
A
Output
E
9
8
F
8

3
5
Hint
建议: 用串的方式(%s)读入操作字符。

#include<bits/stdc++.h>using namespace std;#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERLOAD -2
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct
{ElemType *base;ElemType *top;int stacksize;
}Sqstack;
void InitStack(Sqstack &s)//初始化栈
{s.base = (ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));if(!s.base){exit(OVERLOAD);}s.top = s.base;s.stacksize = STACK_INIT_SIZE;
}
int GetTop(Sqstack s, ElemType &e)
{if(s.top == s.base) return ERROR;e = *(s.top-1);return OK;
}
void Push(Sqstack &s, ElemType e)//入栈
{if(s.top-s.base>=s.stacksize){s.base = (ElemType*)realloc(s.base, (s.stacksize+STACKINCREMENT)*sizeof(ElemType));if(!s.base) exit(OVERLOAD);s.top = s.base+s.stacksize;s.stacksize+=STACKINCREMENT;}*s.top++ = e;
}
int Pop(Sqstack &s, ElemType &e)//出栈,并将元素赋给e
{if(s.top == s.base) return ERROR;e = *--s.top;return OK;
}
int main()
{Sqstack li;InitStack(li);int t, n, m, e;char con[10];scanf("%d", &t);while(t--){InitStack(li);scanf("%d%d", &m, &n);while(n--){scanf("%s", con);if(con[0] == 'P'){scanf("%d", &e);if(li.top - li.base<m){Push(li, e);}else{printf("F\n");}}else if(con[0] == 'A'){int i = GetTop(li, e);if(i == ERROR) printf("E\n");else printf("%d\n", e);}else if(con[0] == 'O')//按照题目中的示例要求,在pop时也要求输出出栈的元素{int i = Pop(li, e);if(i == ERROR) printf("E\n");else{printf("%d\n", e);}}}if (t!=0) printf("\n");}
}

数据结构实验之栈与队列八:栈的基本操作相关推荐

  1. sdut 3335 数据结构实验之栈与队列八:栈的基本操作

    数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descri ...

  2. 八、【栈和队列】栈的应用

    栈的应用 栈具有先进后出的特点,这个特点在解决某些问题时是很有效的.本节我们来看几个栈的常见应用以及栈结构适合解决的问题类型. 1 数制转换 我们日常生活中用的是十进制,而计算机中绝大多数时候是二进制 ...

  3. 数据结构实验(严蔚敏版)----栈与队列

    数据结构(严蔚敏版)配套实验报告册--栈与队列基本操作 #include <stdio.h> #include <malloc.h> #include <stdlib.h ...

  4. 2.2基本算法之递归和自调用函数_数据结构与算法之5——队列和栈

    栈和队列比较简单,而且实用性非常广泛,这里主要介绍一下他们的概念和实现,在很多算法中,栈和队列的运用很重要,因此,虽然简单确是最重要的数据结构之一,必须重视. 栈是保证元素后进先出(后存入者先使用,L ...

  5. c++数据结构队列栈尸体_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)...

    第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...

  6. 数据结构-线性表之用队列实现栈用栈实现队列

    文章目录 **********用队列实现栈 一:思路 二:实现 (1)结构体定义 (2)初始化和销毁 (3)进"栈" (4)出"栈" 三:代码 ******** ...

  7. c语言中缀表达式求值_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)

    第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...

  8. 数据结构(线性表,队列,栈,树,图)

    数据结构体系图 1.线性表的顺序存储 //<span style="font-size:18px;">线性表顺序存储结构的构建</span> #includ ...

  9. 数据结构之栈和队列以及如何封装栈和队列,栈和队列的实例(进制转换和击鼓传花)

    什么是数据结构? 不同的书对数据结构有不同的定义,例如: "数据结构是数据对象,以及存在于该对象的实例和 组成实例的数据元素之间的各种联系.这些联系可以通过定义相关的函数来给出." ...

最新文章

  1. php 彩色标签插件,zblog php 彩色标签CSS源码
  2. Linux文件系统目录结构
  3. 如何通过方法(函数)来实现两个基本数据类型的数值交换
  4. 回调函数原理与Python实现
  5. c++中计算2得n次方_PLC-上海会通松下PLC中的数据类型有哪些?
  6. codevs 4927 线段树练习5 线段树基本操作模板
  7. 小学期实践心得(2)
  8. RHEL7 运行级别简介及切换操作
  9. 液晶8K电视也能打造家庭影院?一起“宅”过电影情人节吧
  10. easydarwin 安装_linux环境安装部署easydarwin流媒体服务器详细教程
  11. 【2017年第4期】面向特定领域大数据平台架构及标准化研究
  12. 基于libVLC的视频播放器之四:直接使用libVLC
  13. C++ primer (5th) 随想与学习笔记 6 优先级晦涩难通 新标准更清晰
  14. 嵌入式网络的基础知识 -- 数据包的组装、拆解、各头部格式
  15. 去了字节跳动,才知道年薪40W的测试有这么多?
  16. RGB颜色值与十六进制颜色码
  17. stick棍子by Ye
  18. 2023年软考报哪门比较好?
  19. 深度学习常见名词概念:Sota、Benchmark、Baseline、端到端模型、迁移学习等的定义
  20. 每周推荐阅读2013Q2汇总

热门文章

  1. 计算机科学和机器学习中的代数学、拓扑学、微积分以及最优化理论
  2. 可视化-echarts流向图制作及recharts
  3. Cmd Markdown 公式指导手册
  4. 手把手教你实现一个 AdaBoost
  5. haproxy 学习记录
  6. 图数据库应用:金融反欺诈实践
  7. Java 8 - Lambda从兴趣盎然到索然无味
  8. 白话Elasticsearch44-深入聚合数据分析之案例实战_颜色+品牌下钻分析时按最深层metric进行排序
  9. Elasticsearch-02CentOS7安装elasticsearch-head插件
  10. MyBatis-06 MyBatis XML方式之多个接口参数用法