每日一题——出栈入栈顺序的合法性

本文探讨如何判断元素的出栈入栈顺序是否合法。例如,入栈顺序1,2,3,4,5,出栈顺序4,5,3,2,1是合法的,而4,5,3,1,2则是不合法的。解决方案包括检查序列的长度和内容,使用栈结构模拟入栈过程,并与出栈序列进行比较。" 53177405,5568351,水平/垂直滚动联动实现,"['控件', '软件开发', 'Android开发', '自定义控件']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

判断元素出栈入栈顺序的合法性
例子:
入栈顺序:1,2,3,4,5 出栈顺序:4,5,3,2,1 合法
入栈顺序:1,2,3,4,5 出栈顺序:4,5,3,1,2 不合法

思路:
1,先判断,如果两个数据序列有任意一个为空;两个序列长度不相等;或者入栈序列长度小于等于0,这三种情况都肯定不合法;
2,创建一个栈,里面依次放入栈序列数据,再创建一个指针cur指向出栈序列。入栈时,判断栈顶元素是否与cur指向的数据相等且栈是否为空,满足条件的话将栈顶元素出栈,cur向后移,继续判断,如果不满足,继续将入栈数据入栈,继续判断,直至数据入栈完成,判断出栈完毕,这下判断栈是否为空,为空则合法,反之就不合法喽!

 bool IsPopOrder(const int push[],const int pop[],int length1,int length2)
 {
     if((length1 != length2) || (length1<=0) || push == NULL || pop == NULL)
         return false;
     stack<int> s1;
     int* cur = pop;
     for(int i = 0;i<length1;++i)
     {
         s1.push(push[i]);
         while((s1.top() == *cur) && !s1.empty())
         {
             s1.pop();
             cur++;
         }
         if(s1.empty())
             return true;
         return false;
     }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值