• 面试题六 用两个栈实现队列


    题目

      用两个栈实现队列的进队和出队功能

    分析

      1. 栈直接用C++的容器适配器 stack 实现

      2. 当进队时,直接往栈 1 存放数据;当出队时,如果栈 2 非空则直接从栈 2 取数,否则将栈 1 的数据全部出栈并转移至栈 2,然后再从栈 2 取数

      3. 考虑到这里采用的两个栈应当要封装起来,因此,采用来实现这个队列。

    代码实现

     1 #include <iostream>
     2 #include <stack>
     3 
     4 using namespace std;
     5 
     6 // 队列定义
     7 class SQueue {
     8 public:
     9     SQueue (void) {
    10     }
    11     ~SQueue (void) {
    12     }
    13     // 入队函数
    14     void appendTail (const int n);
    15     // 出队函数
    16     int deleteHead();
    17     // 队判空函数
    18     bool empty();
    19 private:
    20     stack <int> s1; // 使用容器适配器实现栈
    21     stack <int> s2;
    22 };
    23 
    24 void SQueue :: appendTail (const int n) {
    25     s1.push (n);
    26 }
    27 
    28 int SQueue :: deleteHead() {
    29     int tem;
    30     // 首先将第二个栈的元素出栈,如果第二个栈中没有元素可出了,那么就将第一个栈中的元素转移到第二个栈中来。
    31     if (s2.size() == 0) {
    32         while (s1.size() != 0) {
    33             tem = s1.top();
    34             s1.pop();
    35             s2.push(tem);
    36         }
    37     }
    38 
    39     tem = s2.top();
    40     s2.pop();
    41 
    42     return tem;
    43 }
    44 
    45 bool SQueue :: empty() {
    46     // 两个栈都为空则说明队列为空
    47     if (s1.size() == 0 && s2.size() ==0) 
    48         return 1;
    49     else return 0;
    50 }
    51 
    52 int main (void) {
    53     SQueue q;
    54 
    55     // 将 9 5 4 7 这四个整数进队
    56     q.appendTail(9);
    57     q.appendTail(5);
    58     q.appendTail(4);
    59     q.appendTail(7);
    60 
    61     // 让之前进队的四个数出队并打印
    62     int num;
    63     while (!q.empty()) {
    64         num = q.deleteHead();
    65         cout << num << " ";
    66     }
    67     cout << endl;
    68 
    69     return 0;
    70 }

    小结

      1. 本题只要求实现入队和出队函数,其实可以继续添加机制完善这个队列:如复制控制,空间限制等

  • 相关阅读:
    LeetCode Medium:15. 3Sum
    LeetCode Medium:12. Integer to Roman
    LeetCode Medium: 11. Container With Most Water
    TypeError: unsupported operand type(s) for /: 'map' and 'int'
    【C#】课堂知识点#4
    【C#】课堂知识点#3
    【统计与建模】R语言基本操作
    【题解】表达式的值
    【题解】瑞士轮
    【题解】道路游戏
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3654665.html
Copyright © 2020-2023  润新知