【问题描述】

给出一个堆栈的输入序列,试判断一个序列是否能够由这个堆栈输出。如果能,返回总的出栈次数,如果不能,返回0。序列的输入及输出都是从左往右。(输入输出序列皆为整数且没有重复的数字,如果一个数字在输入序列中没有出现,那么其在输出序列中也不会出现)
【输入形式】

第一行为输入序列的长度,然后为输入序列的数字;第二行为输出序列的数字。输入数据以空格隔开。
【输出形式】

如果是一个出栈序列,则返回总的出栈次数, 否则返回0
【样例输入】

5 1 2 3 4 5
1 2 3 4 5

【样例输出】

5

【样例说明】

第一行输入的第一个数字是序列的长度,1 2 3 4 5 输入序列,以空格隔开,输出的总的出栈次数。
【评分标准】

原理:

源码:

#define MAXSIZE 50  //定义栈中元素的最大个数
#include<stdio.h>
#include<stdlib.h>
typedef struct {int data[MAXSIZE];int top;    //用于栈顶指针
}SqStack;void InitStack(SqStack* S) {S->top = -1;    //初始化栈顶指针
}bool StackEmpty(SqStack* S) {if (S->top == -1) {return 0;    //栈空}else {return 1;   //不空}
}/*插入元素e为新的栈顶元素*/
bool Push(SqStack* S, int e) {//满栈if (S->top == MAXSIZE - 1) {return 1;}S->top++;   //栈顶指针增加一S->data[S->top] = e;    //将新插入元素赋值给栈顶空间return 0;
}/*若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR*/
bool Pop(SqStack* S, int* e) {if (S->top == -1) {return 1;}*e = S->data[S->top];   //将要删除的栈顶元素赋值给eS->top--;   //栈顶指针减一return 0;
}int main()
{SqStack* A = (SqStack*)malloc(sizeof(SqStack));InitStack(A);int n;int k = 0;int k1 = 0;int flag = 0;int tem[20];int tem1[20];int count = 0;int e = 0;scanf_s("%d", &n);for (int i = 0; i < n; i++)//入栈序列{scanf_s("%d", &tem[i]);}for (int i = 0; i < n; i++)//出栈序列{scanf_s("%d", &tem1[i]);}for (k; k < n; k++){Push(A, tem[k]);//输入序列一个个入栈while (A->data[A->top] == tem1[k1])//判断栈顶元素与输出序列的第k1个元素是否相等(相等则出栈){Pop(A, &e);k1++;count++;}}//printf("%d  %d\n",k,k1);//测试用的if (StackEmpty(A))//栈为空则{flag = 1;}if (flag == 0){printf("%d",count);}else {printf("%d", 0);}return 0;}

判断一个序列是否是栈的输出序列(原理和源码(C语言))相关推荐

  1. 一个栈输入序列为1,2,3,4,5,则下列序列中不可能是栈的输出序列是?

  2. c语言输出字符的utf码,C语言里如何把GBK码转换为UTF8?

    C语言里如何把GBK码转换为UTF8? (2013-03-04 19:41:31) 标签: it 一.利用iconv函数族进行编码转换 在LINUX上进行编码转换时,既可以利用iconv函数族编程实现 ...

  3. 【2020团队天梯赛模拟题L2-1】 根据输出序列判断是否是栈的输出结果(C语言)

    [2020团队天梯赛模拟题L2-1] 根据输出序列判断是否是栈的输出结果(C语言) (因为找不到题目只有回忆写题了)题目描述:输出m,n,k3个整数,其中m代表栈的最大存储容量,n代表输出序列的个数, ...

  4. c++判断一个数字是否为buzz number的算法(附完整源码)

    C++判断一个数字是否为buzz number的算法 C++判断一个数字是否为buzz number的算法完整源码(定义,实现,main函数测试) C++判断一个数字是否为buzz number的算法 ...

  5. 【Python】Python实验:回文是一个正向和逆向都相同的整数,如123454321、463364、9889。编写函数判断一个整数是否是回文数。

    回文是一个正向和逆向都相同的整数,如123454321.463364.9889.编写函数判断一个整数是否是回文数. 算法源码 def huiwen(n):if n==n[::-1]: ##正序和倒序是 ...

  6. 判断一个点在三角形内

    http://www.gimoo.net/t/1505/5557e812d7390.html 判断点是否在三角形内 本文只是翻译和整理,原文在此http://www.blackpawn.com/tex ...

  7. 判断一个序列是否为栈的有效输出序列

    栈的实际应用-判断一个序列是否为栈的有效输出序列 对于数据结构学科的初学者,栈的构建是很重要的知识,判断一个栈是否为有效输出序列是其中重要的题目.笔者整理了三种C++代码,其核心编程思想大致相同,希望 ...

  8. 判断一个序列是否可由给定序列通过栈操作获得

    Java代码: public class LegalSequence {public static void main(String[] args) {// System.out.println(le ...

  9. 给定入栈序列,判断一个串是否为出栈序列

    剑指offer22:给定入栈序列,判断一个串是否为出栈序列 public static boolean isOutStackSequence(int[] Spush, int[] Spop) {if ...

最新文章

  1. [译]Web 性能优化: 图片优化让网站大小减少 62%
  2. c语言 #define dpath .exe是什么意思,C语言宏定义#define
  3. js 中动态添加成员对象与数组或map转换(成员字段含有.)
  4. 毫秒级百万数据分页存储过程
  5. QQ浏览器怎么截取整个网页 QQ浏览器完整截取网页的方法
  6. Simulink之多重逆变电路
  7. springmvc java中转发_springmvc实现转发和重定向
  8. 电脑计算机和算盘童话作文,消失的算盘作文
  9. K8S - 为 Docker 而生
  10. [Leetcode][JAVA] Populating Next Right Pointers in Each Node II
  11. 设置背景色为渐变色 css
  12. matlab做瑞利信道仿真,瑞利信道怎么用 matlab做仿真
  13. Java job interview:WinForm桌面小程序设计思想及项目实现思路
  14. 几种网赚项目引流的方法
  15. matlab相对误差,相对误差与相对误差限定义-精品课程-山东科技大学.PPT
  16. Arduino UNO测量电容值
  17. 系统监控+流量监控+抓包分析
  18. 自然语言处理-英文文本 python
  19. 工控modbus协议fuzz测试验证小结
  20. HTML免费在线文档批量翻译工具

热门文章

  1. filemaker mysql_FileMaker Pro Advanced(数据库管理工具)下载_FileMaker Pro Advanced(数据库管理工具)官方下载-太平洋下载中心...
  2. 小米6设置位置服务器,教你如何科学地设置一台小米6
  3. Cookie功能被禁用,如何启用?
  4. android 哪个服务提示 存储设备空间不足,请释放一些空间,手机出现空间不足,至少需要449.93MB手机存储空间怎么办...
  5. 2022起重机司机(限桥式起重机)考试题目及答案
  6. 部署到服务器上的网站无法访问了,在服务器上部署网站
  7. AKH-0.66K型开口式电流互感器,可带电操作
  8. 饭局不要乱说话,避免祸从口出
  9. 自定义http状态码
  10. 【Stata】利用Stata快速完成一篇实证论文的模板(代码分享)