02-线性结构4 Pop Sequence (25分)

Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of the stack. For example, if M is 5 and N is 7, we can obtain 1, 2, 3, 4, 5, 6, 7 from the stack, but not 3, 2, 1, 7, 5, 6, 4.

Input Specification:

Each input file contains one test case. For each case, the first line contains 3 numbers (all no more than 1000): M (the maximum capacity of the stack), N (the length of push sequence), and K (the number of pop sequences to be checked). Then K lines follow, each contains a pop sequence of N numbers. All the numbers in a line are separated by a space.

Output Specification:

For each pop sequence, print in one line "YES" if it is indeed a possible pop sequence of the stack, or "NO" if not.

Sample Input:

5 7 5
1 2 3 4 5 6 7
3 2 1 7 5 6 4
7 6 5 4 3 2 1
5 6 4 3 7 2 1
1 7 6 5 4 3 2

Sample Output:

YES
NO
NO
YES
NO

实现一个栈的数据结构,用数组和一个下标来模拟。判断是否会出现堆栈爆满的情况。

#include <stdio.h>

#define MAXVAL 1000

static int sp = 0;
static int val[MAXVAL]; int push(int i, int M)
{
int ret = 0;
if (sp < M) {
val[sp++] = i;
}
else {
ret = -1;
}
return ret;
} int pop(void)
{
return sp > 0 ? val[--sp] : 0;
} int get_top(void)
{
return sp > 0 ? val[sp - 1] : 0;
} int main(int argc, char const *argv[])
{
int M, N, K; scanf("%d %d %d", &M, &N, &K); while (K--) {
sp = 0;
int line[N];
for (int i = 0; i < N; i++) {
scanf("%d", &line[i]);
}
int index = 0, x = 2; push(1, M);
int ok = 1;
while (index < sizeof(line) / sizeof(line[0])) {
int top = get_top();
if (top == line[index]) {
pop();
index++;
}
else if (push(x++, M) < 0) {
ok = 0;
break;
}
}
if (ok) {
printf("YES\n");
}
else {
printf("NO\n");
}
}
return 0;
}

最新文章

  1. Linux命令
  2. 如何让 UITableViewCell 中的 imageView 大小固定
  3. js的变量作用域 ,变量提升
  4. 一、Microsoft Dynamics CRM 4.0 SDK概述
  5. linux thread 互斥锁
  6. ThreadLocal用法和实现原理(转)
  7. java 图形界面 Socket编程
  8. VPN断开后断网脚本
  9. springMvc学习笔记一
  10. 【dp】P2642 双子序列最大和
  11. IdentityServer4实战 - API与IdentityServer的交互过程解析
  12. Cpython解释器下实现并发编程
  13. C# 只开启一个程序,如果第二次打开则自动将第一个程序显示到桌面
  14. ****** 三十四 ******、软设笔记【存储器系统】-Cache存储器
  15. Python-Django-Ajax进阶
  16. mybatis.xml和mapper.xml的配置
  17. Struts 2 初步入门(六)之处理结果类型
  18. 【驱动】Flash设备驱动基础&#183;NOR&#183;NAND
  19. 如何使用HttpClient来发送带客户端证书的请求,以及如何忽略掉对服务器端证书的校验
  20. 我们使用git checkout 将B分支上的部分页面代码 添加或覆盖到A分支上

热门文章

  1. Elasticsearch:跨集群复制 Cross-cluster replication(CCR)
  2. Elasticsearch方案选型必须了解的10件事!
  3. Java SE 19 虚拟线程
  4. Java复制Word文档
  5. css过渡样式
  6. Kafka之工作流程分析
  7. .NET Core C#系列之XiaoFeng.Threading.JobScheduler作业调度
  8. 你真的会使用Typora吗?
  9. selenium 添加特殊配置(如不完整 希望各位大神评论告诉我)
  10. 以开发之名 | bilibili会员购让IP在眼前动起来