zoukankan      html  css  js  c++  java
  • 队列与栈的相互实现

    Problem:
      如何仅用队列结构实现栈结构?

    Solution:
      队列是先进先出,而栈是先进后出  

      故使用两个队列来实现一个栈的功能  

      一个存放原来的数据,

      另一个做数据倒腾的容器

    Code:

      

     1 class QueueToStack
     2 {
     3 private:
     4     queue<int>Data, Temp;
     5 
     6 public:
     7     void Push(int a)
     8     {
     9         Data.push(a);
    10     }
    11     int Top()
    12     {
    13         int DataSize = Data.size();
    14         for (int i = 0; i < DataSize - 1; ++i)//将data的数据倒腾进temp,留一个就是top了
    15         {
    16             Temp.push(Data.front());
    17             Data.pop();
    18         }
    19         int res = Data.front();
    20         Temp.push(Data.front());
    21         Data.pop();
    22 
    23         auto tem = Data;
    24         Data = Temp;
    25         Temp = Data;//交换回来,始终保持数据在Data中
    26 
    27         return res;//返回top值
    28     }
    29 
    30     void Pop()
    31     {
    32         int DataSize = Data.size();
    33         for (int i = 0; i < DataSize - 1; ++i)//将data的数据倒腾进temp,留一个就是top了
    34         {
    35             Temp.push(Data.front());
    36             Data.pop();
    37         }
    38         Data.pop();//删除top值
    39 
    40         auto tem = Data;
    41         Data = Temp;
    42         Temp = Data;//交换回来,始终保持数据在Data中
    43     }
    44     
    45 };


    Problem2:
       如何仅用栈结构实现队列结构?

    解题思路:
       同样的,使用两个栈Data,Temp来实现列表功能
       Data用来存放数据,Temp用来倒腾数据

    Code:

      

     1 class StackToQueue
     2 {
     3 private:
     4     stack<int>Data, Temp;
     5 
     6 public:
     7     void Push(int a)
     8     {
     9         Data.push(a);
    10     }
    11     int Front()
    12     {
    13         while (!Data.empty())
    14         {
    15             Temp.push(Data.top());
    16             Data.pop();
    17         }
    18         int res = Temp.top();
    19         while (!Temp.empty())
    20         {
    21             Data.push(Temp.top());
    22             Temp.pop();
    23         }
    24         return res;
    25     }
    26 
    27     void Pop()
    28     {
    29         while (!Data.empty())
    30         {
    31             Temp.push(Data.top());
    32             Data.pop();
    33         }
    34         Temp.pop();
    35         while (!Temp.empty())
    36         {
    37             Data.push(Temp.top());
    38             Temp.pop();
    39         }
    40     }
    41 };

    测试代码:

      

     1 void Test()
     2 {
     3     QueueToStack myStack;
     4     myStack.Push(1);
     5     myStack.Push(2);
     6     myStack.Push(3);
     7     myStack.Push(4);
     8     myStack.Push(5);
     9     myStack.Push(6);
    10 
    11     cout << myStack.Top() << endl;
    12     myStack.Pop();
    13     cout << myStack.Top() << endl;
    14     myStack.Pop();
    15     cout << myStack.Top() << endl;
    16     myStack.Push(10);
    17     myStack.Push(12);
    18     cout << myStack.Top() << endl;
    19 
    20 
    21 
    22     cout << "=========================" << endl;
    23     cout << "=========================" << endl;
    24     cout << "=========================" << endl;
    25 
    26     StackToQueue myQueue;
    27     myQueue.Push(1);
    28     myQueue.Push(2);
    29     myQueue.Push(3);
    30     myQueue.Push(4);
    31     myQueue.Push(5);
    32     myQueue.Push(6);
    33 
    34     cout << myQueue.Front() << endl;
    35     myQueue.Pop();
    36     cout << myQueue.Front() << endl;
    37     myQueue.Pop();
    38     cout << myQueue.Front() << endl;
    39 
    40     myQueue.Push(7);
    41     myQueue.Push(8);
    42 
    43     cout << myQueue.Front() << endl;
    44 
    45 }
  • 相关阅读:
    Google开源框架盒子模型之Android---<FlexboxLayout>(认知篇)
    Android Studio配置中AndroidAnnotations
    Android Studio分包引发的血案(App启动一直黑屏问题)
    Android Studio打包APK过大问题的研究
    Android WebView JS互调案例
    Eclipse版本android 65535解决方案(原理等同android studio现在的分包方式)
    Android MVP + 泛型,实现了友好VP交互及Activity潜在的内存泄露的优化
    mysql数据监控(db.odbc.select[])
    zabbix 默认消息
    zabbix 利用脚本发邮件(mail)
  • 原文地址:https://www.cnblogs.com/zzw1024/p/10988243.html
Copyright © 2011-2022 走看看