元素出栈、入栈顺序的合法性(判断一个字符串是否按照出栈顺序)
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;
}
实现思路:总的来说就是模拟元素的出入栈过程,并进行判断。
首先,判断出栈序列和入栈序列的元素个数是否相等,若不相等,则不合法;若相等,则继续进行判断。
其次,遍历入栈序列并依次对元素进行入栈,在入栈每个元素时,都判断是否与出栈序列的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;
}
相关文章推荐
- 判断元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)是合法序列
- 剑指offer 22---判断元素出栈、 入栈顺序的合法性
- 根据已知入栈顺序判断一个数组是否是出栈顺序
- 判断元素出栈、入栈顺序的合法性。如:入栈的序列( 1,2,3,4,5 ),出栈序列为 ( 4,5,3,2,1 )是合法序列,入栈的序列( 1,2,3,4,5 ),出栈序列为( 1,5,3,2,4 )是
- 栈和队列的面试题(五)---判断元素出栈、入栈顺序的合法性
- 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都按照从左到右的递增的顺序排序,输入这样的一个数组和一个数,判断数组中是否包含这个数
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请按成 一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数
- 在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排列,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 二维数组中的查找-在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 利用顺序栈判断一个字符串是否是对称串
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排列,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 给定一个入栈顺序和一个出栈顺序,判断出栈顺序是否可能
- 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。(Python实现)
- 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上往下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该函数。
- 在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排列,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 利用顺序栈判断一个字符串是否为对称串