时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:6705

解决:1974

题目描述:

堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,push 和 pop。Push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。

输入:

对于每组测试数据,第一行是一个正整数 n,0<n<=10000(n=0 结束)。而后的 n 行,每行的第一个字符可能是'P’或者'O’或者'A’;如果是'P’,后面还会跟着一个整数,表示把这个数据压入堆栈;如果是'O’,表示将栈顶的值 pop 出来,如果堆栈中没有元素时,忽略本次操作;如果是'A’,表示询问当前栈顶的值,如果当时栈为空,则输出'E'。堆栈开始为空。

输出:

对于每组测试数据,根据其中的命令字符来处理堆栈;并对所有的'A’操作,输出当时栈顶的值,每个占据一行,如果当时栈为空,则输出'E’。当每组测试数据完成后,输出一个空行。

样例输入:
  1. 3
  2. A
  3. P 5
  4. A
  5. 4
  6. P 3
  7. P 6
  8. O
  9. A
  10. 0
样例输出:
  1. E
  2. 5
  3.  
  4. 3
来源:
2011年吉林大学计算机研究生机试真题

思路:

基本的堆栈数据操作。

代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define N 10000
  5.  
  6. int stack[N];
  7. int top;
  8.  
  9. void init()
  10. {
  11.     top = 0;
  12. }
  13.  
  14. int notEmpty()
  15. {
  16.     if (top <= 0)
  17.         return 0;
  18.     else
  19.         return 1;
  20. }
  21.  
  22. int push(int x)
  23. {
  24.     if (top < N)
  25.     {
  26.         stack[top++] = x;
  27.         return 1;
  28.     }
  29.     return 0;
  30. }
  31.  
  32. int pop(int *x)
  33. {
  34.     if (notEmpty())
  35.     {
  36.         *x = stack[--top];
  37.         return 1;
  38.     }
  39.     else
  40.         return 0;
  41. }
  42.  
  43. int printTop()
  44. {
  45.     if (notEmpty())
  46.     {
  47.         printf("%d\n", stack[top-1]);
  48.         return 1;
  49.     }
  50.     else
  51.     {
  52.         printf("E\n");
  53.         return 0;
  54.     }
  55. }
  56.  
  57. int main(void)
  58. {
  59.     int n, i;
  60.     char op[2];
  61.     int x;
  62.  
  63.     while (scanf("%d", &n) != EOF && n)
  64.     {
  65.         init();
  66.         for (i=0; i<n; i++)
  67.         {
  68.             scanf("%s", op);
  69.             if (op[0] == 'A')
  70.                 printTop();
  71.             else if (op[0] == 'P')
  72.             {
  73.                 scanf("%d", &x);
  74.                 push(x);
  75.             }
  76.             else if (op[0] == 'O')
  77.                 pop(&x);
  78.             //for (int j=0; j<top; j++)
  79.             //  printf("%d\t", stack[j]);
  80.             //printf("\n");
  81.         }
  82.         printf("\n");
  83.     }
  84.  
  85.     return 0;
  86. }
  87. /**************************************************************
  88.     Problem: 1108
  89.     User: liangrx06
  90.     Language: C
  91.     Result: Accepted
  92.     Time:10 ms
  93.     Memory:952 kb
  94. ****************************************************************/

九度OJ 1108:堆栈的使用 (堆栈)的更多相关文章

  1. 九度OJ 1108 堆栈的使用

    题目地址:http://ac.jobdu.com/problem.php?pid=1108 题目描述: 堆栈是一种基本的数据结构.堆栈具有两种基本操作方式,push 和 pop.Push一个值会将其压 ...

  2. 【九度OJ】题目1108:堆栈的使用 解题报告

    [九度OJ]题目1108:堆栈的使用 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1108 题目描述: 堆栈是一种基本的数据结构.堆 ...

  3. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  4. 【九度OJ】题目1153:括号匹配问题 解题报告

    [九度OJ]题目1153:括号匹配问题 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1153 题目描述: 在某个字符串(长度不超过1 ...

  5. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  6. 九度OJ 1502 最大值最小化(JAVA)

    题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...

  7. 九度OJ,题目1089:数字反转

    题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...

  8. 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)

    题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...

  9. 九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1531 题目描述: 小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在 ...

随机推荐

  1. configure: error: off_t undefined; check your library configuration

    configure: error: off_t undefined; check your library configuration 发生背景: 编译PHP时出现的提示,报错信息为: configu ...

  2. iOS开发之手势gesture详解(一)

    前言 在iOS中,你可以使用系统内置的手势识别(GestureRecognizer),也可以创建自己的手势.GestureRecognizer将低级别的转换为高级别的执行行为,是你绑定到view的对象 ...

  3. LightOJ 1140: How Many Zeroes? (数位DP)

    当前数位DP还不理解的点: 1:出口用i==0的方式 2:如何省略状态d(就是枚举下一个数的那个状态.当然枚举还是要的,怎么把空间省了) 总结: 1:此类DP,考虑转移的时候,应当同时考虑查询时候的情 ...

  4. C#知识点总结:Monitor和Lock以及区别

    Monitor对象 1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取 ...

  5. AC日记——图灵机游戏 codevs 2292

    2292 图灵机游戏  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description [Shadow 1]第二题 ...

  6. JS-日历签到

    实现的功能: 首先这是前端显示的内容,没有后台的配置哈: 1.显示当前年月下的日历表: 2.今天的日期独有背景色: 3.当月今天之前的日子号数颜色变浅,表示日期已过: 4.点击日期签到:(只能点击当天 ...

  7. Django 利用 Pagination 分页

    Django自身提供了一些类来实现管理分页,数据被分在不同的页面中,并带有“上一页/下一页”标签.这个类叫做Pagination,其定义位于 django/core/paginator.py 中. 一 ...

  8. k8s之pod控制器

    1.生产中,很少会跑一个自主式pod,一般由控制器去创建pod,其配置文件中内嵌了pod的创建方式. pod控制器:ReplicaSet.Deployment.DaemonSet.Job.Cronjo ...

  9. android添加桌面悬浮窗

    1. 添加权限 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 2. ...

  10. ListView 在设备切换横竖屏时保存状态

    比如listview在设备切换横竖屏时,仍然需要保证position, activity - > onSaveInstanceState  - > restoreInstanceState ...