#include<stdio.h>
//用于表示顺序栈
typedef struct{
int data[1000];
int top;
int length;
}SeqStack;
//用于表示入栈序列
typedef struct{
int data[1000];
int top;
int length;
}SeqData;
//用于表示一个可能的出栈序列
typedef struct{
int data[1000];
int top;
int length;
}TestData;
/*顺序栈的基本操作-start*/
int emptyStack(SeqStack* stack){
if(stack->top == -1){
// printf("栈为空\n");
return 1;
}
else{
// printf("栈不为空\n");
return 0;
}
};
void initStack(SeqStack* stack,int length){
stack->top = -1;
stack->length = length;
}
int fullStack(SeqStack* stack){
if(stack->top == stack->length - 1){
// printf("栈满\n");
//getchar();
return 1;
}
else{
// printf("栈不满\n");
return 0;
}
}
int pushStack(SeqStack* stack, int data){
if(!fullStack(stack)){
// printf("入栈前top为:%d",stack->top);
stack->data[++(stack->top)] = data;
//getchar();
// printf("入栈后top为:%d",stack->top);
// printf("入栈成功,入栈数为:%d",stack->data[stack->top]);
return 1;
}
else{
// printf("入栈失败");
return 0;
}
} int popStack(SeqStack* stack){
if(!emptyStack(stack)){
// printf("出栈数为:%d\n",stack->data[stack->top]);
stack->top--;
// printf("出栈成功");
return 1;
}
else{
// printf("出栈失败");
return 0;
}
}
/*顺序栈的基本操作-end*/
int main(){
SeqStack stack;
TestData testData;
SeqData seqData;
int M, N ,K;
scanf("%d %d %d",&M, &N, &K);
initStack(&stack,M);
testData.length = N;
seqData.length = N;
//输入入栈序列
for(int i = 0; i < seqData.length; i++){
scanf("%d", &seqData.data[i]);
}
for(int j = 0; j < K; j++){
/*测试每个出栈序列时,都需要更新条件*/
stack.top = -1;
seqData.top = 0;
testData.top = 0;
for(int t = 0; t < testData.length;t++)
scanf("%d", &testData.data[t]);
while(testData.top < testData.length && stack.top < stack.length && seqData.top <= seqData.length){
// printf("进去while循环");
// getchar();
if(!emptyStack(&stack)){
if(stack.data[stack.top] == testData.data[testData.top]){
popStack(&stack);
testData.top++;
}
else
pushStack(&stack, seqData.data[seqData.top++]);
}
else
pushStack(&stack, seqData.data[seqData.top++]);
}
if(testData.top == testData.length)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
给定入栈序列,判断可能的出栈序列
最新推荐文章于 2023-05-16 19:59:37 发布