• 《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——队列


    2014.06.14 21:04

    简介:

      队列作为先进先出(FIFO)思想的代表,是最基础的数据结构之一,最典型的应用,就是广度优先搜索。实现方式可以用一条单链表或者两个栈,其中前者更为靠谱,原因请自行分析。

    图示:

      下图为单链表实现队列的思路。链表的头尾位置分别被记录,因此很容易实现尾进头出的操作。

      

      另一种思路是用两个栈实现一个队列,主要思路就是颠来倒去,两个栈的先进先出叠加起来,成为了先进后出。我下面的代码居然是这种方案的,看来当时直接拿了自己之前写过的代码偷懒,于是就没实现链表版的队列。用两个栈来实现队列,貌似也是一道烂大街的面试题,所以学会这个思路还是很有必要的。

      

    实现:

     1 // My implementation of queue with two stacks.
     2 #include <stack>
     3 using namespace std;
     4 
     5 class Queue {
     6 public:
     7     Queue() {}
     8     
     9     void push(int val) {
    10         s1.push(val);
    11     }
    12     
    13     void pop() {
    14         if (s2.empty()) {
    15             while (!s1.empty()) {
    16                 s2.push(s1.top());
    17                 s1.pop();
    18             }
    19         }
    20         s2.pop();
    21     }
    22     
    23     int size() {
    24         return s1.size() + s2.size();
    25     }
    26     
    27     bool empty() {
    28         return size() == 0;
    29     }
    30     
    31     int front() {
    32         if (s2.empty()) {
    33             while (!s1.empty()) {
    34                 s2.push(s1.top());
    35                 s1.pop();
    36             }
    37         }
    38         
    39         return s2.top();
    40     }
    41     
    42     int back() {
    43         if (s1.empty()) {
    44             while (!s2.empty()) {
    45                 s1.push(s2.top());
    46                 s2.pop();
    47             }
    48         }
    49         
    50         return s1.top();
    51     }
    52     
    53     ~Queue() {
    54         while (!s1.empty()) {
    55             s1.pop();
    56         }
    57         while (!s2.empty()) {
    58             s2.pop();
    59         }
    60     }
    61 private:
    62     stack<int> s1, s2;
    63 };
    64 
    65 int main()
    66 {
    67     return 0;
    68 }
  • 相关阅读:
    win10系统全角半角切换
    出差(3~十六)
    问题在于读书不多而想的太多
    出差(3~十五)
    感恩
    hibernate--联合主键--XML
    hibernate--ID生成策略--XML
    hibernate--ID生成策略--annotation
    Hibernate---基础配置
    Hibernate---基础配置之日志信息slf 及搭建日志环境
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3788729.html
Copyright © 2020-2023  润新知