使用队列反转栈


简介

队列和栈都是线性数据结构,用于存储数据。栈使用后进先出 (LIFO) 原则插入和删除其元素。队列使用先进先出 (FIFO) 原则。在本教程中,我们将学习如何使用队列反转栈。反转意味着栈的最后一个元素变成第一个元素,依此类推。

什么是栈?

数据结构中的栈受到现实生活中栈的启发。它使用后进先出 (LIFO) 逻辑,这意味着最后进入栈的元素将首先被移除。在栈中,元素从顶部插入,也只能从顶部移除。栈只有一个端点。

现实生活中栈的一个例子是报纸堆。从堆中,最后放置的报纸将首先被移除。

栈的基本函数

  • push() − 从顶部插入栈元素。

    语法 − stack_name.push(元素类型)

  • pop() − 从栈顶移除元素。

    语法 − stack_name.pop()

  • size() − 返回栈的大小。

    语法 − stack_name.size()

  • top() − 返回栈顶元素的引用。

    语法 − stack_name.top()

什么是队列?

数据结构中的队列受到现实生活中队列的启发。在队列中,元素从后端插入,从前端移除。队列两端都开放,并且在其操作中使用先进先出 (FIFO) 原则。该原则规定,首先插入的元素将首先从队列中移除。

队列的基本函数

  • push() − 将元素插入到队列的后端。

    语法 − queue_name.push(数据类型)

  • pop() − 从队列的前端移除元素。

    语法 − queue_name.pop()

  • front() − 获取队列中第一个元素的引用。

    语法 − queue_name.front()

  • size() − 返回队列的大小。

    语法 − queue_name.size()

使用队列反转栈

让我们首先通过一个例子了解什么是栈反转。

Stack before reversing: [2,5,6,7]
Stack Reversed: [7,6,5,2]

逻辑− 我们使用一个包含元素的栈和一个空的队列。逐个从栈中弹出元素并将其插入到队列中,直到所有元素都插入。现在,移除队列元素并再次将其插入到空栈中。这样就完成了。

算法

步骤 1:将元素插入到栈中。

步骤 2:获取一个空的队列。

步骤 3:将栈元素逐个推入空队列中。

步骤 4:现在栈为空。

步骤 5:逐个从队列中弹出元素并推入栈中。

步骤 6:栈已反转。

示例

以下示例展示了。

#include<iostream>
#include<stack>
#include<queue>
using namespace std;
//function to reverse a queue
void reverse(queue<int> &q) {
   
   //Declaring a stack s
   stack<int> s;
   
   //inserting Queue elements into stack
   while (!q.empty()) {
      s.push(q.front());
      q.pop();
   }
   
   //Again pushing the elements into queue from back
   while (!s.empty()) {
      q.push(s.top());
      s.pop();
   }
}

void printQueue(queue<int> q) {
   
   while(!q.empty()) {
      cout<<q.front()<<" ";
      q.pop();
   }
   cout<<endl;
}

int main() {
   queue<int> q;
   //pushing elements into the Queue
   for(int i=1;i<=5;i++) {
      q.push(i);
   }
   cout<<"Initial Queue is: ";
   printQueue(q);
   
   reverse(q);
   
   cout<<"Reversed Queue is: ";
   printQueue(q);
}

输出

Initial Queue is: 1 2 3 4 5 
Reversed Queue is: 5 4 3 2 1 

结论

我们可以使用队列轻松反转栈。我们将栈元素插入到队列中,然后再次将队列元素重新插入到栈中。我希望您发现此方法易于理解和实现。

更新于: 2023年2月22日

1K+ 次浏览

开启您的 职业生涯

完成课程获得认证

立即开始
广告