码迷,mamicode.com
首页 > 其他好文 > 详细

两个队列实现栈

时间:2017-09-01 09:53:35      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:www   print   png   ges   get   hive   push   src   队列   

http://www.cnblogs.com/kaituorensheng/archive/2013/03/02/2939690.html

 

//前提已知
typedef struct queue
{
        int queuesize;
        int head, tail;
        int *q;
}Queue;

void InitQueue(Queue *q);
void EnQueue(Queue *q, int key);
int DeQueue(Queue *q);
int SizeOfQueue(Queue *q);
int IsQueueEmpty(Queue *q);
int IsQueueFull(Queue *q);

 

思路

    q1是专职进出栈的,q2只是个中转站

  • 入栈:直接入队列q1即可
  • 出栈:把q1的除最后一个元素外全部转移到队q2中,然后把刚才剩下q1中的那个元素出队列。之后把q2中的全部元素转移回q1中

图示

   技术分享

技术分享

参考代码

void Push(Queue *q1, Queue *q2, int k)
{
        EnQueue(q1, k);
}

int  Pop(Queue *q1, Queue *q2)
{
    int tmp;
    if(IsQueueEmpty(q1) == 1)
    {
       printf("Stack Empty!\n");
    }
    else
    {
        while(SizeOfQueue(q1) != 1)
        {
            EnQueue(q2, DeQueue(q1));
        }
        tmp = DeQueue(q1);
        while(IsQueueEmpty(q2) == 0)
        {
            EnQueue(q1, DeQueue(q2));
        }
        return tmp;
    }
}

 

两个队列实现栈

标签:www   print   png   ges   get   hive   push   src   队列   

原文地址:http://www.cnblogs.com/wft1990/p/7461482.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!