zoukankan      html  css  js  c++  java
  • 《剑指offer》面试题7—用两个栈实现队列

    题目:给出队列声明,要求实现AppendTail和DeleteHead函数。

    template <typename T>
    class CQueue
    {
    public:
    void AppendTail(const T& element);
    T DeleteHead();
    private:
    stack<T> stack1;
    stack<T> stack2;
    };

    思路:要用两个先进后出的栈实现先进先出的队列。压栈总是压入stack1,要获得队列头时:如果stack2为空,则把stack1依次弹出栈并压入stack2,取stack2栈顶元素;如果stack2不为空,则直接取stack2栈顶元素。

     1 #include <iostream>
     2 #include <stack>
     3 using namespace std;
     4 
     5 template <typename T>
     6 class CQueue
     7 {
     8 public:
     9     void AppendTail(const T& element);
    10     T DeleteHead();
    11 private:
    12     stack<T> stack1;
    13     stack<T> stack2;
    14 };
    15 
    16 template<typename T> void CQueue<T>::AppendTail(const T& element)
    17 {
    18     stack1.push(element);
    19 }
    20 
    21 template<typename T> T CQueue<T>::DeleteHead()
    22 {
    23     T temp;
    24     if(!stack2.empty())
    25     {
    26         temp = stack2.top();
    27         stack2.pop();
    28     }
    29     else
    30     {
    31         if(stack1.empty())
    32         {
    33             cout<<"No element left!"<<endl;
    34             //return;
    35         }
    36         else
    37         {
    38             while(!stack1.empty())
    39             {
    40                 temp = stack1.top();
    41                 stack1.pop();
    42                 stack2.push(temp);
    43             }
    44             temp = stack2.top();
    45             stack2.pop();
    46         }
    47     }
    48     return temp;
    49 }
    50 
    51 
    52 
    53 int main()
    54 {
    55     CQueue<int> my_queue;
    56     int n,val;
    57     cout<<"1 for Append"<<endl<<"2 for DeleteHead"<<endl;
    58     while(scanf("%d",&n)!=0)
    59     {
    60         if(n == 1)
    61         {
    62             scanf("%d",&val);
    63             my_queue.AppendTail(val);
    64         }
    65         else if(n == 2)
    66         {
    67             val = my_queue.DeleteHead();
    68             cout<<"The head of Queue:"<<val<<endl;
    69         }
    70         else
    71             cout<<"Illegal n!"<<endl;
    72     }
    73     return 0;
    74 }
    View Code
  • 相关阅读:
    第一个独立开发的游戏 怪斯特:零 已经上线APP STORE!
    Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板
    java 实现 多态的 三要素
    mysql 基础语法掌握~ This is just the beginning.
    rem ~~ 你懂了吗?
    两个css之间的切换
    JavaScript高级程序设计(第3版)
    保持底部~~永远在底部
    文字要对齐!!!
    改变this不要怕!!!
  • 原文地址:https://www.cnblogs.com/CnZyy/p/3308488.html
Copyright © 2011-2022 走看看