zoukankan      html  css  js  c++  java
  • 两个堆栈实现一个队列和一叠两个队列实现【算法导论课后题】

    两个栈实现队列两个队列实现堆栈问题,网上有很多资料。这里仅仅是叙述操作方法的介绍觉得至少。


    两个栈实现一个队列

    思想:假设两个栈分别为s1,s2。对s1进行入队,出队时,先推断s2是否为空,假设是则将s1中元素压入s2并弹出最上面元素,假设不是,则直接弹出s2最上面的元素。

    <span style="font-size:18px;">EnQueue(s1,s2,k){
    push(s1,k)</span><span style="font-family:Arial, Helvetica, sans-serif;"><span style="font-size: 18px;">;</span></span><span style="font-size:18px;">
    }
    //出队
    DeQueue(s1,s2){
    if( IsEmptyStack(s2)){
    while(sizeofStack(s1) !=0){
    push(s2,pop(s1));
    }
    }
    if(IsEmptyStack(s2)){
    printf("stack overflow");
    }
    return pop(s2);
    }</span>

    两个队列实现一个栈

    思想:一个队列用来入栈q1。还有一个作为中转站q2。对不为空的队列进行入栈和出栈操作,入栈时直接入队就可以。出栈时,先将队列中n-1个元素压入中转站,最后一个元素出队

    <span style="font-size:18px;">push(q1,q2,k){
    if(IsEmptyQueue(q1)){
    EnQueue(q2,k);
    }
    else{
    EnQueue(q1,k);
    }
    }</span>


    出栈时须要两个暂时指针pushtmp和tmp作为入栈和中转站(该方法消耗空间)
    <span style="font-size:18px;">pop(q1,q2){
    Queue pushtmp,tmp;
    if(IsEmptyQueue(q1)){
    pushtmp=q2;
    tmp=q1;
    }
    else{
    pushtmp=q1;
    tmp=q2;
    }
    if(IsEmptyQueue(pushtmp)){
    printf("OverFlow");
    }
    else{
    while(sizeof(pushtmp) !=1)
    DeQueue(tmp,DeQueue(pushtmp));
    }
    return Dequeue(pushtmp);
    }</span>



    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    使用CSS3美化复选框checkbox
    MYSQL select时锁定记录问题
    SQL Server中的锁
    T-SQL查询进阶—理解SQL Server中的锁
    SQL:查找被锁的表,以及锁表的SQL语句(重点推荐)
    Mac 常用的手势
    Mac 常用的快捷键
    Mac上的学习神器:Marginnote
    Mac 常用命令介绍
    Mac 上的传奇效率神器 Alfred 3
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4676445.html
Copyright © 2011-2022 走看看