某个序列是一个栈的入栈顺序,判断哪个是正确的出栈顺序
1 2 3 4 5 入栈
1 2 3 4 5 yes
3 2 1 4 5 yes
3 1 2 5 4 no
有可能边入边出
问题:两个容量相同的顺序栈,如何能够让空间利用率最高?
让两个栈相对着入栈
实现一个函数,序列a为入栈顺序,判断序列b是否是序列a的出栈顺序?
bool is_pop_stack(int a[],int b[],int len)
{
// 创建一个栈
// 按照a的顺序依次入一个
// 能不能按照b的顺序出,能就出,不能出就继续入a
// 判断是否栈空
}
bool is_pop_stack(int* a, int* b, int len)
{
//创建一个栈
stack_array* s = create_stack_arry(len);
// 按照a的顺序依次入一个
for(int i=0,j=0;i<len;i++)
{
push_stack(s, a[i]);// 123 4 5
// 能不能按照b的顺序出,能就出,不能出就继续入a
int val;
while (top_array_stack(stack,&val)&&val== b[j])//3 2 1 4 5
{
pop_stack(s);// 出元素
j++;
}
}
bool flag=empt_array_stack(stack);
destroy_array(stack);
return flag;
}
int main(int argc, const char* argv[])
{
int a[5] = { 1,2,3,4,5 };
int b[5] = { 3 ,1 ,2 ,5 ,4 };
printf("%s\n",is_pop_stack(a, b, 5)?"yes":"no");
return 0;
}