#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#define TYPE int
typedef struct ArrayStack
{
TYPE* ptr;
size_t cal;
size_t top;
}ArrayStack;
ArrayStack* create_array_stack(size_t cal)
{
ArrayStack* stack = malloc(sizeof(ArrayStack));
stack->ptr = malloc(sizeof(TYPE)*cal);
stack->cal = cal;
stack->top = 0;
return stack;
}
void destory_array_stack(ArrayStack* stack)
{
free(stack->ptr);
free(stack);
}
bool full_array_stack(ArrayStack* stack)
{
return stack->top == stack->cal;
}
bool empty_array_stack(ArrayStack* stack)
{
return !stack->top;
}
bool push_array_stack(ArrayStack* stack,TYPE val)
{
if(full_array_stack(stack)) return false;
stack->ptr[stack->top++] = val;
return true;
}
bool pop_array_stack(ArrayStack* stack)
{
if(empty_array_stack(stack)) return false;
stack->top--;
return true;
}
bool top_array_stack(ArrayStack* stack,TYPE* val)
{
if(empty_array_stack(stack)) return false;
*val = stack->ptr[stack->top-1];
return true;
}
bool is_popstack(int* a,int* b,int len)
{
ArrayStack* stack = create_array_stack(len);
for(int i=0,j=0;i<len;i++)
{
int val = 0;
push_array_stack(stack,a[i]);
while(top_array_stack(stack,&val) && val == b[j])
{
pop_array_stack(stack);
j++;
}
}
bool flag = empty_array_stack(stack);
destory_array_stack(stack);
return flag;
}
int main(int argc,const char* argv[])
{
int in[5] = {1,2,3,4,5};
int out[5] = {1,3,5,2,4};
printf("%s\n",is_popstack(in,out,5)?"Yes":"No");
}