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 }
  • 相关阅读:
    javaapplicationWeb application setup on Ubuntu VPS
    内容中断随想录(risc cpu的那些事)
    算法线性编程珠玑读书笔记之----->使用线性算法求解连续子序列的最大和
    classnull100
    安装javaUbuntu下安装JDK1.6,并将之设为默认的JDK
    筛选实现C++实现筛选法
    调试设置移动端Web开发环境搭建实践
    路由器交换机[置顶] 路由器和交换机的综合实验⑵
    卡数字怀念的东西:魔方
    密码配置配置SSH免密码登陆
  • 原文地址:https://www.cnblogs.com/zzw1024/p/10988243.html
Copyright © 2011-2022 走看看