您的位置:首页 > 其它

元素出栈、入栈顺序的合法性(判断一个字符串是否按照出栈顺序)

2018-04-10 21:10 316 查看
假设入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),判断出栈序列是否合法?

实现思路:总的来说就是模拟元素的出入栈过程,并进行判断。
首先,判断出栈序列和入栈序列的元素个数是否相等,若不相等,则不合法;若相等,则继续进行判断。
其次,遍历入栈序列并依次对元素进行入栈,在入栈每个元素时,都判断是否与出栈序列的index位置元素相等,若相等,出栈该元素,index++;若不相等,则不合法;并且index要小于出栈元素个数,否则不合法。
代码实现: //元素出栈入栈顺序的合法性

int StackOrder(StackType input[], StackType output[], int insize, int outsize)
{
assert(input);
assert(output);
if(insize != outsize)
return 0;
int i = 0;
SeqStack s;
InitSeqStack(&s);
int out_index = 0;
StackType top;
for(; i < insize; i++)
{
PushSeqStack(&s, input[i]);
while(TopSeqStack(&s, &top))
{
if(out_index >= outsize)
break;
if(top == output[out_index])
{
PopSeqStack(&s);
++out_index;
}
else
{
break;
}
}
}
if(out_index == outsize && TopSeqStack(&s, &top) == 0)
return 1;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐