栈之出栈序列判定
来源:互联网 发布:笔记本修改mac地址 编辑:程序博客网 时间:2024/04/28 03:55
题目描述
给一个初始的入栈序列,其次序即为元素的入栈次序,栈顶元素可以随时出栈,每个元素只能入栈依次。输入一个入栈序列,后面依次输入多个序列,请判断这些序列是否为所给入栈序列合法的出栈序列。
例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个出栈序列,但4,3,5,1,2就不可能是该序列的出栈序列。假设压入栈的所有数字均不相等。
输入
第二行输入n个整数,表示栈的压入顺序。
第三行输入整数t(1<=t<=10)。
后面依次输入t行,每行n个整数,表示要判断的每一个出栈序列。
输出
示例输入
5
1 2 3 4 5
2
4 5 3 2 1
4 3 5 1 2
示例输出
yes
no
提示
#include <stdio.h>
#include <stdlib.h>
#define maxsize 10000
#define sizenum 10000
typedef int element;
typedef struct
{
element *top;
element *base;
int stsize;
}sq;
int intistack(sq*s)
{
s->base=(element*)malloc(maxsize*sizeof(element));
if(!s->base)
return -1;
s->top=s->base;
s->stsize=maxsize;
return 0;
}
int push(sq*s,int k)
{
if(s->top-s->base>s->stsize)
{
s->base=(element*)realloc(s->base,(s->stsize+sizenum)*sizeof(element));
if(!s->base)
return -1;
s->top=s->base+s->stsize;
s->stsize+=sizenum;
}
*(++s->top)=k;
return 0;
}
void stempty(sq*s)
{
s->top=s->base;
}
int empty(sq*s)
{
if(s->top==s->base)
return 1;
else return 0;
}
int main()
{
int n,t,i,a[maxsize],b[maxsize],j;
sq s;
scanf("%d",&n);
for(i=0;i<=n-1;i++)
scanf("%d",&a[i]);
scanf("%d",&t);
intistack(&s);
while(t--)
{
stempty(&s);
for(i=0;i<=n-1;i++)
scanf("%d",&b[i]);
i=0;
j=0;
while(i<n)
{
if(a[i]==b[j])//若一样则代表可以把这个元素先进栈再出栈
{
i++;
j++;
}
else//不一样则代表该元素还未出栈(只能按顺序)
{
push(&s,a[i]);
i++;
}
}
int flag=1;
while(!empty(&s))
{
if(*(s.top)==b[j])
{
j++;
s.top--;
}
else
{
flag=0;
break;
}
}
if(flag==1)
printf("yes\n");
else printf("no\n");
}
return 0;
}
- 出栈序列判定
- 出栈序列判定
- 出栈序列判定
- 出栈序列判定
- 栈之出栈序列判定
- 栈->出栈序列判定
- 数据结构实验之栈七:出栈序列判定
- SDUT3334数据结构实验之栈七:出栈序列判定
- 数据结构实验之栈七:出栈序列判定
- 数据结构实验之栈七:出栈序列判定
- 数据结构实验之栈七:出栈序列判定
- 数据结构实验之栈七:出栈序列判定
- 数据结构实验之栈七:出栈序列判定
- 数据结构实验之栈七:出栈序列判定
- 数据结构实验之栈七:出栈序列判定
- 数据结构实验之栈七:出栈序列判定
- 数据结构实验之栈七:出栈序列判定
- 数据结构实验之栈七:出栈序列判定
- Java Web学习(28): Servlet学习(一)
- 优先队列
- Media Queries详解---转载
- java中的compareto方法的详细介绍
- JS——js语法
- 栈之出栈序列判定
- binbinyang-----百度地图拖动定位,显示附近地址poi提示搜索
- Java中创建对象的5种方式
- Android WiFi调试
- 【Dev Club分享第三期】iOS黑客技术大揭秘
- Druid的简介
- C#控制台 访问基类被屏蔽的方法
- python __call__ 内置函数的使用
- c++ 中new基本用法之使用错误