21xrx.com
2024-11-05 18:59:48 Tuesday
登录
文章检索 我的文章 写文章
C++实现双栈队列
2023-07-05 10:13:59 深夜i     --     --
C++ 双栈队列 实现 数据结构 堆栈

双栈队列是一种使用两个栈结构来实现队列功能的数据结构。在队列中,先进先出的规则是必须遵守的,而在双栈队列中,我们使用两个栈来实现这个规则,其中一个栈用于插入和删除元素,另一个栈用于辅助操作。

使用C++语言来实现双栈队列的代码如下:


#include<iostream>

#include<stack>

using namespace std;

class myQueue {

private:

  stack<int> inStack, outStack; //(1)使用两个栈

public:

  void enqueue(int x) { //(2)入队操作,在inStack中插入元素

    inStack.push(x);

  }

  int dequeue() { //(3)出队操作,在outStack中删除元素

    if (outStack.empty()) {

      while (!inStack.empty()) {

        outStack.push(inStack.top());

        inStack.pop();

      }

    }

    int item = outStack.top();

    outStack.pop();

    return item;

  }

  bool empty() { //(4)判断队列是否为空

    return inStack.empty() && outStack.empty();

  }

};

int main() {

  myQueue q;

  q.enqueue(1);

  q.enqueue(2);

  q.enqueue(3);

  while (!q.empty()) {

    cout << q.dequeue() << ' ';

  }

  return 0;

}

在上面的代码中,首先定义了一个类 myQueue 来表示双栈队列,其中包含了两个栈 inStack 和 outStack,分别用于插入和删除元素。enqueue 函数用于在 inStack 中插入元素,dequeue 函数用于在 outStack 中删除元素。当 outStack 为空时,需要先将 inStack 中的元素全部压入 outStack 中,然后再进行删除操作。empty 函数用于判断队列是否为空。

在主函数中,我们使用了 enqueue 函数将元素插入队列中,然后使用了 dequeue 函数将元素删除。最后使用 empty 函数判断队列是否为空。

总的来说,使用两个栈实现队列功能是一种很优雅的解决方案。这种方法不仅能够实现队列的功能,还能够借助栈的特性,有效地提高代码运行效率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复