• 用两个栈实现队列


    题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
    template <typename T>class CQueue
    {
    public:
      CQueue(void);
      ~CQueue(void);
      void appendtail(const T& node);
      T deleteHead();
    private:
      stack<T> stack1;
      stack<T> stack2;
    };

    解题思路:

    插入操作在stack1中进行,删除操作在stack2中进行,如果stack2为空,则将stack1中的所有元素转移到stack2中。

    #include<stack>
    #include<stdio.h>
    #include<iostream>
    
    using namespace std;
    
    template <typename T> class CQueue
    {
    public:
        CQueue(void);
        ~CQueue(void);
    
        void appendTail(const T& node);
    
        T deleteHead();
    private:
        stack<T> stack1;
        stack<T> stack2;
    };
    
    //构造函数 
    template <typename T> CQueue<T>::CQueue(void)
    {
    }
    
    //析构函数 
    template <typename T> CQueue<T>::~CQueue(void)
    {
    }
    
    //插入元素 
    template <typename T>void CQueue<T>::appendTail(const T& element)
    {
        stack1.push(element);
    }
    
    //删除元素并返回 
    template <typename T> T CQueue<T>::deleteHead()
    {
        if(stack2.size() <= 0)
        //当stack2为空时才可以将stack1中的数移过来 
        {
            while(stack1.size()>0)
            {
                T& data = stack1.top();
                stack1.pop();
                stack2.push(data);
            }
        }
    
        if(stack2.size() == 0)
            //throw new exception("queue is empty");
            exit(1);
    
        T head = stack2.top();
        stack2.pop();
    
        return head;
    }
    
    
    void Test(char actual, char expected)
    {
        if(actual == expected)
            printf("Test passed
    ");
        else
            printf("Test failed.
    ");
    }
    
    int main()
    {
        CQueue<char> queue;
    
        queue.appendTail('a');
        queue.appendTail('b');
        queue.appendTail('c');
    
        char head = queue.deleteHead();
        Test(head, 'a');
    
        head = queue.deleteHead();
        Test(head, 'b');
    
        queue.appendTail('d');
        head = queue.deleteHead();
        Test(head, 'c');
    
        queue.appendTail('e');
        head = queue.deleteHead();
        Test(head, 'd');
    
        head = queue.deleteHead();
        
        Test(head, 'e');
        
        
        queue.appendTail('a');
        queue.appendTail('b');
        queue.appendTail('c');
        queue.appendTail('d');
        int length = 4;
        while(length > 0)
        {
            printf("%c ", queue.deleteHead());
            --length ;
        }
        return 0;
    }

  • 相关阅读:
    hdu 1561 The more, The Better(树形dp入门)
    poj 2342 Anniversary party (树形dp入门)
    hdu 2089 不要62(数位dp入门)
    hdu 3555 Bomb (数位dp入门)
    hdu 5591 ZYB's Game
    hdu 5592 ZYB's Premutation (线段树+二分查找)
    智能指针原理代码
    友元类
    类与类指针的关系
    虚析构函数
  • 原文地址:https://www.cnblogs.com/sankexin/p/5612446.html
Copyright © 2020-2023  润新知