数据结构实验之栈与队列七:出栈序列判定
Description
给一个初始的入栈序列,其次序即为元素的入栈次序,栈顶元素可以随时出栈,每个元素只能入栈依次。输入一个入栈序列,后面依次输入多个序列,请判断这些序列是否为所给入栈序列合法的出栈序列。
例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个出栈序列,但4,3,5,1,2就不可能是该序列的出栈序列。假设压入栈的所有数字均不相等。
Input
第一行输入整数n(1<=n<=10000),表示序列的长度。
第二行输入n个整数,表示栈的压入顺序。
第三行输入整数t(1<=t<=10)。
后面依次输入t行,每行n个整数,表示要判断的每一个出栈序列。
Output
对应每个测试案例输出一行,如果由初始入栈序列可以得到该出栈序列,则输出yes,否则输出no。
Sample
Input
5
1 2 3 4 5
2
4 5 3 2 1
4 3 5 1 2
Output
yes
no
思路:
首先建立一个栈,将输入的数据保存在数组中,一个一个的进栈,然后每一个进栈的时候都与目标序列元素相比较,当二者相等的时候,出栈,然后继续获取栈顶元素余下一个序列元素相比较,相等就接着比较下一个,如果不相等就继续入栈操作,当入栈操作结束后。判断
#include<bits/stdc++.h>using namespace std;#define intsize 10010
#define addsize 10010typedef int elemtype;typedef struct
{elemtype *base;elemtype *top;int stacksize;
} Sqstack;int initstack(Sqstack &s)
{s.base = (elemtype *)malloc(intsize *sizeof(elemtype));if(!s.base)return -1;s.top = s.base;s.stacksize = intsize;return 0;
}
int push(Sqstack &s, elemtype x)
{if(s.top - s.base > s.stacksize){s.base = new elemtype[intsize + addsize];if(!s.base)return -1;s.top = s.base + addsize;}*s.top++ = x;return 0;
}elemtype top(Sqstack &s)
{return *(s.top - 1);
}elemtype pop(Sqstack &s)
{return *--s.top;
}int emptystack(Sqstack &s)
{if(s.base == s.top)return 1;elsereturn 0;
}
int main()
{Sqstack s;int n, i, t, k;int b[10010], a[10010];memset(a, 0, sizeof(a));scanf("%d", &n);for(i = 0; i < n; i++){scanf("%d", &a[i]);}scanf("%d", &t);while(t--){k = 0;initstack(s);memset(b, 0, sizeof(b));for(i = 0; i < n; i++)scanf("%d", &b[i]);for(i = 0; i < n; i++){push(s, a[i]);while(top(s) == b[k] && emptystack(s) != 1){pop(s);k++;}}if(emptystack(s) == 1)printf("yes\n");elseprintf("no\n");}return 0;
}
数据结构实验之栈与队列七:出栈序列判定相关推荐
- 栈与队列-之出栈和入栈
·栈的概念: -运算只在表的一端进行,一般线性表而言,插入删除都可以在任意一个位置进行的 ·队列:入栈和出栈只能分别在两端中的一边,就是说它在一端入队列,在另外一端当中去出队列.从某种意义上讲栈和队列 ...
- sdut 3335 数据结构实验之栈与队列八:栈的基本操作
数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descri ...
- 【数据结构】栈和队列OJ练习(栈和队列相互实现+循环队列实现)
目录 前言 1.用队列实现栈 2.用栈实现队列 3.循环队列 前言 前面在学习了栈和队列的实现之后,相信大家对栈和队列的结构和使用方式都有了一些理解. 下面我们就来进行一些练习,这这章的练习相对于原来 ...
- abcde依次进入一个队列_一个队列的入队序列为:abcde,则队列的出队序列是( )。
[判断题]在具有头结点的单链表中,头指针指向单链表中第一个元素结点. [单选题]n个结点的线索二叉树上含有的线索数为( ) . [判断题]A 算法的时间复杂度为O(n),B算法的时间复杂度为O(2 n ...
- 面试题 03.04. 化栈为队/面试题09. 用两个栈实现队列/232. 用栈实现队列
2020-05-08 1.题目描述 用两个栈实现一个队列 2.题解 将一个栈用来进行入操作,另一个进行出操作,入栈直接入,出栈的时候如果是空的则把另一个 栈中的所有元素移动过来,再进行出栈,否则直接出 ...
- 栈和队列:1.栈(Stack)
栈,线性表的一种特殊的存储结构.与学习过的线性表的不同之处在于栈只能从表的固定一端对数据进行插入和删除操作,另一端是封死的. 图1 栈结构示意图 由于栈只有一边开口存取数据,称开口的那一端为" ...
- C语言实现栈的进栈与出栈、输出栈顶元素、元素个数、销毁栈
/********************************引入头文件**************************************************/ #include&l ...
- 已知入栈顺序求所有的出栈顺序已知出栈顺序求所有的入栈顺序
一.已知入栈顺序求所有的出栈顺序 已知入栈顺序是{1,2,3,4,5},求所有的出栈顺序? 我的思路: 既然入栈顺序固定,我觉得可以使用递归来做. 先定义一个函数,比如说叫做help. //伪代码 v ...
- 详解+G - 数据结构实验之栈与队列七:出栈序列判定
理解: 出入栈规律之一,如果前面有一个比较大的数,后面有连续的递增顺序,递增顺序>=2个小于前面比较大的数,那么此出栈顺序不可能实现.比如4,1,2,3,5. 思路:输入一个数,然后不断按照顺序 ...
最新文章
- python将二维列表内容写入和读取.txt文件
- iOS:后台定位并实时向服务器发送位置
- Android C/C++ 开发
- 【数据结构总结】第三章:栈和队列(线性结构)
- Javascript的变量作用域居然可以跨越多个函数!
- c++ string 拼接_C++日志(二十五)字符数组、字符数组指针和string类
- IntelliJ IDEA 如何设置编辑窗口的背景图片
- 企业Linux安全机制遭遇信任危机 SELinux成骇客帮凶?
- 如何使用Xilisoft Video Editor将多个视频文件合并到一个文件中?
- 矩阵的特征值及特征向量理解
- FileviewPro万能文件查看器
- Show, Control and Tell: A Framework for Generating Controllable and Grounded Captions
- 自动机器学习-auto-sklearn
- GB/T 28181-2011、2016、2022变更对比
- 微信用户提现功能 显示NO_AUTH | 产品权限验证失败,请查看您当前是否具有该产品的权限(企业付款到零钱 银行卡)
- 苹果发布会说明了什么?
- 解决 Flutter 在 iOS 模拟器中运行卡住问题
- 推荐一款截图神器——FSCapture
- 小班中班,随机10以内加法练习题,A4纸可直接打印
- 胆碱能型荨麻疹(遇热过敏型)
热门文章
- Python 'takes exactly 1 argument (2 given)' Python error
- 小米亿级大数据实时分析与工具选型 【转】
- Java问题排查工具箱
- Spring Cloud一站式的微服务架构解决方案
- mysql Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
- JPDA 利用Eclipse和Tomcat进行远程调试 --转
- nginx 学习笔记(2) nginx新手入门
- 深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) By 李泽南2017年6月26日 15:57 本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:Te
- 使用文本挖掘实现站点个性化推荐
- 信息检索与数据挖掘的常用加权技术。