zoukankan      html  css  js  c++  java
  • 面试题6:用两个栈实现队列


    思路:设置两个栈stack1和stack2,stack1实现入队列功能,stack2实现出队列功能。

    (1)入队列:入栈stack1

    (2)出队列:若stack2不空,则直接弹出stack2中的栈顶元素

                  若stack2为空,则依次弹出stack1中的元素放入stack2中,再弹出stack2中的栈顶元素

    C++代码:

    #include "stdafx.h"
    #include <iostream>
    #include <stack>
    using namespace std;
    
    template<class T>
    class CQueue
    {
    public:
    	CQueue(void);
    	~CQueue(void);
    	void AddTail(const T &addData);
    	void DeleteHead(T &deleteData);
    
    private:
    	stack<T> stack1;
    	stack<T> stack2;
    };
    
    template<class T>
    CQueue<T>::CQueue(void)
    {
    
    }
    
    template<class T>
    CQueue<T>::~CQueue(void)
    {
    
    }
    
    template<class T>
    void CQueue<T>::AddTail(const T &addData)
    {
       stack1.push(addData);
    }
    
    template<class T>
    void CQueue<T>::DeleteHead(T &deleteData)
    {
       if (stack2.empty())
       {
    	   while (!stack1.empty())
    	   {
    		   T topData = stack1.top();
    		   stack2.push(topData);
    		   stack1.pop();
    	   }
       }
    
       if (stack2.empty())
       {
    	   cout << "队列中无元素!" << endl;
       }
       else
       {
    	   deleteData = stack2.top();
    	   stack2.pop();
       }
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	CQueue<int> q;
    	for (int i=0; i<6; i++)
    	{
    		q.AddTail(i);
    	}
    
    	int deleteData = 0;
    	for (int i=0; i<6; i++)
    	{		
    		q.DeleteHead(deleteData);
    		cout << deleteData << " ";
    	}
    	cout << endl;
    
    	q.DeleteHead(deleteData);
    
    	system("pause");
    	return 0;
    }
    


  • 相关阅读:
    当你发现前端传过来的空格是 xa0
    反转义——使从文件读取的失效的转义字符串生效
    openpyxl 读取前端传输的文件,并处理
    django实现下载excel
    IO模块的使用
    pandas 执行sql语句
    近期工作生活小总结
    入职一个月++近期学习++生活总结
    github访问不了
    实现Spring框架(二) SpringMVC框架
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3201070.html
Copyright © 2011-2022 走看看