数据结构 栈和队列的相互模拟

利用2个栈模拟队列、利用2个队列模拟栈

 

双栈模拟队列

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

初始化2个栈stack1  stack2

每次入队列总是压入stack1栈顶

而每次出队列总是从stack2栈顶弹出

若stack2为空则将stack1元素全部弹出压入stack2

(始终确保先进先出)

 

class Queue
{
public:
    void push(int node) {
         
         
       stack1.push(node);//新来的元素总是往stack1存放
         
    }
 
    int pop() {
        if(stack2.size()!=0)//stack2中有元素,直接出栈顶
        {
            int result=stack2.top();
            stack2.pop();
            return result;
        }
        else{
           while(stack1.empty()!=1) //一直stack1退栈
            {
                int temp=stack1.top();
                stack2.push(temp);
                stack1.pop();
            }
            int result=stack2.top();
            stack2.pop();
            return result;
        }
             
         
    }
 
private:
    stack stack1;
    stack stack2;
};

 

双队列模拟栈

初始化2个队列queue1 queue2

每次压入栈顶实际操作(放入一个不为空队列 )

每次出栈

将不为空队列的前面size-1个元素放入另一个空队列

然后弹出剩下的元素(即为栈顶)

 

class stack
{
public:
    void push(int node) {
         
       if(queue1.empty()!=1)
          queue1.Enqueue(node);//新来的元素总是不为空的队列放
       else
          queue2.Enqueue(node);
         
    }
 
    int pop() {
        if(queue1.size()==0 && queue2.size()==0)
             return 0;
        if(queue1.size()!=0)//queue1中有元素
        {  
            int i=0;
            while(i queue1;
    queue queue2;
};

 

 

 

 

 

 

你可能感兴趣的:(数据结构)