zoukankan      html  css  js  c++  java
  • 栈的压入与弹出

    这个题目,其实考的是栈的本质问题,也就是它的压入和弹出的顺序。首先我们分析题目
    中所给的那几个例子,也就是数据的压入顺序是1、2、3、4、5。但是弹出的顺序是4、5、
    3、2、1。这个好办啦,猜都能猜到它是如何操作的。

    我们直观上看是这样,但是实际上,给你一个压入数组,一个弹出的数组,如何去判断它
    的正确性呢?
    其实我们可以根据这两个数组进行分析:

    从上面可以看到,首先弹出的是4,因此栈顶肯定是4啦,但是此时栈里只有4吗?
    肯定不是,因为先入先出嘛,看第一个数组,先压入了1、2、3.再压入了4,下
    面的数组则先弹出了4.,而且第二个数组中,3、2、1在4后面。因此,此时栈里至少
    有1、2、3.但是5呢?
    第一个数组中,5在四后面才压入,因此里面肯定没有5.但是第二个数组中,5在4后面弹出
    则知,5压入后就弹出了。



    1. #ifndef STACK_PUSH_POP_SEQ_H
    2. #define STACK_PUSH_POP_SEQ_H
    3. #include<iostream>
    4. #include<stack>
    5. bool stackPPseq(const int *pPussh,const int *pPop,int nLength){
    6. int pushIndex=0;
    7. int popIndex=0;
    8. std::stack<int> m_stack;
    9. if(pPussh==NULL||pPop==NULL||nLength==0){
    10. return false;
    11. }
    12. while(pushIndex<nLength&&popIndex<nLength){
    13. if(m_stack.empty()){ //如果栈为空,则一直从题目给的压栈顺序数组中提取元素压入栈中,直到碰到一个与弹出数组相等的元素。
    14. while(pPussh[pushIndex]!=pPop[popIndex]){
    15. m_stack.push(pPussh[pushIndex]);
    16. ++pushIndex;
    17. }
    18. m_stack.push(pPussh[pushIndex]);
    19. }
    20. if(m_stack.top()==pPop[popIndex]){ //如果弹出栈的数组元素与栈顶的元素相等,则一直弹。
    21. while(m_stack.top()==pPop[popIndex]){
    22. m_stack.pop();
    23. popIndex++;
    24. if(popIndex==nLength){
    25. return true;
    26. }
    27. }
    28. }
    29. if(m_stack.top()!=pPop[popIndex]){//如果栈顶没有与弹出数组元素相等的,则再压。
    30. while(m_stack.top()!=pPop[popIndex]){
    31. pushIndex++;
    32. if(pushIndex==nLength){
    33. break;
    34. }
    35. m_stack.push(pPussh[pushIndex]);
    36. }
    37. }
    38. }
    39. if(pPop[popIndex]==m_stack.top()){
    40. m_stack.pop();
    41. popIndex++;
    42. if(popIndex>=nLength){
    43. return true;
    44. }
    45. }
    46. return false;
    47. }
    48. #endif












  • 相关阅读:
    基于Haproxy+Keepalived构建高可用负载均衡集群
    基于 Haproxy 构建负载均衡集群
    shell for循环练习题99乘法表
    帮软件同事写的vsftpd服务虚拟用户管理脚本
    sed文件处理练习题
    判断ssh登录密码验证错误超过5次的IP被拉黑
    使用shell中数组功能生成自己的手机号
    利用Crontab设置每个月第一个周六的17:30执行/opt/shell.sh 脚本
    Tomcat 项目代码上线步骤详解
    Jar/War/Ear等包的作用与区别详解
  • 原文地址:https://www.cnblogs.com/yml435/p/4655486.html
Copyright © 2011-2022 走看看