题目描述:给定一个入栈顺序和一个出栈顺序,判断出栈和进栈是否为同一个栈。
解析,这道题说难也有点难,说不难也不难,难的地方在于代码的实现,不难的地方在于这道题实际上很容易想到解法,也就是创建一个栈Tmp,按照进栈顺序进栈,如果出栈顺序的当前值等于进栈的值则出栈,然后依次循环,直到最后出栈顺序为空,则出栈顺序和进栈顺序为同一个栈。
typedef struct d{
int data[max]
int top
}stack
bool isPopOrder(int *pushA,int *popA,int len)
{
bool ret=false
if(len>0)
{
int *pNextPush=pushA
int *pNextPop=popA
stack *s=(stack *)malloc(sizeof(stack))
s->top=-1
for(
{
for(
{
printf("I am here")
if(pNextPush-pushA==len)
{
break
}
s->data[++s->top]=*pNextPush
pNextPush++
}
if(s->data[s->top]!=*pNextPop)
{
break
}
s->data[s->top--]
pNextPop++
}
if(s->top==-1&&(pNextPop-popA==len))
{
ret=true
}
}
return ret
}
int main()
{
int pushArr[]={1,2,3,4,5}
int popArr[]={4,5,3,2,1}
int len=sizeof(pushArr)/sizeof(pushArr[0])
bool ret=isPopOrder(pushArr,popArr,len)
printf("%d\n",ret)
}