假设输入序列是1.2.....n, 设计一个算法判断通过一个站能否得到由a【0.....n-1】指定出栈序列。 (e.g. n=3,a[]={2,3,1} 合法。;a[]={3,1,2}不合法。
k扫描a(k从0开始)i=1到n循环
{ 进栈i;
while(a[k]=i)
{出栈i,k++}
}
若栈空返回true;否则返回false;
bool Validseq(int a[],int n) { int i,e,k=0; //k扫描a的元素 bool flag; SqStack *st; InitStack(st); for(i=1;i<=n;i++) //处理输入序列 { Push(st,i); //i进栈 while(!StackEmpty(st)) //栈不空,循环 { GetTop(st,e); //取栈顶元素 if(a[k] == e) //匹配情况 { Pop(st,e); k++; } else break; //不匹配退出循环 } } flag = StackEmpty(st); DesttoryStack(st); return flag; }